emacs-diffs
[Top][All Lists]
Advanced

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

scratch/comp-static-data 94120d328e8 08/16: Merge branch 'master' into s


From: Vibhav Pant
Subject: scratch/comp-static-data 94120d328e8 08/16: Merge branch 'master' into scratch/comp-static-data
Date: Thu, 19 Jan 2023 12:44:37 -0500 (EST)

branch: scratch/comp-static-data
commit 94120d328e8df419143d14ee7b0ddf50400f657c
Merge: 7727f85b869 1ddd31bf984
Author: Vibhav Pant <vibhavp@gmail.com>
Commit: Vibhav Pant <vibhavp@gmail.com>

    Merge branch 'master' into scratch/comp-static-data
---
 .gitattributes                                     |    2 +-
 .gitignore                                         |    2 +-
 .gitlab-ci.yml                                     |    2 +-
 CONTRIBUTE                                         |    3 +
 ChangeLog.1                                        |    4 +-
 ChangeLog.2                                        |    4 +-
 ChangeLog.3                                        |   38 +-
 GNUmakefile                                        |    2 +-
 INSTALL                                            |    2 +-
 INSTALL.REPO                                       |    2 +-
 Makefile.in                                        |    2 +-
 README                                             |    2 +-
 admin/ChangeLog.1                                  |    2 +-
 admin/README                                       |    2 +-
 admin/admin.el                                     |    5 +-
 admin/alloc-colors.c                               |    2 +-
 admin/authors.el                                   |    2 +-
 admin/automerge                                    |    2 +-
 admin/build-configs                                |    2 +-
 admin/charsets/Makefile.in                         |    2 +-
 admin/charsets/mapconv                             |    2 +-
 admin/charsets/mapfiles/README                     |    2 +-
 admin/check-man-pages                              |    2 +-
 admin/cus-test.el                                  |    2 +-
 admin/diff-tar-files                               |    2 +-
 admin/emacs-shell-lib                              |    2 +-
 admin/emake                                        |    2 +-
 admin/find-gc.el                                   |    4 +-
 admin/git-bisect-start                             |   43 +-
 admin/gitmerge.el                                  |    4 +-
 admin/grammars/Makefile.in                         |    2 +-
 admin/grammars/c.by                                |    2 +-
 admin/grammars/grammar.wy                          |    2 +-
 admin/grammars/java-tags.wy                        |    2 +-
 admin/grammars/js.wy                               |    2 +-
 admin/grammars/make.by                             |    2 +-
 admin/grammars/python.wy                           |    2 +-
 admin/grammars/scheme.by                           |    2 +-
 admin/grammars/srecode-template.wy                 |    2 +-
 admin/last-chance.el                               |    2 +-
 admin/make-emacs                                   |    2 +-
 admin/make-manuals                                 |    2 +-
 admin/merge-gnulib                                 |    2 +-
 admin/merge-pkg-config                             |    2 +-
 admin/notes/copyright                              |    2 +-
 admin/notes/emba                                   |    2 +-
 admin/notes/hydra                                  |    2 +-
 admin/notes/multi-tty                              |    2 +-
 .../tree-sitter/html-manual/Accessing-Node.html    |    3 +-
 .../html-manual/Language-Definitions.html          |    3 +-
 .../html-manual/Multiple-Languages.html            |    3 +-
 .../html-manual/Parser_002dbased-Font-Lock.html    |    3 +-
 .../html-manual/Parser_002dbased-Indentation.html  |    5 +-
 .../html-manual/Parsing-Program-Source.html        |    3 +-
 .../tree-sitter/html-manual/Pattern-Matching.html  |    3 +-
 .../tree-sitter/html-manual/Retrieving-Node.html   |    3 +-
 .../html-manual/Tree_002dsitter-C-API.html         |    3 +-
 .../tree-sitter/html-manual/Using-Parser.html      |    3 +-
 admin/notes/tree-sitter/html-manual/manual.css     |    2 +-
 admin/notes/unicode                                |    2 +-
 admin/notes/www                                    |    2 +-
 admin/notes/years                                  |    7 +-
 admin/nt/README-UNDUMP.W32                         |    2 +-
 admin/nt/dist-build/README-windows-binaries        |    2 +-
 admin/nt/dist-build/build-dep-zips.py              |    2 +-
 admin/nt/dist-build/build-zips.sh                  |    2 +-
 admin/quick-install-emacs                          |    2 +-
 admin/unidata/Makefile.in                          |    2 +-
 admin/unidata/blocks.awk                           |    2 +-
 admin/unidata/emoji-zwj.awk                        |    2 +-
 admin/unidata/unidata-gen.el                       |    2 +-
 admin/unidata/uvs.el                               |    2 +-
 admin/update-copyright                             |    2 +-
 admin/update_autogen                               |    2 +-
 admin/upload-manuals                               |    2 +-
 autogen.sh                                         |    2 +-
 build-aux/config.guess                             |    2 +-
 build-aux/config.sub                               |    2 +-
 build-aux/git-hooks/commit-msg                     |    2 +-
 build-aux/git-hooks/pre-commit                     |    2 +-
 build-aux/git-hooks/prepare-commit-msg             |    2 +-
 build-aux/gitlog-to-changelog                      |    2 +-
 build-aux/gitlog-to-emacslog                       |    2 +-
 build-aux/make-info-dir                            |    2 +-
 build-aux/move-if-change                           |    2 +-
 build-aux/msys-to-w32                              |    2 +-
 build-aux/update-copyright                         |    2 +-
 build-aux/update-subdirs                           |    2 +-
 config.bat                                         |    2 +-
 configure.ac                                       |   41 +-
 doc/emacs/ChangeLog.1                              |    2 +-
 doc/emacs/Makefile.in                              |    2 +-
 doc/emacs/abbrevs.texi                             |    2 +-
 doc/emacs/ack.texi                                 |    2 +-
 doc/emacs/anti.texi                                |  194 +-
 doc/emacs/arevert-xtra.texi                        |    2 +-
 doc/emacs/back.texi                                |    2 +-
 doc/emacs/basic.texi                               |    2 +-
 doc/emacs/buffers.texi                             |    2 +-
 doc/emacs/building.texi                            |    2 +-
 doc/emacs/cal-xtra.texi                            |    2 +-
 doc/emacs/calendar.texi                            |    2 +-
 doc/emacs/cmdargs.texi                             |    2 +-
 doc/emacs/commands.texi                            |    2 +-
 doc/emacs/custom.texi                              |   30 +-
 doc/emacs/dired-xtra.texi                          |    2 +-
 doc/emacs/dired.texi                               |    2 +-
 doc/emacs/display.texi                             |   14 +-
 doc/emacs/emacs-xtra.texi                          |    2 +-
 doc/emacs/emacs.texi                               |    4 +-
 doc/emacs/emerge-xtra.texi                         |    2 +-
 doc/emacs/entering.texi                            |    2 +-
 doc/emacs/files.texi                               |   15 +-
 doc/emacs/fixit.texi                               |    2 +-
 doc/emacs/fortran-xtra.texi                        |    2 +-
 doc/emacs/frames.texi                              |    2 +-
 doc/emacs/glossary.texi                            |    2 +-
 doc/emacs/gnu.texi                                 |    2 +-
 doc/emacs/haiku.texi                               |    2 +-
 doc/emacs/help.texi                                |    2 +-
 doc/emacs/indent.texi                              |    2 +-
 doc/emacs/killing.texi                             |    2 +-
 doc/emacs/kmacro.texi                              |    2 +-
 doc/emacs/m-x.texi                                 |    2 +-
 doc/emacs/macos.texi                               |    2 +-
 doc/emacs/maintaining.texi                         |    4 +-
 doc/emacs/mark.texi                                |    2 +-
 doc/emacs/mini.texi                                |    2 +-
 doc/emacs/misc.texi                                |    2 +-
 doc/emacs/modes.texi                               |    2 +-
 doc/emacs/msdos-xtra.texi                          |    2 +-
 doc/emacs/msdos.texi                               |    2 +-
 doc/emacs/mule.texi                                |    2 +-
 doc/emacs/package.texi                             |    2 +-
 doc/emacs/picture-xtra.texi                        |    2 +-
 doc/emacs/programs.texi                            |    2 +-
 doc/emacs/regs.texi                                |    2 +-
 doc/emacs/rmail.texi                               |    2 +-
 doc/emacs/screen.texi                              |    2 +-
 doc/emacs/search.texi                              |    2 +-
 doc/emacs/sending.texi                             |    2 +-
 doc/emacs/text.texi                                |    2 +-
 doc/emacs/trouble.texi                             |    2 +-
 doc/emacs/vc-xtra.texi                             |    2 +-
 doc/emacs/vc1-xtra.texi                            |    2 +-
 doc/emacs/windows.texi                             |    2 +-
 doc/emacs/xresources.texi                          |    2 +-
 doc/lispintro/ChangeLog.1                          |    2 +-
 doc/lispintro/Makefile.in                          |    2 +-
 doc/lispintro/README                               |    2 +-
 doc/lispintro/cons-1.eps                           |    2 +-
 doc/lispintro/cons-2.eps                           |    2 +-
 doc/lispintro/cons-2a.eps                          |    2 +-
 doc/lispintro/cons-3.eps                           |    2 +-
 doc/lispintro/cons-4.eps                           |    2 +-
 doc/lispintro/cons-5.eps                           |    2 +-
 doc/lispintro/drawers.eps                          |    2 +-
 doc/lispintro/emacs-lisp-intro.texi                |    2 +-
 doc/lispintro/lambda-1.eps                         |    2 +-
 doc/lispintro/lambda-2.eps                         |    2 +-
 doc/lispintro/lambda-3.eps                         |    2 +-
 doc/lispref/ChangeLog.1                            |    6 +-
 doc/lispref/Makefile.in                            |    2 +-
 doc/lispref/README                                 |    2 +-
 doc/lispref/abbrevs.texi                           |    2 +-
 doc/lispref/anti.texi                              |  227 +-
 doc/lispref/back.texi                              |    2 +-
 doc/lispref/backups.texi                           |    2 +-
 doc/lispref/buffers.texi                           |   20 +-
 doc/lispref/commands.texi                          |    2 +-
 doc/lispref/compile.texi                           |    4 +-
 doc/lispref/control.texi                           |    2 +-
 doc/lispref/customize.texi                         |    2 +-
 doc/lispref/debugging.texi                         |    2 +-
 doc/lispref/display.texi                           |   47 +-
 doc/lispref/edebug.texi                            |   25 +-
 doc/lispref/elisp.texi                             |    8 +-
 doc/lispref/errors.texi                            |    2 +-
 doc/lispref/eval.texi                              |    5 +-
 doc/lispref/files.texi                             |   29 +-
 doc/lispref/frames.texi                            |    2 +-
 doc/lispref/functions.texi                         |   16 +-
 doc/lispref/hash.texi                              |    2 +-
 doc/lispref/help.texi                              |    2 +-
 doc/lispref/hooks.texi                             |    2 +-
 doc/lispref/internals.texi                         |    2 +-
 doc/lispref/intro.texi                             |    2 +-
 doc/lispref/keymaps.texi                           |    2 +-
 doc/lispref/lay-flat.texi                          |    2 +-
 doc/lispref/lists.texi                             |    2 +-
 doc/lispref/loading.texi                           |   57 +-
 doc/lispref/macros.texi                            |    2 +-
 doc/lispref/maps.texi                              |    2 +-
 doc/lispref/markers.texi                           |    2 +-
 doc/lispref/minibuf.texi                           |    2 +-
 doc/lispref/modes.texi                             |   47 +-
 doc/lispref/nonascii.texi                          |    2 +-
 doc/lispref/numbers.texi                           |    2 +-
 doc/lispref/objects.texi                           |    2 +-
 doc/lispref/os.texi                                |    2 +-
 doc/lispref/package.texi                           |    2 +-
 doc/lispref/parsing.texi                           |  205 +-
 doc/lispref/positions.texi                         |   25 +-
 doc/lispref/processes.texi                         |    2 +-
 doc/lispref/records.texi                           |    2 +-
 doc/lispref/searching.texi                         |    2 +-
 doc/lispref/sequences.texi                         |    2 +-
 doc/lispref/streams.texi                           |    2 +-
 doc/lispref/strings.texi                           |    2 +-
 doc/lispref/symbols.texi                           |    2 +-
 doc/lispref/syntax.texi                            |    2 +-
 doc/lispref/text.texi                              |    4 +-
 doc/lispref/threads.texi                           |    2 +-
 doc/lispref/tips.texi                              |    8 +-
 doc/lispref/two-volume-cross-refs.txt              |    2 +-
 doc/lispref/two-volume.make                        |    2 +-
 doc/lispref/variables.texi                         |    2 +-
 doc/lispref/windows.texi                           |    2 +-
 doc/man/ChangeLog.1                                |    2 +-
 doc/man/ebrowse.1                                  |    2 +-
 doc/man/emacs.1.in                                 |    2 +-
 doc/man/etags.1                                    |    2 +-
 doc/misc/ChangeLog.1                               |    4 +-
 doc/misc/Makefile.in                               |    2 +-
 doc/misc/auth.texi                                 |    2 +-
 doc/misc/autotype.texi                             |    2 +-
 doc/misc/bovine.texi                               |    2 +-
 doc/misc/calc.texi                                 |   15 +-
 doc/misc/cc-mode.texi                              |    4 +-
 doc/misc/cl.texi                                   |    2 +-
 doc/misc/dbus.texi                                 |    2 +-
 doc/misc/dired-x.texi                              |    2 +-
 doc/misc/ebrowse.texi                              |    2 +-
 doc/misc/ede.texi                                  |    2 +-
 doc/misc/ediff.texi                                |    2 +-
 doc/misc/edt.texi                                  |    2 +-
 doc/misc/efaq-w32.texi                             |    2 +-
 doc/misc/efaq.texi                                 |    2 +-
 doc/misc/eglot.texi                                |    2 +-
 doc/misc/eieio.texi                                |    2 +-
 doc/misc/emacs-gnutls.texi                         |    2 +-
 doc/misc/emacs-mime.texi                           |    2 +-
 doc/misc/epa.texi                                  |    2 +-
 doc/misc/erc.texi                                  |   14 +-
 doc/misc/ert.texi                                  |    2 +-
 doc/misc/eshell.texi                               |    7 +-
 doc/misc/eudc.texi                                 |    2 +-
 doc/misc/eww.texi                                  |    2 +-
 doc/misc/flymake.texi                              |    2 +-
 doc/misc/forms.texi                                |    2 +-
 doc/misc/gnus-faq.texi                             |    2 +-
 doc/misc/gnus.texi                                 |    2 +-
 doc/misc/htmlfontify.texi                          |    2 +-
 doc/misc/idlwave.texi                              |    2 +-
 doc/misc/ido.texi                                  |    2 +-
 doc/misc/info.texi                                 |    7 +-
 doc/misc/mairix-el.texi                            |    2 +-
 doc/misc/message.texi                              |    2 +-
 doc/misc/mh-e.texi                                 |    4 +-
 doc/misc/modus-themes.org                          | 4657 ++++------
 doc/misc/newsticker.texi                           |    2 +-
 doc/misc/nxml-mode.texi                            |    2 +-
 doc/misc/octave-mode.texi                          |    2 +-
 doc/misc/org-setup.org                             |    2 +-
 doc/misc/org.org                                   |    2 +-
 doc/misc/pcl-cvs.texi                              |    2 +-
 doc/misc/pgg.texi                                  |    2 +-
 doc/misc/rcirc.texi                                |    2 +-
 doc/misc/reftex.texi                               |    2 +-
 doc/misc/remember.texi                             |    2 +-
 doc/misc/sasl.texi                                 |    2 +-
 doc/misc/sc.texi                                   |    6 +-
 doc/misc/sem-user.texi                             |    2 +-
 doc/misc/semantic.texi                             |    2 +-
 doc/misc/ses.texi                                  |    2 +-
 doc/misc/sieve.texi                                |    2 +-
 doc/misc/smtpmail.texi                             |    2 +-
 doc/misc/speedbar.texi                             |    2 +-
 doc/misc/srecode.texi                              |    2 +-
 doc/misc/texinfo.tex                               |  179 +-
 doc/misc/todo-mode.texi                            |    2 +-
 doc/misc/tramp.texi                                |    2 +-
 doc/misc/trampver.texi                             |    2 +-
 doc/misc/transient.texi                            |    2 +-
 doc/misc/url.texi                                  |    2 +-
 doc/misc/use-package.texi                          |   18 +-
 doc/misc/vhdl-mode.texi                            |    2 +-
 doc/misc/vip.texi                                  |    2 +-
 doc/misc/viper.texi                                |    2 +-
 doc/misc/vtable.texi                               |    2 +-
 doc/misc/widget.texi                               |    2 +-
 doc/misc/wisent.texi                               |    2 +-
 doc/misc/woman.texi                                |    2 +-
 etc/CALC-NEWS                                      |    2 +-
 etc/ChangeLog.1                                    |    2 +-
 etc/DEBUG                                          |   11 +-
 etc/DISTRIB                                        |    2 +-
 etc/ERC-NEWS                                       |   13 +-
 etc/ETAGS.EBNF                                     |    2 +-
 etc/ETAGS.README                                   |    2 +-
 etc/HELLO                                          |    2 +-
 etc/MACHINES                                       |    2 +-
 etc/MH-E-NEWS                                      |    2 +-
 etc/NEWS                                           |   78 +-
 etc/NEWS.1-17                                      |    2 +-
 etc/NEWS.18                                        |    2 +-
 etc/NEWS.19                                        |    2 +-
 etc/NEWS.20                                        |    2 +-
 etc/NEWS.21                                        |    2 +-
 etc/NEWS.22                                        |    2 +-
 etc/NEWS.23                                        |    2 +-
 etc/NEWS.24                                        |    2 +-
 etc/NEWS.25                                        |    2 +-
 etc/NEWS.26                                        |    2 +-
 etc/NEWS.27                                        |    2 +-
 etc/NEWS.28                                        |    2 +-
 etc/NEWS.29                                        |  635 +-
 etc/NEXTSTEP                                       |    2 +-
 etc/NXML-NEWS                                      |    2 +-
 etc/ORG-NEWS                                       |   12 +-
 etc/PROBLEMS                                       |   16 +-
 etc/README                                         |    2 +-
 etc/TERMS                                          |    2 +-
 etc/TODO                                           |    2 +-
 etc/charsets/README                                |    2 +-
 etc/compilation.txt                                |    2 +-
 etc/edt-user.el                                    |    2 +-
 etc/emacs-buffer.gdb                               |    2 +-
 etc/emacs.metainfo.xml                             |    2 +-
 etc/emacs_lldb.py                                  |    2 +-
 etc/emacsclient-mail.desktop                       |    4 +-
 etc/emacsclient.desktop                            |    2 +-
 etc/enriched.txt                                   |    2 +-
 etc/forms/forms-d2.el                              |    2 +-
 etc/gnus-tut.txt                                   |    2 +-
 etc/grep.txt                                       |    2 +-
 etc/images/README                                  |    8 +-
 etc/images/custom/README                           |    2 +-
 etc/images/ezimage/README                          |    2 +-
 etc/images/gnus/README                             |    6 +-
 etc/images/gnus/gnus.svg                           |    2 +-
 etc/images/gud/README                              |    2 +-
 etc/images/icons/README                            |    8 +-
 etc/images/icons/hicolor/scalable/apps/emacs.svg   |    2 +-
 etc/images/icons/hicolor/scalable/apps/emacs23.svg |    2 +-
 .../scalable/mimetypes/emacs-document23.svg        |    2 +-
 etc/images/mpc/README                              |    2 +-
 etc/images/newsticker/README                       |    2 +-
 etc/images/smilies/README                          |    2 +-
 etc/images/smilies/grayscale/README                |    2 +-
 etc/images/smilies/medium/README                   |    2 +-
 etc/images/splash.svg                              |    2 +-
 etc/images/tabs/README                             |    2 +-
 etc/images/tree-widget/default/README              |    2 +-
 etc/images/tree-widget/folder/README               |    2 +-
 etc/org.gnu.emacs.defaults.gschema.xml             |    2 +-
 etc/org/README                                     |    2 +-
 etc/package-keyring.gpg                            |  Bin 2069 -> 2043 bytes
 etc/ps-prin0.ps                                    |    2 +-
 etc/ps-prin1.ps                                    |    2 +-
 etc/publicsuffix.txt                               |    5 +-
 etc/refcards/Makefile                              |    2 +-
 etc/refcards/README                                |    2 +-
 etc/refcards/calccard.tex                          |    2 +-
 etc/refcards/cs-dired-ref.tex                      |    2 +-
 etc/refcards/cs-refcard.tex                        |    2 +-
 etc/refcards/cs-survival.tex                       |    2 +-
 etc/refcards/de-refcard.tex                        |    2 +-
 etc/refcards/dired-ref.tex                         |    2 +-
 etc/refcards/emacsver.tex.in                       |    2 +-
 etc/refcards/fr-dired-ref.tex                      |    2 +-
 etc/refcards/fr-refcard.tex                        |    2 +-
 etc/refcards/fr-survival.tex                       |    2 +-
 etc/refcards/gnus-logo.eps                         |    2 +-
 etc/refcards/gnus-refcard.tex                      |    2 +-
 etc/refcards/orgcard.tex                           |    2 +-
 etc/refcards/pdflayout.sty                         |    2 +-
 etc/refcards/pl-refcard.tex                        |    2 +-
 etc/refcards/pt-br-refcard.tex                     |    2 +-
 etc/refcards/refcard.tex                           |    2 +-
 etc/refcards/ru-refcard.tex                        |    4 +-
 etc/refcards/sk-dired-ref.tex                      |    2 +-
 etc/refcards/sk-refcard.tex                        |    2 +-
 etc/refcards/sk-survival.tex                       |    2 +-
 etc/refcards/survival.tex                          |    2 +-
 etc/refcards/vipcard.tex                           |    2 +-
 etc/refcards/viperCard.tex                         |    2 +-
 etc/schema/locate.rnc                              |    2 +-
 etc/schema/relaxng.rnc                             |    2 +-
 etc/schema/schemas.xml                             |    2 +-
 etc/ses-example.ses                                |    2 +-
 etc/srecode/c.srt                                  |    2 +-
 etc/srecode/cpp.srt                                |    2 +-
 etc/srecode/default.srt                            |    2 +-
 etc/srecode/doc-cpp.srt                            |    2 +-
 etc/srecode/doc-default.srt                        |    2 +-
 etc/srecode/doc-java.srt                           |    2 +-
 etc/srecode/ede-autoconf.srt                       |    2 +-
 etc/srecode/ede-make.srt                           |    2 +-
 etc/srecode/el.srt                                 |    2 +-
 etc/srecode/getset-cpp.srt                         |    2 +-
 etc/srecode/java.srt                               |    2 +-
 etc/srecode/make.srt                               |    2 +-
 etc/srecode/proj-test.srt                          |    2 +-
 etc/srecode/template.srt                           |    2 +-
 etc/srecode/test.srt                               |    2 +-
 etc/srecode/texi.srt                               |    2 +-
 etc/srecode/wisent.srt                             |    2 +-
 etc/themes/adwaita-theme.el                        |    2 +-
 etc/themes/deeper-blue-theme.el                    |    2 +-
 etc/themes/dichromacy-theme.el                     |    2 +-
 etc/themes/leuven-dark-theme.el                    |    2 +-
 etc/themes/leuven-theme.el                         |    2 +-
 etc/themes/light-blue-theme.el                     |    2 +-
 etc/themes/manoj-dark-theme.el                     |    2 +-
 etc/themes/misterioso-theme.el                     |    2 +-
 etc/themes/modus-operandi-deuteranopia-theme.el    |  420 +
 etc/themes/modus-operandi-theme.el                 |  389 +-
 etc/themes/modus-operandi-tinted-theme.el          |  417 +
 etc/themes/modus-themes.el                         | 9770 ++++++--------------
 etc/themes/modus-vivendi-deuteranopia-theme.el     |  419 +
 etc/themes/modus-vivendi-theme.el                  |  391 +-
 etc/themes/modus-vivendi-tinted-theme.el           |  417 +
 etc/themes/tango-dark-theme.el                     |    2 +-
 etc/themes/tango-theme.el                          |    2 +-
 etc/themes/tsdh-dark-theme.el                      |    2 +-
 etc/themes/tsdh-light-theme.el                     |    2 +-
 etc/themes/wheatgrass-theme.el                     |    2 +-
 etc/themes/whiteboard-theme.el                     |    2 +-
 etc/themes/wombat-theme.el                         |    2 +-
 etc/tutorials/TUTORIAL                             |    2 +-
 etc/tutorials/TUTORIAL.bg                          |    2 +-
 etc/tutorials/TUTORIAL.cn                          |    8 +-
 etc/tutorials/TUTORIAL.cs                          |    2 +-
 etc/tutorials/TUTORIAL.de                          |    2 +-
 etc/tutorials/TUTORIAL.el_GR                       |    2 +-
 etc/tutorials/TUTORIAL.eo                          |    2 +-
 etc/tutorials/TUTORIAL.es                          |    2 +-
 etc/tutorials/TUTORIAL.fr                          |    4 +-
 etc/tutorials/TUTORIAL.he                          |    2 +-
 etc/tutorials/TUTORIAL.it                          |    2 +-
 etc/tutorials/TUTORIAL.ja                          |    2 +-
 etc/tutorials/TUTORIAL.ko                          |    2 +-
 etc/tutorials/TUTORIAL.nl                          |    4 +-
 etc/tutorials/TUTORIAL.pl                          |    2 +-
 etc/tutorials/TUTORIAL.pt_BR                       |    2 +-
 etc/tutorials/TUTORIAL.ro                          |    2 +-
 etc/tutorials/TUTORIAL.ru                          |    2 +-
 etc/tutorials/TUTORIAL.sk                          |    2 +-
 etc/tutorials/TUTORIAL.sl                          |    2 +-
 etc/tutorials/TUTORIAL.sv                          |    2 +-
 etc/tutorials/TUTORIAL.th                          |    2 +-
 etc/tutorials/TUTORIAL.uk                          |    2 +-
 etc/tutorials/TUTORIAL.zh                          |    2 +-
 etc/w32-feature.el                                 |    2 +-
 leim/ChangeLog.1                                   |    2 +-
 leim/Makefile.in                                   |    2 +-
 leim/README                                        |    2 +-
 leim/leim-ext.el                                   |    2 +-
 lib-src/ChangeLog.1                                |    2 +-
 lib-src/Makefile.in                                |    2 +-
 lib-src/be_resources.cc                            |    2 +-
 lib-src/ebrowse.c                                  |    2 +-
 lib-src/emacsclient.c                              |    2 +-
 lib-src/etags.c                                    |    2 +-
 lib-src/hexl.c                                     |    2 +-
 lib-src/make-docfile.c                             |    2 +-
 lib-src/make-fingerprint.c                         |    2 +-
 lib-src/movemail.c                                 |    2 +-
 lib-src/ntlib.c                                    |    2 +-
 lib-src/ntlib.h                                    |    2 +-
 lib-src/pop.c                                      |    2 +-
 lib-src/pop.h                                      |    2 +-
 lib-src/rcs2log                                    |    4 +-
 lib-src/seccomp-filter.c                           |    2 +-
 lib-src/update-game-score.c                        |    2 +-
 lib/Makefile.in                                    |    2 +-
 lib/_Noreturn.h                                    |    2 +-
 lib/acl-errno-valid.c                              |    2 +-
 lib/acl-internal.c                                 |    2 +-
 lib/acl-internal.h                                 |    2 +-
 lib/acl.h                                          |    2 +-
 lib/acl_entries.c                                  |    2 +-
 lib/af_alg.h                                       |    2 +-
 lib/alloca.in.h                                    |    4 +-
 lib/allocator.c                                    |    2 +-
 lib/allocator.h                                    |    2 +-
 lib/arg-nonnull.h                                  |    2 +-
 lib/assert.in.h                                    |    2 +-
 lib/at-func.c                                      |    2 +-
 lib/attribute.h                                    |    2 +-
 lib/binary-io.c                                    |    2 +-
 lib/binary-io.h                                    |    3 +-
 lib/byteswap.in.h                                  |    2 +-
 lib/c++defs.h                                      |    2 +-
 lib/c-ctype.c                                      |    2 +-
 lib/c-ctype.h                                      |    3 +-
 lib/c-strcase.h                                    |    2 +-
 lib/c-strcasecmp.c                                 |    3 +-
 lib/c-strncasecmp.c                                |    3 +-
 lib/canonicalize-lgpl.c                            |    2 +-
 lib/careadlinkat.c                                 |    4 +-
 lib/careadlinkat.h                                 |    2 +-
 lib/cdefs.h                                        |    2 +-
 lib/cloexec.c                                      |    3 +-
 lib/cloexec.h                                      |    2 +-
 lib/close-stream.c                                 |    3 +-
 lib/close-stream.h                                 |    2 +-
 lib/copy-file-range.c                              |    2 +-
 lib/count-leading-zeros.c                          |    2 +-
 lib/count-leading-zeros.h                          |    2 +-
 lib/count-one-bits.c                               |    2 +-
 lib/count-one-bits.h                               |    2 +-
 lib/count-trailing-zeros.c                         |    2 +-
 lib/count-trailing-zeros.h                         |    2 +-
 lib/diffseq.h                                      |    4 +-
 lib/dirent.in.h                                    |    2 +-
 lib/dirfd.c                                        |    2 +-
 lib/dtoastr.c                                      |    2 +-
 lib/dtotimespec.c                                  |    2 +-
 lib/dup2.c                                         |    3 +-
 lib/dynarray.h                                     |    2 +-
 lib/eloop-threshold.h                              |    2 +-
 lib/errno.in.h                                     |    2 +-
 lib/euidaccess.c                                   |    2 +-
 lib/execinfo.c                                     |    2 +-
 lib/execinfo.in.h                                  |    2 +-
 lib/explicit_bzero.c                               |   74 +
 lib/faccessat.c                                    |    2 +-
 lib/fchmodat.c                                     |    2 +-
 lib/fcntl.c                                        |    2 +-
 lib/fcntl.in.h                                     |    2 +-
 lib/fdopendir.c                                    |    2 +-
 lib/file-has-acl.c                                 |  122 +-
 lib/filemode.c                                     |    2 +-
 lib/filemode.h                                     |    4 +-
 lib/filename.h                                     |    2 +-
 lib/filevercmp.c                                   |    2 +-
 lib/filevercmp.h                                   |    2 +-
 lib/fingerprint.c                                  |    2 +-
 lib/fingerprint.h                                  |    2 +-
 lib/flexmember.h                                   |    2 +-
 lib/fpending.c                                     |    4 +-
 lib/fpending.h                                     |    4 +-
 lib/free.c                                         |    2 +-
 lib/fstatat.c                                      |    2 +-
 lib/fsusage.c                                      |    4 +-
 lib/fsusage.h                                      |    2 +-
 lib/fsync.c                                        |    2 +-
 lib/ftoastr.c                                      |    2 +-
 lib/ftoastr.h                                      |    2 +-
 lib/futimens.c                                     |    2 +-
 lib/get-permissions.c                              |    2 +-
 lib/getdtablesize.c                                |    2 +-
 lib/getgroups.c                                    |    3 +-
 lib/getloadavg.c                                   |    4 +-
 lib/getopt-cdefs.in.h                              |    2 +-
 lib/getopt-core.h                                  |    2 +-
 lib/getopt-ext.h                                   |    2 +-
 lib/getopt-pfx-core.h                              |    2 +-
 lib/getopt-pfx-ext.h                               |    2 +-
 lib/getopt.c                                       |    2 +-
 lib/getopt.in.h                                    |    2 +-
 lib/getopt1.c                                      |    2 +-
 lib/getopt_int.h                                   |    2 +-
 lib/getrandom.c                                    |    2 +-
 lib/gettext.h                                      |    4 +-
 lib/gettime.c                                      |    3 +-
 lib/gettimeofday.c                                 |    3 +-
 lib/gnulib.mk.in                                   |    2 +-
 lib/group-member.c                                 |    4 +-
 lib/idx.h                                          |    2 +-
 lib/ieee754.in.h                                   |    2 +-
 lib/ignore-value.h                                 |    2 +-
 lib/intprops-internal.h                            |    2 +-
 lib/intprops.h                                     |    2 +-
 lib/inttypes.in.h                                  |    2 +-
 lib/lchmod.c                                       |    2 +-
 lib/libc-config.h                                  |    2 +-
 lib/limits.in.h                                    |    2 +-
 lib/lstat.c                                        |    2 +-
 lib/malloc.c                                       |    3 +-
 lib/malloc/dynarray-skeleton.c                     |    2 +-
 lib/malloc/dynarray.h                              |    2 +-
 lib/malloc/dynarray_at_failure.c                   |    2 +-
 lib/malloc/dynarray_emplace_enlarge.c              |    2 +-
 lib/malloc/dynarray_finalize.c                     |    2 +-
 lib/malloc/dynarray_resize.c                       |    2 +-
 lib/malloc/dynarray_resize_clear.c                 |    2 +-
 lib/malloc/scratch_buffer.h                        |    2 +-
 lib/malloc/scratch_buffer_dupfree.c                |    2 +-
 lib/malloc/scratch_buffer_grow.c                   |    2 +-
 lib/malloc/scratch_buffer_grow_preserve.c          |    2 +-
 lib/malloc/scratch_buffer_set_array_size.c         |    2 +-
 lib/md5-stream.c                                   |    4 +-
 lib/md5.c                                          |    4 +-
 lib/md5.h                                          |    4 +-
 lib/memmem.c                                       |    4 +-
 lib/mempcpy.c                                      |    2 +-
 lib/memrchr.c                                      |    4 +-
 lib/mini-gmp-gnulib.c                              |    2 +-
 lib/minmax.h                                       |    2 +-
 lib/mkostemp.c                                     |    2 +-
 lib/mktime-internal.h                              |    2 +-
 lib/mktime.c                                       |    2 +-
 lib/nanosleep.c                                    |    3 +-
 lib/nproc.c                                        |    2 +-
 lib/nproc.h                                        |    2 +-
 lib/nstrftime.c                                    |    2 +-
 lib/open.c                                         |    2 +-
 lib/openat-priv.h                                  |    2 +-
 lib/openat-proc.c                                  |    2 +-
 lib/openat.h                                       |    2 +-
 lib/pathmax.h                                      |    2 +-
 lib/pipe2.c                                        |    2 +-
 lib/pselect.c                                      |    2 +-
 lib/pthread_sigmask.c                              |    2 +-
 lib/qcopy-acl.c                                    |    2 +-
 lib/rawmemchr.c                                    |    2 +-
 lib/rawmemchr.valgrind                             |    2 +-
 lib/readlink.c                                     |    2 +-
 lib/readlinkat.c                                   |    2 +-
 lib/realloc.c                                      |    2 +-
 lib/regcomp.c                                      |    2 +-
 lib/regex.c                                        |    2 +-
 lib/regex.h                                        |    2 +-
 lib/regex_internal.c                               |    2 +-
 lib/regex_internal.h                               |    2 +-
 lib/regexec.c                                      |    2 +-
 lib/root-uid.h                                     |    2 +-
 lib/save-cwd.c                                     |    2 +-
 lib/save-cwd.h                                     |    4 +-
 lib/scratch_buffer.h                               |    2 +-
 lib/set-permissions.c                              |    2 +-
 lib/sha1.c                                         |    3 +-
 lib/sha1.h                                         |    2 +-
 lib/sha256.c                                       |    2 +-
 lib/sha256.h                                       |    2 +-
 lib/sha512.c                                       |    2 +-
 lib/sha512.h                                       |    2 +-
 lib/sig2str.c                                      |    3 +-
 lib/sig2str.h                                      |    2 +-
 lib/sigdescr_np.c                                  |    2 +-
 lib/signal.in.h                                    |    2 +-
 lib/stat-time.c                                    |    2 +-
 lib/stat-time.h                                    |    2 +-
 lib/stdalign.in.h                                  |    2 +-
 lib/stdckdint.in.h                                 |    2 +-
 lib/stddef.in.h                                    |    2 +-
 lib/stdint.in.h                                    |    2 +-
 lib/stdio-impl.h                                   |    2 +-
 lib/stdio.in.h                                     |    2 +-
 lib/stdlib.in.h                                    |    3 +-
 lib/stpcpy.c                                       |    2 +-
 lib/str-two-way.h                                  |    2 +-
 lib/strftime.h                                     |    2 +-
 lib/string.in.h                                    |    2 +-
 lib/strnlen.c                                      |    2 +-
 lib/strtoimax.c                                    |    4 +-
 lib/strtol.c                                       |    4 +-
 lib/strtoll.c                                      |    4 +-
 lib/symlink.c                                      |    2 +-
 lib/sys_random.in.h                                |    2 +-
 lib/sys_select.in.h                                |    2 +-
 lib/sys_stat.in.h                                  |    2 +-
 lib/sys_time.in.h                                  |    2 +-
 lib/sys_types.in.h                                 |    2 +-
 lib/tempname.c                                     |    2 +-
 lib/tempname.h                                     |    2 +-
 lib/time-internal.h                                |    2 +-
 lib/time.in.h                                      |    3 +-
 lib/time_r.c                                       |    3 +-
 lib/time_rz.c                                      |    2 +-
 lib/timegm.c                                       |    2 +-
 lib/timespec-add.c                                 |    2 +-
 lib/timespec-sub.c                                 |    2 +-
 lib/timespec.c                                     |    2 +-
 lib/timespec.h                                     |    2 +-
 lib/u64.c                                          |    2 +-
 lib/u64.h                                          |    2 +-
 lib/unistd.c                                       |    2 +-
 lib/unistd.in.h                                    |    2 +-
 lib/unlocked-io.h                                  |    2 +-
 lib/utimens.c                                      |    2 +-
 lib/utimens.h                                      |    2 +-
 lib/utimensat.c                                    |    2 +-
 lib/verify.h                                       |    2 +-
 lib/vla.h                                          |    2 +-
 lib/warn-on-use.h                                  |    2 +-
 lib/xalloc-oversized.h                             |    3 +-
 lisp/ChangeLog.1                                   |    2 +-
 lisp/ChangeLog.10                                  |    2 +-
 lisp/ChangeLog.11                                  |    2 +-
 lisp/ChangeLog.12                                  |    2 +-
 lisp/ChangeLog.13                                  |    2 +-
 lisp/ChangeLog.14                                  |    6 +-
 lisp/ChangeLog.15                                  |    2 +-
 lisp/ChangeLog.16                                  |   12 +-
 lisp/ChangeLog.17                                  |    4 +-
 lisp/ChangeLog.2                                   |    2 +-
 lisp/ChangeLog.3                                   |    2 +-
 lisp/ChangeLog.4                                   |    2 +-
 lisp/ChangeLog.5                                   |    2 +-
 lisp/ChangeLog.6                                   |    2 +-
 lisp/ChangeLog.7                                   |    4 +-
 lisp/ChangeLog.8                                   |    2 +-
 lisp/ChangeLog.9                                   |    2 +-
 lisp/Makefile.in                                   |    2 +-
 lisp/abbrev.el                                     |    4 +-
 lisp/align.el                                      |    2 +-
 lisp/allout-widgets.el                             |    2 +-
 lisp/allout.el                                     |    2 +-
 lisp/ansi-color.el                                 |    2 +-
 lisp/ansi-osc.el                                   |    2 +-
 lisp/apropos.el                                    |    2 +-
 lisp/arc-mode.el                                   |    2 +-
 lisp/array.el                                      |    2 +-
 lisp/auth-source-pass.el                           |    2 +-
 lisp/auth-source.el                                |    2 +-
 lisp/autoinsert.el                                 |    2 +-
 lisp/autorevert.el                                 |    2 +-
 lisp/avoid.el                                      |    2 +-
 lisp/battery.el                                    |    2 +-
 lisp/bindings.el                                   |   15 +-
 lisp/bookmark.el                                   |    2 +-
 lisp/bs.el                                         |    2 +-
 lisp/buff-menu.el                                  |    2 +-
 lisp/button.el                                     |    2 +-
 lisp/calc/calc-aent.el                             |    2 +-
 lisp/calc/calc-alg.el                              |    2 +-
 lisp/calc/calc-arith.el                            |    2 +-
 lisp/calc/calc-bin.el                              |    2 +-
 lisp/calc/calc-comb.el                             |    2 +-
 lisp/calc/calc-cplx.el                             |    2 +-
 lisp/calc/calc-embed.el                            |    2 +-
 lisp/calc/calc-ext.el                              |    2 +-
 lisp/calc/calc-fin.el                              |    2 +-
 lisp/calc/calc-forms.el                            |    2 +-
 lisp/calc/calc-frac.el                             |    2 +-
 lisp/calc/calc-funcs.el                            |    2 +-
 lisp/calc/calc-graph.el                            |    2 +-
 lisp/calc/calc-help.el                             |    2 +-
 lisp/calc/calc-incom.el                            |    2 +-
 lisp/calc/calc-keypd.el                            |    2 +-
 lisp/calc/calc-lang.el                             |    2 +-
 lisp/calc/calc-macs.el                             |    2 +-
 lisp/calc/calc-map.el                              |    2 +-
 lisp/calc/calc-math.el                             |    2 +-
 lisp/calc/calc-menu.el                             |    2 +-
 lisp/calc/calc-misc.el                             |    2 +-
 lisp/calc/calc-mode.el                             |    2 +-
 lisp/calc/calc-mtx.el                              |    2 +-
 lisp/calc/calc-nlfit.el                            |    2 +-
 lisp/calc/calc-poly.el                             |    2 +-
 lisp/calc/calc-prog.el                             |    2 +-
 lisp/calc/calc-rewr.el                             |    2 +-
 lisp/calc/calc-rules.el                            |    2 +-
 lisp/calc/calc-sel.el                              |    2 +-
 lisp/calc/calc-stat.el                             |    2 +-
 lisp/calc/calc-store.el                            |    2 +-
 lisp/calc/calc-stuff.el                            |    2 +-
 lisp/calc/calc-trail.el                            |    2 +-
 lisp/calc/calc-undo.el                             |    2 +-
 lisp/calc/calc-units.el                            |    2 +-
 lisp/calc/calc-vec.el                              |    2 +-
 lisp/calc/calc-yank.el                             |    2 +-
 lisp/calc/calc.el                                  |    2 +-
 lisp/calc/calcalg2.el                              |    2 +-
 lisp/calc/calcalg3.el                              |    2 +-
 lisp/calc/calccomp.el                              |    2 +-
 lisp/calc/calcsel2.el                              |    2 +-
 lisp/calculator.el                                 |    2 +-
 lisp/calendar/appt.el                              |    2 +-
 lisp/calendar/cal-bahai.el                         |    2 +-
 lisp/calendar/cal-china.el                         |    2 +-
 lisp/calendar/cal-coptic.el                        |    2 +-
 lisp/calendar/cal-dst.el                           |   14 +-
 lisp/calendar/cal-french.el                        |    2 +-
 lisp/calendar/cal-hebrew.el                        |    2 +-
 lisp/calendar/cal-html.el                          |    2 +-
 lisp/calendar/cal-islam.el                         |    2 +-
 lisp/calendar/cal-iso.el                           |    2 +-
 lisp/calendar/cal-julian.el                        |    2 +-
 lisp/calendar/cal-mayan.el                         |    2 +-
 lisp/calendar/cal-menu.el                          |    2 +-
 lisp/calendar/cal-move.el                          |    2 +-
 lisp/calendar/cal-persia.el                        |    2 +-
 lisp/calendar/cal-tex.el                           |    2 +-
 lisp/calendar/cal-x.el                             |    2 +-
 lisp/calendar/calendar.el                          |    2 +-
 lisp/calendar/diary-lib.el                         |    4 +-
 lisp/calendar/holidays.el                          |    2 +-
 lisp/calendar/icalendar.el                         |    2 +-
 lisp/calendar/iso8601.el                           |   18 +-
 lisp/calendar/lunar.el                             |    2 +-
 lisp/calendar/parse-time.el                        |    2 +-
 lisp/calendar/solar.el                             |   12 +-
 lisp/calendar/time-date.el                         |    2 +-
 lisp/calendar/timeclock.el                         |    2 +-
 lisp/calendar/todo-mode.el                         |    2 +-
 lisp/case-table.el                                 |    2 +-
 lisp/cdl.el                                        |    2 +-
 lisp/cedet/ChangeLog.1                             |    4 +-
 lisp/cedet/cedet-cscope.el                         |    2 +-
 lisp/cedet/cedet-files.el                          |    2 +-
 lisp/cedet/cedet-global.el                         |    2 +-
 lisp/cedet/cedet-idutils.el                        |    2 +-
 lisp/cedet/cedet.el                                |    2 +-
 lisp/cedet/data-debug.el                           |    2 +-
 lisp/cedet/ede.el                                  |    2 +-
 lisp/cedet/ede/auto.el                             |    2 +-
 lisp/cedet/ede/autoconf-edit.el                    |    2 +-
 lisp/cedet/ede/base.el                             |    2 +-
 lisp/cedet/ede/config.el                           |    2 +-
 lisp/cedet/ede/cpp-root.el                         |    2 +-
 lisp/cedet/ede/custom.el                           |    2 +-
 lisp/cedet/ede/detect.el                           |    2 +-
 lisp/cedet/ede/dired.el                            |    2 +-
 lisp/cedet/ede/emacs.el                            |    2 +-
 lisp/cedet/ede/files.el                            |    2 +-
 lisp/cedet/ede/generic.el                          |    2 +-
 lisp/cedet/ede/linux.el                            |    2 +-
 lisp/cedet/ede/locate.el                           |    2 +-
 lisp/cedet/ede/make.el                             |    2 +-
 lisp/cedet/ede/makefile-edit.el                    |    2 +-
 lisp/cedet/ede/pconf.el                            |    2 +-
 lisp/cedet/ede/pmake.el                            |    2 +-
 lisp/cedet/ede/proj-archive.el                     |    2 +-
 lisp/cedet/ede/proj-aux.el                         |    2 +-
 lisp/cedet/ede/proj-comp.el                        |    2 +-
 lisp/cedet/ede/proj-elisp.el                       |    2 +-
 lisp/cedet/ede/proj-info.el                        |    2 +-
 lisp/cedet/ede/proj-misc.el                        |    2 +-
 lisp/cedet/ede/proj-obj.el                         |    2 +-
 lisp/cedet/ede/proj-prog.el                        |    2 +-
 lisp/cedet/ede/proj-scheme.el                      |    2 +-
 lisp/cedet/ede/proj-shared.el                      |    2 +-
 lisp/cedet/ede/proj.el                             |    2 +-
 lisp/cedet/ede/project-am.el                       |    2 +-
 lisp/cedet/ede/shell.el                            |    2 +-
 lisp/cedet/ede/simple.el                           |    2 +-
 lisp/cedet/ede/source.el                           |    2 +-
 lisp/cedet/ede/speedbar.el                         |    2 +-
 lisp/cedet/ede/srecode.el                          |    2 +-
 lisp/cedet/ede/system.el                           |    2 +-
 lisp/cedet/ede/util.el                             |    2 +-
 lisp/cedet/mode-local.el                           |    2 +-
 lisp/cedet/pulse.el                                |    2 +-
 lisp/cedet/semantic.el                             |    2 +-
 lisp/cedet/semantic/analyze.el                     |    2 +-
 lisp/cedet/semantic/analyze/complete.el            |    2 +-
 lisp/cedet/semantic/analyze/debug.el               |    2 +-
 lisp/cedet/semantic/analyze/fcn.el                 |    2 +-
 lisp/cedet/semantic/analyze/refs.el                |    2 +-
 lisp/cedet/semantic/bovine.el                      |    2 +-
 lisp/cedet/semantic/bovine/c.el                    |    2 +-
 lisp/cedet/semantic/bovine/debug.el                |    2 +-
 lisp/cedet/semantic/bovine/el.el                   |    2 +-
 lisp/cedet/semantic/bovine/gcc.el                  |    2 +-
 lisp/cedet/semantic/bovine/grammar.el              |    2 +-
 lisp/cedet/semantic/bovine/make.el                 |    2 +-
 lisp/cedet/semantic/bovine/scm.el                  |    2 +-
 lisp/cedet/semantic/chart.el                       |    2 +-
 lisp/cedet/semantic/complete.el                    |    2 +-
 lisp/cedet/semantic/ctxt.el                        |    2 +-
 lisp/cedet/semantic/db-debug.el                    |    2 +-
 lisp/cedet/semantic/db-ebrowse.el                  |    2 +-
 lisp/cedet/semantic/db-el.el                       |    2 +-
 lisp/cedet/semantic/db-file.el                     |    2 +-
 lisp/cedet/semantic/db-find.el                     |    2 +-
 lisp/cedet/semantic/db-global.el                   |    2 +-
 lisp/cedet/semantic/db-javascript.el               |    2 +-
 lisp/cedet/semantic/db-mode.el                     |    2 +-
 lisp/cedet/semantic/db-ref.el                      |    2 +-
 lisp/cedet/semantic/db-typecache.el                |    2 +-
 lisp/cedet/semantic/db.el                          |    2 +-
 lisp/cedet/semantic/debug.el                       |    2 +-
 lisp/cedet/semantic/decorate.el                    |    2 +-
 lisp/cedet/semantic/decorate/include.el            |    2 +-
 lisp/cedet/semantic/decorate/mode.el               |    2 +-
 lisp/cedet/semantic/dep.el                         |    2 +-
 lisp/cedet/semantic/doc.el                         |    2 +-
 lisp/cedet/semantic/ede-grammar.el                 |    2 +-
 lisp/cedet/semantic/edit.el                        |    2 +-
 lisp/cedet/semantic/find.el                        |    2 +-
 lisp/cedet/semantic/format.el                      |    2 +-
 lisp/cedet/semantic/fw.el                          |    2 +-
 lisp/cedet/semantic/grammar.el                     |    2 +-
 lisp/cedet/semantic/grm-wy-boot.el                 |    2 +-
 lisp/cedet/semantic/html.el                        |    2 +-
 lisp/cedet/semantic/ia-sb.el                       |    2 +-
 lisp/cedet/semantic/ia.el                          |    2 +-
 lisp/cedet/semantic/idle.el                        |    2 +-
 lisp/cedet/semantic/imenu.el                       |    2 +-
 lisp/cedet/semantic/java.el                        |    2 +-
 lisp/cedet/semantic/lex-spp.el                     |    4 +-
 lisp/cedet/semantic/lex.el                         |    4 +-
 lisp/cedet/semantic/mru-bookmark.el                |    2 +-
 lisp/cedet/semantic/sb.el                          |    2 +-
 lisp/cedet/semantic/scope.el                       |    2 +-
 lisp/cedet/semantic/senator.el                     |    2 +-
 lisp/cedet/semantic/sort.el                        |    2 +-
 lisp/cedet/semantic/symref.el                      |    2 +-
 lisp/cedet/semantic/symref/cscope.el               |    2 +-
 lisp/cedet/semantic/symref/filter.el               |    2 +-
 lisp/cedet/semantic/symref/global.el               |    2 +-
 lisp/cedet/semantic/symref/grep.el                 |    2 +-
 lisp/cedet/semantic/symref/idutils.el              |    2 +-
 lisp/cedet/semantic/symref/list.el                 |    2 +-
 lisp/cedet/semantic/tag-file.el                    |    2 +-
 lisp/cedet/semantic/tag-ls.el                      |    2 +-
 lisp/cedet/semantic/tag-write.el                   |    2 +-
 lisp/cedet/semantic/tag.el                         |    2 +-
 lisp/cedet/semantic/texi.el                        |    2 +-
 lisp/cedet/semantic/util-modes.el                  |    2 +-
 lisp/cedet/semantic/util.el                        |    2 +-
 lisp/cedet/semantic/wisent.el                      |    2 +-
 lisp/cedet/semantic/wisent/comp.el                 |    2 +-
 lisp/cedet/semantic/wisent/grammar.el              |    2 +-
 lisp/cedet/semantic/wisent/java-tags.el            |    2 +-
 lisp/cedet/semantic/wisent/javascript.el           |    2 +-
 lisp/cedet/semantic/wisent/python.el               |    2 +-
 lisp/cedet/semantic/wisent/wisent.el               |    2 +-
 lisp/cedet/srecode.el                              |    2 +-
 lisp/cedet/srecode/args.el                         |    2 +-
 lisp/cedet/srecode/compile.el                      |    2 +-
 lisp/cedet/srecode/cpp.el                          |    2 +-
 lisp/cedet/srecode/ctxt.el                         |    2 +-
 lisp/cedet/srecode/dictionary.el                   |    2 +-
 lisp/cedet/srecode/document.el                     |    2 +-
 lisp/cedet/srecode/el.el                           |    2 +-
 lisp/cedet/srecode/expandproto.el                  |    2 +-
 lisp/cedet/srecode/extract.el                      |    2 +-
 lisp/cedet/srecode/fields.el                       |    2 +-
 lisp/cedet/srecode/filters.el                      |    2 +-
 lisp/cedet/srecode/find.el                         |    2 +-
 lisp/cedet/srecode/getset.el                       |    2 +-
 lisp/cedet/srecode/insert.el                       |    2 +-
 lisp/cedet/srecode/java.el                         |    2 +-
 lisp/cedet/srecode/map.el                          |    2 +-
 lisp/cedet/srecode/mode.el                         |    2 +-
 lisp/cedet/srecode/semantic.el                     |    2 +-
 lisp/cedet/srecode/srt-mode.el                     |    2 +-
 lisp/cedet/srecode/srt.el                          |    2 +-
 lisp/cedet/srecode/table.el                        |    2 +-
 lisp/cedet/srecode/template.el                     |    2 +-
 lisp/cedet/srecode/texi.el                         |    2 +-
 lisp/char-fold.el                                  |    2 +-
 lisp/chistory.el                                   |    2 +-
 lisp/cmuscheme.el                                  |    2 +-
 lisp/color.el                                      |    2 +-
 lisp/comint.el                                     |    6 +-
 lisp/completion.el                                 |    2 +-
 lisp/composite.el                                  |    2 +-
 lisp/cus-dep.el                                    |    2 +-
 lisp/cus-edit.el                                   |    2 +-
 lisp/cus-face.el                                   |    2 +-
 lisp/cus-start.el                                  |    2 +-
 lisp/cus-theme.el                                  |    2 +-
 lisp/custom.el                                     |    2 +-
 lisp/dabbrev.el                                    |    2 +-
 lisp/delim-col.el                                  |    2 +-
 lisp/delsel.el                                     |    2 +-
 lisp/descr-text.el                                 |    2 +-
 lisp/desktop.el                                    |    4 +-
 lisp/dframe.el                                     |    2 +-
 lisp/dired-aux.el                                  |    2 +-
 lisp/dired-x.el                                    |    2 +-
 lisp/dired.el                                      |    4 +-
 lisp/dirtrack.el                                   |    2 +-
 lisp/disp-table.el                                 |    2 +-
 lisp/display-fill-column-indicator.el              |    2 +-
 lisp/display-line-numbers.el                       |    2 +-
 lisp/dnd.el                                        |    2 +-
 lisp/doc-view.el                                   |    2 +-
 lisp/dom.el                                        |    2 +-
 lisp/dos-fns.el                                    |    2 +-
 lisp/dos-vars.el                                   |    2 +-
 lisp/dos-w32.el                                    |    2 +-
 lisp/double.el                                     |    2 +-
 lisp/dynamic-setting.el                            |    2 +-
 lisp/ebuff-menu.el                                 |    2 +-
 lisp/echistory.el                                  |    2 +-
 lisp/ecomplete.el                                  |    2 +-
 lisp/edmacro.el                                    |    2 +-
 lisp/ehelp.el                                      |    2 +-
 lisp/elec-pair.el                                  |    2 +-
 lisp/electric.el                                   |    2 +-
 lisp/elide-head.el                                 |   64 +-
 lisp/emacs-lisp/advice.el                          |    2 +-
 lisp/emacs-lisp/avl-tree.el                        |    2 +-
 lisp/emacs-lisp/backquote.el                       |    2 +-
 lisp/emacs-lisp/backtrace.el                       |    2 +-
 lisp/emacs-lisp/benchmark.el                       |    2 +-
 lisp/emacs-lisp/bindat.el                          |    2 +-
 lisp/emacs-lisp/byte-opt.el                        |    7 +-
 lisp/emacs-lisp/byte-run.el                        |   22 +-
 lisp/emacs-lisp/bytecomp.el                        |   41 +-
 lisp/emacs-lisp/cconv.el                           |    8 +-
 lisp/emacs-lisp/chart.el                           |    4 +-
 lisp/emacs-lisp/check-declare.el                   |    2 +-
 lisp/emacs-lisp/checkdoc.el                        |    2 +-
 lisp/emacs-lisp/cl-extra.el                        |    2 +-
 lisp/emacs-lisp/cl-generic.el                      |    2 +-
 lisp/emacs-lisp/cl-indent.el                       |    2 +-
 lisp/emacs-lisp/cl-lib.el                          |    4 +-
 lisp/emacs-lisp/cl-macs.el                         |   12 +-
 lisp/emacs-lisp/cl-preloaded.el                    |    2 +-
 lisp/emacs-lisp/cl-print.el                        |    2 +-
 lisp/emacs-lisp/cl-seq.el                          |    2 +-
 lisp/emacs-lisp/comp-cstr.el                       |    2 +-
 lisp/emacs-lisp/comp.el                            |   20 +-
 lisp/emacs-lisp/copyright.el                       |    2 +-
 lisp/emacs-lisp/crm.el                             |    2 +-
 lisp/emacs-lisp/cursor-sensor.el                   |    2 +-
 lisp/emacs-lisp/debug-early.el                     |    2 +-
 lisp/emacs-lisp/debug.el                           |    2 +-
 lisp/emacs-lisp/derived.el                         |    2 +-
 lisp/emacs-lisp/disass.el                          |    2 +-
 lisp/emacs-lisp/easy-mmode.el                      |    5 +-
 lisp/emacs-lisp/easymenu.el                        |    2 +-
 lisp/emacs-lisp/edebug.el                          |    8 +-
 lisp/emacs-lisp/eieio-base.el                      |    2 +-
 lisp/emacs-lisp/eieio-core.el                      |    2 +-
 lisp/emacs-lisp/eieio-custom.el                    |    2 +-
 lisp/emacs-lisp/eieio-datadebug.el                 |    2 +-
 lisp/emacs-lisp/eieio-opt.el                       |    2 +-
 lisp/emacs-lisp/eieio-speedbar.el                  |    2 +-
 lisp/emacs-lisp/eieio.el                           |    7 +-
 lisp/emacs-lisp/eldoc.el                           |    2 +-
 lisp/emacs-lisp/elint.el                           |    2 +-
 lisp/emacs-lisp/elp.el                             |    2 +-
 lisp/emacs-lisp/ert-x.el                           |   55 +-
 lisp/emacs-lisp/ert.el                             |    2 +-
 lisp/emacs-lisp/ewoc.el                            |    2 +-
 lisp/emacs-lisp/faceup.el                          |    2 +-
 lisp/emacs-lisp/find-func.el                       |    2 +-
 lisp/emacs-lisp/float-sup.el                       |    2 +-
 lisp/emacs-lisp/generate-lisp-file.el              |    2 +-
 lisp/emacs-lisp/generator.el                       |    2 +-
 lisp/emacs-lisp/generic.el                         |    2 +-
 lisp/emacs-lisp/gv.el                              |    2 +-
 lisp/emacs-lisp/helper.el                          |    2 +-
 lisp/emacs-lisp/hierarchy.el                       |    2 +-
 lisp/emacs-lisp/icons.el                           |    2 +-
 lisp/emacs-lisp/inline.el                          |    2 +-
 lisp/emacs-lisp/let-alist.el                       |    2 +-
 lisp/emacs-lisp/lisp-mnt.el                        |    2 +-
 lisp/emacs-lisp/lisp-mode.el                       |    2 +-
 lisp/emacs-lisp/lisp.el                            |    2 +-
 lisp/emacs-lisp/loaddefs-gen.el                    |    5 +-
 lisp/emacs-lisp/macroexp.el                        |   19 +-
 lisp/emacs-lisp/map-ynp.el                         |    2 +-
 lisp/emacs-lisp/map.el                             |    2 +-
 lisp/emacs-lisp/memory-report.el                   |    2 +-
 lisp/emacs-lisp/multisession.el                    |    2 +-
 lisp/emacs-lisp/nadvice.el                         |    2 +-
 lisp/emacs-lisp/oclosure.el                        |    2 +-
 lisp/emacs-lisp/package-vc.el                      |  268 +-
 lisp/emacs-lisp/package-x.el                       |    2 +-
 lisp/emacs-lisp/package.el                         |    4 +-
 lisp/emacs-lisp/pcase.el                           |    4 +-
 lisp/emacs-lisp/pp.el                              |    2 +-
 lisp/emacs-lisp/radix-tree.el                      |    2 +-
 lisp/emacs-lisp/range.el                           |    2 +-
 lisp/emacs-lisp/re-builder.el                      |    2 +-
 lisp/emacs-lisp/regexp-opt.el                      |    2 +-
 lisp/emacs-lisp/regi.el                            |    2 +-
 lisp/emacs-lisp/ring.el                            |    2 +-
 lisp/emacs-lisp/rmc.el                             |    2 +-
 lisp/emacs-lisp/rx.el                              |    2 +-
 lisp/emacs-lisp/seq.el                             |    2 +-
 lisp/emacs-lisp/shadow.el                          |    2 +-
 lisp/emacs-lisp/shortdoc.el                        |   19 +-
 lisp/emacs-lisp/shorthands.el                      |    2 +-
 lisp/emacs-lisp/smie.el                            |    2 +-
 lisp/emacs-lisp/subr-x.el                          |    7 +-
 lisp/emacs-lisp/syntax.el                          |    2 +-
 lisp/emacs-lisp/tabulated-list.el                  |    2 +-
 lisp/emacs-lisp/tcover-ses.el                      |    2 +-
 lisp/emacs-lisp/testcover.el                       |    2 +-
 lisp/emacs-lisp/text-property-search.el            |    2 +-
 lisp/emacs-lisp/thunk.el                           |    2 +-
 lisp/emacs-lisp/timer-list.el                      |    2 +-
 lisp/emacs-lisp/timer.el                           |    2 +-
 lisp/emacs-lisp/tq.el                              |    2 +-
 lisp/emacs-lisp/trace.el                           |    2 +-
 lisp/emacs-lisp/unsafep.el                         |    2 +-
 lisp/emacs-lisp/vtable.el                          |    2 +-
 lisp/emacs-lisp/warnings.el                        |    2 +-
 lisp/emacs-lock.el                                 |    2 +-
 lisp/emulation/cua-base.el                         |    2 +-
 lisp/emulation/cua-gmrk.el                         |    2 +-
 lisp/emulation/cua-rect.el                         |    2 +-
 lisp/emulation/edt-lk201.el                        |    2 +-
 lisp/emulation/edt-mapper.el                       |    2 +-
 lisp/emulation/edt-pc.el                           |    2 +-
 lisp/emulation/edt-vt100.el                        |    2 +-
 lisp/emulation/edt.el                              |    2 +-
 lisp/emulation/keypad.el                           |    2 +-
 lisp/emulation/viper-cmd.el                        |    2 +-
 lisp/emulation/viper-ex.el                         |    2 +-
 lisp/emulation/viper-init.el                       |    2 +-
 lisp/emulation/viper-keym.el                       |    2 +-
 lisp/emulation/viper-macs.el                       |    2 +-
 lisp/emulation/viper-mous.el                       |    2 +-
 lisp/emulation/viper-util.el                       |    2 +-
 lisp/emulation/viper.el                            |    2 +-
 lisp/env.el                                        |    2 +-
 lisp/epa-dired.el                                  |    2 +-
 lisp/epa-file.el                                   |    2 +-
 lisp/epa-hook.el                                   |    2 +-
 lisp/epa-ks.el                                     |    8 +-
 lisp/epa-mail.el                                   |    2 +-
 lisp/epa.el                                        |    2 +-
 lisp/epg-config.el                                 |    2 +-
 lisp/epg.el                                        |    2 +-
 lisp/erc/ChangeLog.1                               |    2 +-
 lisp/erc/ChangeLog.2                               |    2 +-
 lisp/erc/erc-autoaway.el                           |    2 +-
 lisp/erc/erc-backend.el                            |   12 +-
 lisp/erc/erc-button.el                             |    2 +-
 lisp/erc/erc-capab.el                              |    2 +-
 lisp/erc/erc-common.el                             |    2 +-
 lisp/erc/erc-compat.el                             |   14 +-
 lisp/erc/erc-dcc.el                                |    2 +-
 lisp/erc/erc-desktop-notifications.el              |    2 +-
 lisp/erc/erc-ezbounce.el                           |    2 +-
 lisp/erc/erc-fill.el                               |    2 +-
 lisp/erc/erc-goodies.el                            |    2 +-
 lisp/erc/erc-ibuffer.el                            |    2 +-
 lisp/erc/erc-identd.el                             |    2 +-
 lisp/erc/erc-imenu.el                              |    2 +-
 lisp/erc/erc-join.el                               |    2 +-
 lisp/erc/erc-lang.el                               |    2 +-
 lisp/erc/erc-list.el                               |    2 +-
 lisp/erc/erc-log.el                                |    2 +-
 lisp/erc/erc-match.el                              |    2 +-
 lisp/erc/erc-menu.el                               |    2 +-
 lisp/erc/erc-netsplit.el                           |    2 +-
 lisp/erc/erc-networks.el                           |   28 +-
 lisp/erc/erc-notify.el                             |    2 +-
 lisp/erc/erc-page.el                               |    2 +-
 lisp/erc/erc-pcomplete.el                          |    2 +-
 lisp/erc/erc-replace.el                            |    2 +-
 lisp/erc/erc-ring.el                               |    2 +-
 lisp/erc/erc-sasl.el                               |    4 +-
 lisp/erc/erc-services.el                           |    2 +-
 lisp/erc/erc-sound.el                              |    2 +-
 lisp/erc/erc-speedbar.el                           |    2 +-
 lisp/erc/erc-spelling.el                           |    2 +-
 lisp/erc/erc-stamp.el                              |    2 +-
 lisp/erc/erc-status-sidebar.el                     |    2 +-
 lisp/erc/erc-track.el                              |    2 +-
 lisp/erc/erc-truncate.el                           |    2 +-
 lisp/erc/erc-xdcc.el                               |    2 +-
 lisp/erc/erc.el                                    |   58 +-
 lisp/eshell/em-alias.el                            |    2 +-
 lisp/eshell/em-banner.el                           |    2 +-
 lisp/eshell/em-basic.el                            |    2 +-
 lisp/eshell/em-cmpl.el                             |    2 +-
 lisp/eshell/em-dirs.el                             |    2 +-
 lisp/eshell/em-elecslash.el                        |   16 +-
 lisp/eshell/em-extpipe.el                          |    2 +-
 lisp/eshell/em-glob.el                             |    2 +-
 lisp/eshell/em-hist.el                             |    2 +-
 lisp/eshell/em-ls.el                               |    2 +-
 lisp/eshell/em-pred.el                             |    2 +-
 lisp/eshell/em-prompt.el                           |    6 +-
 lisp/eshell/em-rebind.el                           |    2 +-
 lisp/eshell/em-script.el                           |    2 +-
 lisp/eshell/em-smart.el                            |    2 +-
 lisp/eshell/em-term.el                             |    2 +-
 lisp/eshell/em-tramp.el                            |    7 +-
 lisp/eshell/em-unix.el                             |    2 +-
 lisp/eshell/em-xtra.el                             |    2 +-
 lisp/eshell/esh-arg.el                             |    2 +-
 lisp/eshell/esh-cmd.el                             |   41 +-
 lisp/eshell/esh-ext.el                             |    2 +-
 lisp/eshell/esh-io.el                              |  172 +-
 lisp/eshell/esh-mode.el                            |    6 +-
 lisp/eshell/esh-module.el                          |    2 +-
 lisp/eshell/esh-opt.el                             |    2 +-
 lisp/eshell/esh-proc.el                            |    4 +-
 lisp/eshell/esh-util.el                            |    2 +-
 lisp/eshell/esh-var.el                             |    4 +-
 lisp/eshell/eshell.el                              |    2 +-
 lisp/expand.el                                     |    2 +-
 lisp/external-completion.el                        |    2 +-
 lisp/ezimage.el                                    |    2 +-
 lisp/face-remap.el                                 |    2 +-
 lisp/facemenu.el                                   |    2 +-
 lisp/faces.el                                      |    9 +-
 lisp/ffap.el                                       |    2 +-
 lisp/filecache.el                                  |    2 +-
 lisp/fileloop.el                                   |    2 +-
 lisp/filenotify.el                                 |    2 +-
 lisp/files-x.el                                    |    2 +-
 lisp/files.el                                      |   57 +-
 lisp/filesets.el                                   |    2 +-
 lisp/find-cmd.el                                   |    2 +-
 lisp/find-dired.el                                 |    2 +-
 lisp/find-file.el                                  |    2 +-
 lisp/find-lisp.el                                  |    2 +-
 lisp/finder.el                                     |    2 +-
 lisp/flow-ctrl.el                                  |    2 +-
 lisp/foldout.el                                    |    2 +-
 lisp/follow.el                                     |    2 +-
 lisp/font-core.el                                  |    2 +-
 lisp/font-lock.el                                  |    9 +-
 lisp/format-spec.el                                |    2 +-
 lisp/format.el                                     |    2 +-
 lisp/forms.el                                      |    2 +-
 lisp/frame.el                                      |    2 +-
 lisp/frameset.el                                   |    2 +-
 lisp/fringe.el                                     |    2 +-
 lisp/generic-x.el                                  |    2 +-
 lisp/gnus/ChangeLog.1                              |    2 +-
 lisp/gnus/ChangeLog.2                              |    4 +-
 lisp/gnus/ChangeLog.3                              |    6 +-
 lisp/gnus/canlock.el                               |    2 +-
 lisp/gnus/deuglify.el                              |    2 +-
 lisp/gnus/gmm-utils.el                             |    2 +-
 lisp/gnus/gnus-agent.el                            |    2 +-
 lisp/gnus/gnus-art.el                              |    2 +-
 lisp/gnus/gnus-async.el                            |    2 +-
 lisp/gnus/gnus-bcklg.el                            |    2 +-
 lisp/gnus/gnus-bookmark.el                         |    2 +-
 lisp/gnus/gnus-cache.el                            |    2 +-
 lisp/gnus/gnus-cite.el                             |    2 +-
 lisp/gnus/gnus-cloud.el                            |    2 +-
 lisp/gnus/gnus-cus.el                              |    2 +-
 lisp/gnus/gnus-dbus.el                             |    2 +-
 lisp/gnus/gnus-delay.el                            |    2 +-
 lisp/gnus/gnus-demon.el                            |    2 +-
 lisp/gnus/gnus-diary.el                            |    2 +-
 lisp/gnus/gnus-dired.el                            |    2 +-
 lisp/gnus/gnus-draft.el                            |    2 +-
 lisp/gnus/gnus-dup.el                              |    2 +-
 lisp/gnus/gnus-eform.el                            |    2 +-
 lisp/gnus/gnus-fun.el                              |    2 +-
 lisp/gnus/gnus-gravatar.el                         |    2 +-
 lisp/gnus/gnus-group.el                            |    2 +-
 lisp/gnus/gnus-html.el                             |    2 +-
 lisp/gnus/gnus-icalendar.el                        |    2 +-
 lisp/gnus/gnus-int.el                              |    2 +-
 lisp/gnus/gnus-kill.el                             |    2 +-
 lisp/gnus/gnus-logic.el                            |    2 +-
 lisp/gnus/gnus-mh.el                               |    2 +-
 lisp/gnus/gnus-ml.el                               |    2 +-
 lisp/gnus/gnus-mlspl.el                            |    2 +-
 lisp/gnus/gnus-msg.el                              |    2 +-
 lisp/gnus/gnus-notifications.el                    |    2 +-
 lisp/gnus/gnus-picon.el                            |    2 +-
 lisp/gnus/gnus-range.el                            |    2 +-
 lisp/gnus/gnus-registry.el                         |    4 +-
 lisp/gnus/gnus-rfc1843.el                          |    2 +-
 lisp/gnus/gnus-rmail.el                            |    2 +-
 lisp/gnus/gnus-salt.el                             |    2 +-
 lisp/gnus/gnus-score.el                            |    2 +-
 lisp/gnus/gnus-search.el                           |    2 +-
 lisp/gnus/gnus-sieve.el                            |    2 +-
 lisp/gnus/gnus-spec.el                             |    2 +-
 lisp/gnus/gnus-srvr.el                             |    2 +-
 lisp/gnus/gnus-start.el                            |    2 +-
 lisp/gnus/gnus-sum.el                              |    2 +-
 lisp/gnus/gnus-topic.el                            |    2 +-
 lisp/gnus/gnus-undo.el                             |    2 +-
 lisp/gnus/gnus-util.el                             |    2 +-
 lisp/gnus/gnus-uu.el                               |    2 +-
 lisp/gnus/gnus-vm.el                               |    2 +-
 lisp/gnus/gnus-win.el                              |    2 +-
 lisp/gnus/gnus.el                                  |    2 +-
 lisp/gnus/gssapi.el                                |    2 +-
 lisp/gnus/legacy-gnus-agent.el                     |    2 +-
 lisp/gnus/mail-source.el                           |    2 +-
 lisp/gnus/message.el                               |    5 +-
 lisp/gnus/mm-archive.el                            |    2 +-
 lisp/gnus/mm-bodies.el                             |    2 +-
 lisp/gnus/mm-decode.el                             |    2 +-
 lisp/gnus/mm-encode.el                             |    2 +-
 lisp/gnus/mm-extern.el                             |    2 +-
 lisp/gnus/mm-partial.el                            |    2 +-
 lisp/gnus/mm-url.el                                |    2 +-
 lisp/gnus/mm-util.el                               |    2 +-
 lisp/gnus/mm-uu.el                                 |    2 +-
 lisp/gnus/mm-view.el                               |    2 +-
 lisp/gnus/mml-sec.el                               |    2 +-
 lisp/gnus/mml-smime.el                             |    2 +-
 lisp/gnus/mml.el                                   |    2 +-
 lisp/gnus/mml1991.el                               |    2 +-
 lisp/gnus/mml2015.el                               |    2 +-
 lisp/gnus/nnagent.el                               |    2 +-
 lisp/gnus/nnbabyl.el                               |    2 +-
 lisp/gnus/nndiary.el                               |    9 +-
 lisp/gnus/nndir.el                                 |    2 +-
 lisp/gnus/nndoc.el                                 |    2 +-
 lisp/gnus/nndraft.el                               |    2 +-
 lisp/gnus/nneething.el                             |    2 +-
 lisp/gnus/nnfolder.el                              |    2 +-
 lisp/gnus/nngateway.el                             |    2 +-
 lisp/gnus/nnheader.el                              |    2 +-
 lisp/gnus/nnimap.el                                |    2 +-
 lisp/gnus/nnmail.el                                |    2 +-
 lisp/gnus/nnmairix.el                              |    2 +-
 lisp/gnus/nnmbox.el                                |    2 +-
 lisp/gnus/nnmh.el                                  |    2 +-
 lisp/gnus/nnml.el                                  |   15 +-
 lisp/gnus/nnoo.el                                  |    2 +-
 lisp/gnus/nnregistry.el                            |    2 +-
 lisp/gnus/nnrss.el                                 |    2 +-
 lisp/gnus/nnselect.el                              |    2 +-
 lisp/gnus/nnspool.el                               |    2 +-
 lisp/gnus/nntp.el                                  |    2 +-
 lisp/gnus/nnvirtual.el                             |    2 +-
 lisp/gnus/nnweb.el                                 |    2 +-
 lisp/gnus/score-mode.el                            |    2 +-
 lisp/gnus/smiley.el                                |    2 +-
 lisp/gnus/smime.el                                 |    2 +-
 lisp/gnus/spam-report.el                           |    2 +-
 lisp/gnus/spam-stat.el                             |    2 +-
 lisp/gnus/spam-wash.el                             |    2 +-
 lisp/gnus/spam.el                                  |    2 +-
 lisp/help-at-pt.el                                 |    2 +-
 lisp/help-fns.el                                   |    6 +-
 lisp/help-macro.el                                 |    2 +-
 lisp/help-mode.el                                  |    2 +-
 lisp/help.el                                       |   34 +-
 lisp/hex-util.el                                   |    2 +-
 lisp/hexl.el                                       |    2 +-
 lisp/hfy-cmap.el                                   |    2 +-
 lisp/hi-lock.el                                    |   35 +-
 lisp/hilit-chg.el                                  |    2 +-
 lisp/hippie-exp.el                                 |    2 +-
 lisp/hl-line.el                                    |    2 +-
 lisp/htmlfontify.el                                |    7 +-
 lisp/ibuf-ext.el                                   |    2 +-
 lisp/ibuf-macs.el                                  |    2 +-
 lisp/ibuffer.el                                    |    2 +-
 lisp/icomplete.el                                  |    2 +-
 lisp/ido.el                                        |    2 +-
 lisp/ielm.el                                       |    2 +-
 lisp/iimage.el                                     |    2 +-
 lisp/image-file.el                                 |    2 +-
 lisp/image-mode.el                                 |    4 +-
 lisp/image.el                                      |    4 +-
 lisp/image/compface.el                             |    2 +-
 lisp/image/exif.el                                 |   23 +-
 lisp/image/gravatar.el                             |    2 +-
 lisp/image/image-converter.el                      |    2 +-
 lisp/image/image-crop.el                           |    2 +-
 lisp/image/image-dired-dired.el                    |    2 +-
 lisp/image/image-dired-external.el                 |    2 +-
 lisp/image/image-dired-tags.el                     |    2 +-
 lisp/image/image-dired-util.el                     |    2 +-
 lisp/image/image-dired.el                          |    2 +-
 lisp/image/wallpaper.el                            |    2 +-
 lisp/imenu.el                                      |    2 +-
 lisp/indent.el                                     |    5 +-
 lisp/info-look.el                                  |    2 +-
 lisp/info-xref.el                                  |    2 +-
 lisp/info.el                                       |    2 +-
 lisp/informat.el                                   |    2 +-
 lisp/international/ccl.el                          |    2 +-
 lisp/international/characters.el                   |    4 +-
 lisp/international/emoji.el                        |    2 +-
 lisp/international/fontset.el                      |    2 +-
 lisp/international/isearch-x.el                    |    2 +-
 lisp/international/iso-ascii.el                    |    2 +-
 lisp/international/iso-cvt.el                      |    2 +-
 lisp/international/iso-transl.el                   |    2 +-
 lisp/international/ja-dic-cnv.el                   |    2 +-
 lisp/international/kinsoku.el                      |    2 +-
 lisp/international/kkc.el                          |    2 +-
 lisp/international/latexenc.el                     |    2 +-
 lisp/international/latin1-disp.el                  |    2 +-
 lisp/international/mule-cmds.el                    |    2 +-
 lisp/international/mule-conf.el                    |    4 +-
 lisp/international/mule-diag.el                    |    2 +-
 lisp/international/mule-util.el                    |    2 +-
 lisp/international/mule.el                         |    2 +-
 lisp/international/ogonek.el                       |    2 +-
 lisp/international/quail.el                        |    2 +-
 lisp/international/rfc1843.el                      |    2 +-
 lisp/international/textsec-check.el                |    2 +-
 lisp/international/textsec.el                      |    2 +-
 lisp/international/titdic-cnv.el                   |    2 +-
 lisp/international/ucs-normalize.el                |    2 +-
 lisp/international/utf-7.el                        |    2 +-
 lisp/international/utf7.el                         |    2 +-
 lisp/isearch.el                                    |   25 +-
 lisp/isearchb.el                                   |    2 +-
 lisp/jit-lock.el                                   |    2 +-
 lisp/jka-cmpr-hook.el                              |    2 +-
 lisp/jka-compr.el                                  |    2 +-
 lisp/json.el                                       |    2 +-
 lisp/jsonrpc.el                                    |    2 +-
 lisp/kermit.el                                     |    2 +-
 lisp/keymap.el                                     |    4 +-
 lisp/kmacro.el                                     |    2 +-
 lisp/language/china-util.el                        |    2 +-
 lisp/language/chinese.el                           |    2 +-
 lisp/language/cyril-util.el                        |    2 +-
 lisp/language/cyrillic.el                          |    2 +-
 lisp/language/czech.el                             |    2 +-
 lisp/language/english.el                           |    2 +-
 lisp/language/ethio-util.el                        |    2 +-
 lisp/language/ethiopic.el                          |    2 +-
 lisp/language/european.el                          |    2 +-
 lisp/language/georgian.el                          |    2 +-
 lisp/language/greek.el                             |    2 +-
 lisp/language/hanja-util.el                        |    2 +-
 lisp/language/hebrew.el                            |    2 +-
 lisp/language/ind-util.el                          |    2 +-
 lisp/language/indian.el                            |    2 +-
 lisp/language/indonesian.el                        |    2 +-
 lisp/language/japan-util.el                        |    2 +-
 lisp/language/japanese.el                          |    2 +-
 lisp/language/korea-util.el                        |    2 +-
 lisp/language/korean.el                            |    2 +-
 lisp/language/lao-util.el                          |    2 +-
 lisp/language/lao.el                               |    2 +-
 lisp/language/misc-lang.el                         |    2 +-
 lisp/language/philippine.el                        |    2 +-
 lisp/language/romanian.el                          |    2 +-
 lisp/language/slovak.el                            |    2 +-
 lisp/language/tai-viet.el                          |    2 +-
 lisp/language/thai-util.el                         |    2 +-
 lisp/language/thai.el                              |    2 +-
 lisp/language/tibet-util.el                        |    2 +-
 lisp/language/tibetan.el                           |    2 +-
 lisp/language/utf-8-lang.el                        |    2 +-
 lisp/language/viet-util.el                         |    2 +-
 lisp/language/vietnamese.el                        |    2 +-
 lisp/ldefs-boot.el                                 |  159 +-
 lisp/leim/quail/arabic.el                          |    2 +-
 lisp/leim/quail/cham.el                            |    2 +-
 lisp/leim/quail/compose.el                         |    2 +-
 lisp/leim/quail/croatian.el                        |    2 +-
 lisp/leim/quail/cyril-jis.el                       |    2 +-
 lisp/leim/quail/cyrillic.el                        |    2 +-
 lisp/leim/quail/czech.el                           |    2 +-
 lisp/leim/quail/emoji.el                           |    2 +-
 lisp/leim/quail/georgian.el                        |    2 +-
 lisp/leim/quail/greek.el                           |    2 +-
 lisp/leim/quail/hangul.el                          |    2 +-
 lisp/leim/quail/hanja.el                           |    2 +-
 lisp/leim/quail/hanja3.el                          |    2 +-
 lisp/leim/quail/indian.el                          |    2 +-
 lisp/leim/quail/indonesian.el                      |    2 +-
 lisp/leim/quail/ipa-praat.el                       |    2 +-
 lisp/leim/quail/ipa.el                             |    2 +-
 lisp/leim/quail/japanese.el                        |    2 +-
 lisp/leim/quail/latin-alt.el                       |    2 +-
 lisp/leim/quail/latin-ltx.el                       |    2 +-
 lisp/leim/quail/latin-post.el                      |    2 +-
 lisp/leim/quail/latin-pre.el                       |    2 +-
 lisp/leim/quail/lrt.el                             |    2 +-
 lisp/leim/quail/misc-lang.el                       |    2 +-
 lisp/leim/quail/persian.el                         |    2 +-
 lisp/leim/quail/philippine.el                      |    2 +-
 lisp/leim/quail/programmer-dvorak.el               |    2 +-
 lisp/leim/quail/py-punct.el                        |    2 +-
 lisp/leim/quail/rfc1345.el                         |    2 +-
 lisp/leim/quail/sami.el                            |    2 +-
 lisp/leim/quail/sgml-input.el                      |    2 +-
 lisp/leim/quail/sisheng.el                         |    2 +-
 lisp/leim/quail/slovak.el                          |    2 +-
 lisp/leim/quail/symbol-ksc.el                      |    2 +-
 lisp/leim/quail/tamil-dvorak.el                    |    2 +-
 lisp/leim/quail/tibetan.el                         |    2 +-
 lisp/leim/quail/uni-input.el                       |    2 +-
 lisp/leim/quail/vntelex.el                         |    2 +-
 lisp/leim/quail/vnvni.el                           |    2 +-
 lisp/leim/quail/welsh.el                           |    2 +-
 lisp/loadhist.el                                   |    2 +-
 lisp/loadup.el                                     |    2 +-
 lisp/locate.el                                     |    2 +-
 lisp/lpr.el                                        |    2 +-
 lisp/ls-lisp.el                                    |    2 +-
 lisp/macros.el                                     |    2 +-
 lisp/mail/binhex.el                                |    2 +-
 lisp/mail/blessmail.el                             |    2 +-
 lisp/mail/emacsbug.el                              |    2 +-
 lisp/mail/flow-fill.el                             |    2 +-
 lisp/mail/footnote.el                              |    2 +-
 lisp/mail/hashcash.el                              |    2 +-
 lisp/mail/ietf-drums-date.el                       |    2 +-
 lisp/mail/ietf-drums.el                            |    2 +-
 lisp/mail/mail-extr.el                             |    2 +-
 lisp/mail/mail-hist.el                             |    2 +-
 lisp/mail/mail-parse.el                            |    2 +-
 lisp/mail/mail-prsvr.el                            |    2 +-
 lisp/mail/mail-utils.el                            |    2 +-
 lisp/mail/mailabbrev.el                            |    2 +-
 lisp/mail/mailalias.el                             |    2 +-
 lisp/mail/mailclient.el                            |    2 +-
 lisp/mail/mailheader.el                            |    2 +-
 lisp/mail/mspools.el                               |    2 +-
 lisp/mail/qp.el                                    |    2 +-
 lisp/mail/reporter.el                              |    2 +-
 lisp/mail/rfc2045.el                               |    2 +-
 lisp/mail/rfc2047.el                               |    2 +-
 lisp/mail/rfc2231.el                               |    2 +-
 lisp/mail/rfc6068.el                               |    2 +-
 lisp/mail/rfc822.el                                |    2 +-
 lisp/mail/rmail-spam-filter.el                     |    2 +-
 lisp/mail/rmail.el                                 |    2 +-
 lisp/mail/rmailedit.el                             |    2 +-
 lisp/mail/rmailkwd.el                              |    2 +-
 lisp/mail/rmailmm.el                               |    2 +-
 lisp/mail/rmailmsc.el                              |    2 +-
 lisp/mail/rmailout.el                              |    7 +-
 lisp/mail/rmailsort.el                             |    2 +-
 lisp/mail/rmailsum.el                              |    4 +-
 lisp/mail/sendmail.el                              |    2 +-
 lisp/mail/smtpmail.el                              |    2 +-
 lisp/mail/supercite.el                             |    2 +-
 lisp/mail/undigest.el                              |    2 +-
 lisp/mail/unrmail.el                               |    2 +-
 lisp/mail/uudecode.el                              |    2 +-
 lisp/mail/yenc.el                                  |    2 +-
 lisp/man.el                                        |    2 +-
 lisp/master.el                                     |    2 +-
 lisp/mb-depth.el                                   |    2 +-
 lisp/md4.el                                        |    2 +-
 lisp/menu-bar.el                                   |    2 +-
 lisp/mh-e/ChangeLog.1                              |    4 +-
 lisp/mh-e/ChangeLog.2                              |    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-e.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                             |    4 +-
 lisp/mh-e/mh-seq.el                                |    2 +-
 lisp/mh-e/mh-show.el                               |    2 +-
 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/midnight.el                                   |    2 +-
 lisp/minibuf-eldef.el                              |    2 +-
 lisp/minibuffer.el                                 |    7 +-
 lisp/misc.el                                       |    2 +-
 lisp/misearch.el                                   |    2 +-
 lisp/mouse-copy.el                                 |    2 +-
 lisp/mouse-drag.el                                 |    2 +-
 lisp/mouse.el                                      |    2 +-
 lisp/mpc.el                                        |    2 +-
 lisp/msb.el                                        |    2 +-
 lisp/mwheel.el                                     |    2 +-
 lisp/net/ange-ftp.el                               |    7 +-
 lisp/net/browse-url.el                             |    2 +-
 lisp/net/dbus.el                                   |    2 +-
 lisp/net/dictionary-connection.el                  |    2 +-
 lisp/net/dictionary.el                             |    2 +-
 lisp/net/dig.el                                    |    2 +-
 lisp/net/dns.el                                    |    2 +-
 lisp/net/eudc-bob.el                               |    2 +-
 lisp/net/eudc-capf.el                              |    2 +-
 lisp/net/eudc-export.el                            |    2 +-
 lisp/net/eudc-hotlist.el                           |    2 +-
 lisp/net/eudc-vars.el                              |    2 +-
 lisp/net/eudc.el                                   |    2 +-
 lisp/net/eudcb-bbdb.el                             |    2 +-
 lisp/net/eudcb-ecomplete.el                        |    2 +-
 lisp/net/eudcb-ldap.el                             |    2 +-
 lisp/net/eudcb-mab.el                              |    2 +-
 lisp/net/eudcb-macos-contacts.el                   |    2 +-
 lisp/net/eudcb-mailabbrev.el                       |    2 +-
 lisp/net/eww.el                                    |   10 +-
 lisp/net/gnutls.el                                 |   17 +-
 lisp/net/goto-addr.el                              |    2 +-
 lisp/net/hmac-def.el                               |    2 +-
 lisp/net/hmac-md5.el                               |    2 +-
 lisp/net/imap.el                                   |    2 +-
 lisp/net/ldap.el                                   |    2 +-
 lisp/net/mailcap.el                                |    2 +-
 lisp/net/mairix.el                                 |    2 +-
 lisp/net/net-utils.el                              |    2 +-
 lisp/net/network-stream.el                         |    2 +-
 lisp/net/newst-backend.el                          |   22 +-
 lisp/net/newst-plainview.el                        |    2 +-
 lisp/net/newst-reader.el                           |    2 +-
 lisp/net/newst-ticker.el                           |    2 +-
 lisp/net/newst-treeview.el                         |    2 +-
 lisp/net/newsticker.el                             |    2 +-
 lisp/net/nsm.el                                    |    2 +-
 lisp/net/ntlm.el                                   |    2 +-
 lisp/net/pop3.el                                   |    2 +-
 lisp/net/puny.el                                   |    2 +-
 lisp/net/rcirc.el                                  |    2 +-
 lisp/net/rfc2104.el                                |    2 +-
 lisp/net/sasl-cram.el                              |    2 +-
 lisp/net/sasl-digest.el                            |    2 +-
 lisp/net/sasl-ntlm.el                              |    2 +-
 lisp/net/sasl-scram-rfc.el                         |    2 +-
 lisp/net/sasl-scram-sha256.el                      |    2 +-
 lisp/net/sasl.el                                   |    2 +-
 lisp/net/secrets.el                                |    2 +-
 lisp/net/shr-color.el                              |    2 +-
 lisp/net/shr.el                                    |    2 +-
 lisp/net/sieve-manage.el                           |    2 +-
 lisp/net/sieve-mode.el                             |    2 +-
 lisp/net/sieve.el                                  |    2 +-
 lisp/net/snmp-mode.el                              |    2 +-
 lisp/net/soap-client.el                            |    4 +-
 lisp/net/soap-inspect.el                           |    2 +-
 lisp/net/socks.el                                  |    2 +-
 lisp/net/telnet.el                                 |    2 +-
 lisp/net/tramp-adb.el                              |   21 +-
 lisp/net/tramp-archive.el                          |    2 +-
 lisp/net/tramp-cache.el                            |    2 +-
 lisp/net/tramp-cmds.el                             |    2 +-
 lisp/net/tramp-compat.el                           |    2 +-
 lisp/net/tramp-container.el                        |    2 +-
 lisp/net/tramp-crypt.el                            |   13 +-
 lisp/net/tramp-ftp.el                              |    2 +-
 lisp/net/tramp-fuse.el                             |   12 +-
 lisp/net/tramp-gvfs.el                             |   28 +-
 lisp/net/tramp-integration.el                      |    2 +-
 lisp/net/tramp-rclone.el                           |    2 +-
 lisp/net/tramp-sh.el                               |   19 +-
 lisp/net/tramp-smb.el                              |   34 +-
 lisp/net/tramp-sshfs.el                            |    2 +-
 lisp/net/tramp-sudoedit.el                         |   15 +-
 lisp/net/tramp-uu.el                               |    2 +-
 lisp/net/tramp.el                                  |   25 +-
 lisp/net/trampver.el                               |    2 +-
 lisp/net/webjump.el                                |    2 +-
 lisp/net/zeroconf.el                               |    2 +-
 lisp/newcomment.el                                 |    2 +-
 lisp/notifications.el                              |    2 +-
 lisp/novice.el                                     |    2 +-
 lisp/nxml/nxml-enc.el                              |    2 +-
 lisp/nxml/nxml-maint.el                            |    2 +-
 lisp/nxml/nxml-mode.el                             |    2 +-
 lisp/nxml/nxml-ns.el                               |    2 +-
 lisp/nxml/nxml-outln.el                            |    2 +-
 lisp/nxml/nxml-parse.el                            |    2 +-
 lisp/nxml/nxml-rap.el                              |    2 +-
 lisp/nxml/nxml-util.el                             |    2 +-
 lisp/nxml/rng-cmpct.el                             |    2 +-
 lisp/nxml/rng-dt.el                                |    2 +-
 lisp/nxml/rng-loc.el                               |    2 +-
 lisp/nxml/rng-maint.el                             |    2 +-
 lisp/nxml/rng-match.el                             |    2 +-
 lisp/nxml/rng-nxml.el                              |    2 +-
 lisp/nxml/rng-parse.el                             |    2 +-
 lisp/nxml/rng-pttrn.el                             |    2 +-
 lisp/nxml/rng-uri.el                               |    2 +-
 lisp/nxml/rng-util.el                              |    2 +-
 lisp/nxml/rng-valid.el                             |    2 +-
 lisp/nxml/rng-xsd.el                               |    2 +-
 lisp/nxml/xmltok.el                                |    2 +-
 lisp/nxml/xsd-regexp.el                            |    2 +-
 lisp/obarray.el                                    |    2 +-
 lisp/obsolete/autoarg.el                           |    2 +-
 lisp/obsolete/autoload.el                          |    2 +-
 lisp/obsolete/bruce.el                             |    2 +-
 lisp/obsolete/cc-compat.el                         |    2 +-
 lisp/obsolete/cl-compat.el                         |    2 +-
 lisp/obsolete/cl.el                                |    2 +-
 lisp/obsolete/crisp.el                             |    2 +-
 lisp/obsolete/eieio-compat.el                      |    2 +-
 lisp/obsolete/eudcb-ph.el                          |    2 +-
 lisp/obsolete/gs.el                                |    2 +-
 lisp/obsolete/gulp.el                              |    2 +-
 lisp/obsolete/html2text.el                         |    2 +-
 lisp/obsolete/info-edit.el                         |    2 +-
 lisp/obsolete/inversion.el                         |    2 +-
 lisp/obsolete/iswitchb.el                          |    2 +-
 lisp/obsolete/landmark.el                          |    2 +-
 lisp/obsolete/linum.el                             |    2 +-
 lisp/obsolete/longlines.el                         |    2 +-
 lisp/obsolete/makesum.el                           |    2 +-
 lisp/obsolete/mantemp.el                           |    2 +-
 lisp/obsolete/messcompat.el                        |    2 +-
 lisp/obsolete/metamail.el                          |    2 +-
 lisp/obsolete/mh-compat.el                         |    2 +-
 lisp/obsolete/netrc.el                             |    2 +-
 lisp/obsolete/nnir.el                              |    2 +-
 lisp/obsolete/otodo-mode.el                        |    2 +-
 lisp/obsolete/pgg-def.el                           |    2 +-
 lisp/obsolete/pgg-gpg.el                           |    2 +-
 lisp/obsolete/pgg-parse.el                         |    2 +-
 lisp/obsolete/pgg-pgp.el                           |    2 +-
 lisp/obsolete/pgg-pgp5.el                          |    2 +-
 lisp/obsolete/pgg.el                               |    2 +-
 lisp/obsolete/ps-def.el                            |    2 +-
 lisp/obsolete/quickurl.el                          |    2 +-
 lisp/obsolete/rcompile.el                          |    2 +-
 lisp/obsolete/rfc2368.el                           |    2 +-
 lisp/obsolete/rlogin.el                            |    4 +-
 lisp/obsolete/sb-image.el                          |    2 +-
 lisp/obsolete/starttls.el                          |    2 +-
 lisp/obsolete/sup-mouse.el                         |    2 +-
 lisp/obsolete/terminal.el                          |    2 +-
 lisp/obsolete/thumbs.el                            |    2 +-
 lisp/obsolete/tls.el                               |    2 +-
 lisp/obsolete/tpu-edt.el                           |    2 +-
 lisp/obsolete/tpu-extras.el                        |    2 +-
 lisp/obsolete/tpu-mapper.el                        |    2 +-
 lisp/obsolete/uce.el                               |    2 +-
 lisp/obsolete/url-about.el                         |    2 +-
 lisp/obsolete/url-dired.el                         |    2 +-
 lisp/obsolete/url-ns.el                            |    2 +-
 lisp/obsolete/vc-arch.el                           |    2 +-
 lisp/obsolete/vc-mtn.el                            |    2 +-
 lisp/obsolete/vip.el                               |    2 +-
 lisp/obsolete/vt-control.el                        |    2 +-
 lisp/obsolete/vt100-led.el                         |    2 +-
 lisp/obsolete/ws-mode.el                           |    2 +-
 lisp/obsolete/yow.el                               |    2 +-
 lisp/org/ChangeLog.1                               |   10 +-
 lisp/org/ob-C.el                                   |    2 +-
 lisp/org/ob-R.el                                   |    2 +-
 lisp/org/ob-awk.el                                 |    2 +-
 lisp/org/ob-calc.el                                |    2 +-
 lisp/org/ob-clojure.el                             |    2 +-
 lisp/org/ob-comint.el                              |    2 +-
 lisp/org/ob-core.el                                |   17 +-
 lisp/org/ob-css.el                                 |    2 +-
 lisp/org/ob-ditaa.el                               |    2 +-
 lisp/org/ob-dot.el                                 |    2 +-
 lisp/org/ob-emacs-lisp.el                          |    2 +-
 lisp/org/ob-eshell.el                              |    2 +-
 lisp/org/ob-eval.el                                |    2 +-
 lisp/org/ob-exp.el                                 |    2 +-
 lisp/org/ob-forth.el                               |    2 +-
 lisp/org/ob-fortran.el                             |    2 +-
 lisp/org/ob-gnuplot.el                             |    2 +-
 lisp/org/ob-groovy.el                              |    2 +-
 lisp/org/ob-haskell.el                             |    2 +-
 lisp/org/ob-java.el                                |    2 +-
 lisp/org/ob-js.el                                  |    2 +-
 lisp/org/ob-julia.el                               |    2 +-
 lisp/org/ob-latex.el                               |    2 +-
 lisp/org/ob-lilypond.el                            |    2 +-
 lisp/org/ob-lisp.el                                |    2 +-
 lisp/org/ob-lob.el                                 |    2 +-
 lisp/org/ob-lua.el                                 |    2 +-
 lisp/org/ob-makefile.el                            |    2 +-
 lisp/org/ob-matlab.el                              |    2 +-
 lisp/org/ob-maxima.el                              |    2 +-
 lisp/org/ob-ocaml.el                               |    2 +-
 lisp/org/ob-octave.el                              |    2 +-
 lisp/org/ob-org.el                                 |    2 +-
 lisp/org/ob-perl.el                                |    2 +-
 lisp/org/ob-plantuml.el                            |    2 +-
 lisp/org/ob-processing.el                          |    2 +-
 lisp/org/ob-python.el                              |    2 +-
 lisp/org/ob-ref.el                                 |    2 +-
 lisp/org/ob-ruby.el                                |    2 +-
 lisp/org/ob-sass.el                                |    2 +-
 lisp/org/ob-scheme.el                              |    2 +-
 lisp/org/ob-screen.el                              |    2 +-
 lisp/org/ob-sed.el                                 |    2 +-
 lisp/org/ob-shell.el                               |    2 +-
 lisp/org/ob-sql.el                                 |    2 +-
 lisp/org/ob-sqlite.el                              |    2 +-
 lisp/org/ob-table.el                               |    2 +-
 lisp/org/ob-tangle.el                              |    5 +-
 lisp/org/ob.el                                     |    2 +-
 lisp/org/oc-basic.el                               |   20 +-
 lisp/org/oc-biblatex.el                            |    2 +-
 lisp/org/oc-bibtex.el                              |    2 +-
 lisp/org/oc-csl.el                                 |    2 +-
 lisp/org/oc-natbib.el                              |    2 +-
 lisp/org/oc.el                                     |    2 +-
 lisp/org/ol-bbdb.el                                |    2 +-
 lisp/org/ol-bibtex.el                              |    2 +-
 lisp/org/ol-docview.el                             |    2 +-
 lisp/org/ol-doi.el                                 |    2 +-
 lisp/org/ol-eshell.el                              |    2 +-
 lisp/org/ol-eww.el                                 |    2 +-
 lisp/org/ol-gnus.el                                |    2 +-
 lisp/org/ol-info.el                                |    2 +-
 lisp/org/ol-irc.el                                 |    2 +-
 lisp/org/ol-man.el                                 |    2 +-
 lisp/org/ol-mhe.el                                 |    2 +-
 lisp/org/ol-rmail.el                               |    2 +-
 lisp/org/ol-w3m.el                                 |    2 +-
 lisp/org/ol.el                                     |    2 +-
 lisp/org/org-agenda.el                             |   15 +-
 lisp/org/org-archive.el                            |    2 +-
 lisp/org/org-attach-git.el                         |    2 +-
 lisp/org/org-attach.el                             |    2 +-
 lisp/org/org-capture.el                            |    4 +-
 lisp/org/org-clock.el                              |    2 +-
 lisp/org/org-colview.el                            |    2 +-
 lisp/org/org-compat.el                             |    2 +-
 lisp/org/org-crypt.el                              |    2 +-
 lisp/org/org-ctags.el                              |    2 +-
 lisp/org/org-cycle.el                              |    2 +-
 lisp/org/org-datetree.el                           |    2 +-
 lisp/org/org-duration.el                           |    2 +-
 lisp/org/org-element.el                            |   26 +-
 lisp/org/org-entities.el                           |    2 +-
 lisp/org/org-faces.el                              |    4 +-
 lisp/org/org-feed.el                               |    2 +-
 lisp/org/org-fold-core.el                          |   10 +-
 lisp/org/org-fold.el                               |    2 +-
 lisp/org/org-footnote.el                           |    2 +-
 lisp/org/org-goto.el                               |    2 +-
 lisp/org/org-habit.el                              |    2 +-
 lisp/org/org-id.el                                 |    2 +-
 lisp/org/org-indent.el                             |    2 +-
 lisp/org/org-inlinetask.el                         |    2 +-
 lisp/org/org-keys.el                               |    2 +-
 lisp/org/org-lint.el                               |    2 +-
 lisp/org/org-list.el                               |    2 +-
 lisp/org/org-macro.el                              |    2 +-
 lisp/org/org-macs.el                               |   10 +-
 lisp/org/org-mobile.el                             |    2 +-
 lisp/org/org-mouse.el                              |    2 +-
 lisp/org/org-num.el                                |    2 +-
 lisp/org/org-pcomplete.el                          |    2 +-
 lisp/org/org-persist.el                            |   78 +-
 lisp/org/org-plot.el                               |    2 +-
 lisp/org/org-protocol.el                           |    2 +-
 lisp/org/org-refile.el                             |    2 +-
 lisp/org/org-src.el                                |  156 +-
 lisp/org/org-table.el                              |    2 +-
 lisp/org/org-tempo.el                              |    2 +-
 lisp/org/org-timer.el                              |    2 +-
 lisp/org/org-version.el                            |    2 +-
 lisp/org/org.el                                    |    7 +-
 lisp/org/ox-ascii.el                               |    2 +-
 lisp/org/ox-beamer.el                              |    2 +-
 lisp/org/ox-html.el                                |    4 +-
 lisp/org/ox-icalendar.el                           |    2 +-
 lisp/org/ox-koma-letter.el                         |    2 +-
 lisp/org/ox-latex.el                               |    2 +-
 lisp/org/ox-man.el                                 |    2 +-
 lisp/org/ox-md.el                                  |    2 +-
 lisp/org/ox-odt.el                                 |    2 +-
 lisp/org/ox-org.el                                 |    2 +-
 lisp/org/ox-publish.el                             |    2 +-
 lisp/org/ox-texinfo.el                             |    2 +-
 lisp/org/ox.el                                     |    2 +-
 lisp/outline.el                                    |   17 +-
 lisp/paren.el                                      |    2 +-
 lisp/password-cache.el                             |    2 +-
 lisp/pcmpl-cvs.el                                  |    2 +-
 lisp/pcmpl-git.el                                  |    2 +-
 lisp/pcmpl-gnu.el                                  |    2 +-
 lisp/pcmpl-linux.el                                |    2 +-
 lisp/pcmpl-rpm.el                                  |    2 +-
 lisp/pcmpl-unix.el                                 |    2 +-
 lisp/pcmpl-x.el                                    |    2 +-
 lisp/pcomplete.el                                  |   29 +-
 lisp/pgtk-dnd.el                                   |    2 +-
 lisp/pixel-scroll.el                               |    2 +-
 lisp/play/5x5.el                                   |    2 +-
 lisp/play/animate.el                               |    2 +-
 lisp/play/blackbox.el                              |    2 +-
 lisp/play/bubbles.el                               |    2 +-
 lisp/play/cookie1.el                               |    2 +-
 lisp/play/decipher.el                              |    2 +-
 lisp/play/dissociate.el                            |    2 +-
 lisp/play/doctor.el                                |    2 +-
 lisp/play/dunnet.el                                |    2 +-
 lisp/play/fortune.el                               |    2 +-
 lisp/play/gamegrid.el                              |    2 +-
 lisp/play/gametree.el                              |    2 +-
 lisp/play/gomoku.el                                |    2 +-
 lisp/play/handwrite.el                             |    2 +-
 lisp/play/life.el                                  |    2 +-
 lisp/play/morse.el                                 |    2 +-
 lisp/play/mpuz.el                                  |    2 +-
 lisp/play/pong.el                                  |    2 +-
 lisp/play/snake.el                                 |    2 +-
 lisp/play/solitaire.el                             |    2 +-
 lisp/play/spook.el                                 |    2 +-
 lisp/play/tetris.el                                |    2 +-
 lisp/play/zone.el                                  |    2 +-
 lisp/plstore.el                                    |    2 +-
 lisp/printing.el                                   |    2 +-
 lisp/proced.el                                     |    2 +-
 lisp/profiler.el                                   |    2 +-
 lisp/progmodes/antlr-mode.el                       |    2 +-
 lisp/progmodes/asm-mode.el                         |    2 +-
 lisp/progmodes/autoconf.el                         |    2 +-
 lisp/progmodes/bat-mode.el                         |    2 +-
 lisp/progmodes/bug-reference.el                    |    2 +-
 lisp/progmodes/c-ts-mode.el                        |  441 +-
 lisp/progmodes/cc-align.el                         |    2 +-
 lisp/progmodes/cc-awk.el                           |    2 +-
 lisp/progmodes/cc-bytecomp.el                      |    2 +-
 lisp/progmodes/cc-cmds.el                          |    2 +-
 lisp/progmodes/cc-defs.el                          |    2 +-
 lisp/progmodes/cc-engine.el                        |    4 +-
 lisp/progmodes/cc-fonts.el                         |    2 +-
 lisp/progmodes/cc-guess.el                         |    2 +-
 lisp/progmodes/cc-langs.el                         |    2 +-
 lisp/progmodes/cc-menus.el                         |    2 +-
 lisp/progmodes/cc-mode.el                          |    2 +-
 lisp/progmodes/cc-styles.el                        |    2 +-
 lisp/progmodes/cc-vars.el                          |    2 +-
 lisp/progmodes/cfengine.el                         |    2 +-
 lisp/progmodes/cl-font-lock.el                     |    2 +-
 lisp/progmodes/cmacexp.el                          |    2 +-
 lisp/progmodes/cmake-ts-mode.el                    |    2 +-
 lisp/progmodes/compile.el                          |    2 +-
 lisp/progmodes/cperl-mode.el                       |    2 +-
 lisp/progmodes/cpp.el                              |    2 +-
 lisp/progmodes/csharp-mode.el                      |  202 +-
 lisp/progmodes/cwarn.el                            |    2 +-
 lisp/progmodes/dcl-mode.el                         |    2 +-
 lisp/progmodes/dockerfile-ts-mode.el               |    2 +-
 lisp/progmodes/ebnf-abn.el                         |    2 +-
 lisp/progmodes/ebnf-bnf.el                         |    2 +-
 lisp/progmodes/ebnf-dtd.el                         |    2 +-
 lisp/progmodes/ebnf-ebx.el                         |    2 +-
 lisp/progmodes/ebnf-iso.el                         |    2 +-
 lisp/progmodes/ebnf-otz.el                         |    2 +-
 lisp/progmodes/ebnf-yac.el                         |    2 +-
 lisp/progmodes/ebnf2ps.el                          |    2 +-
 lisp/progmodes/ebrowse.el                          |    2 +-
 lisp/progmodes/eglot.el                            |   13 +-
 lisp/progmodes/elisp-mode.el                       |    2 +-
 lisp/progmodes/erts-mode.el                        |    2 +-
 lisp/progmodes/etags.el                            |    2 +-
 lisp/progmodes/executable.el                       |    2 +-
 lisp/progmodes/f90.el                              |    2 +-
 lisp/progmodes/flymake-cc.el                       |    2 +-
 lisp/progmodes/flymake-proc.el                     |    2 +-
 lisp/progmodes/flymake.el                          |    2 +-
 lisp/progmodes/fortran.el                          |    2 +-
 lisp/progmodes/gdb-mi.el                           |    2 +-
 lisp/progmodes/glasses.el                          |    2 +-
 lisp/progmodes/go-ts-mode.el                       |    2 +-
 lisp/progmodes/grep.el                             |    2 +-
 lisp/progmodes/gud.el                              |    2 +-
 lisp/progmodes/hideif.el                           |    2 +-
 lisp/progmodes/hideshow.el                         |    2 +-
 lisp/progmodes/icon.el                             |    2 +-
 lisp/progmodes/idlw-complete-structtag.el          |    2 +-
 lisp/progmodes/idlw-help.el                        |    4 +-
 lisp/progmodes/idlw-shell.el                       |    2 +-
 lisp/progmodes/idlw-toolbar.el                     |    2 +-
 lisp/progmodes/idlwave.el                          |    2 +-
 lisp/progmodes/inf-lisp.el                         |    2 +-
 lisp/progmodes/java-ts-mode.el                     |   92 +-
 lisp/progmodes/js.el                               |  262 +-
 lisp/progmodes/json-ts-mode.el                     |   45 +-
 lisp/progmodes/ld-script.el                        |    2 +-
 lisp/progmodes/m4-mode.el                          |    2 +-
 lisp/progmodes/make-mode.el                        |    2 +-
 lisp/progmodes/meta-mode.el                        |    2 +-
 lisp/progmodes/mixal-mode.el                       |    2 +-
 lisp/progmodes/octave.el                           |    2 +-
 lisp/progmodes/opascal.el                          |    2 +-
 lisp/progmodes/pascal.el                           |    2 +-
 lisp/progmodes/perl-mode.el                        |    2 +-
 lisp/progmodes/prog-mode.el                        |    8 +-
 lisp/progmodes/project.el                          |    6 +-
 lisp/progmodes/prolog.el                           |    2 +-
 lisp/progmodes/ps-mode.el                          |    2 +-
 lisp/progmodes/python.el                           |  109 +-
 lisp/progmodes/ruby-mode.el                        |  226 +-
 lisp/progmodes/ruby-ts-mode.el                     |  945 ++
 lisp/progmodes/rust-ts-mode.el                     |  124 +-
 lisp/progmodes/scheme.el                           |   22 +-
 lisp/progmodes/sh-script.el                        |    4 +-
 lisp/progmodes/simula.el                           |    2 +-
 lisp/progmodes/sql.el                              |    2 +-
 lisp/progmodes/subword.el                          |    2 +-
 lisp/progmodes/tcl.el                              |    2 +-
 lisp/progmodes/typescript-ts-mode.el               |   62 +-
 lisp/progmodes/vera-mode.el                        |    2 +-
 lisp/progmodes/verilog-mode.el                     |    2 +-
 lisp/progmodes/vhdl-mode.el                        |    2 +-
 lisp/progmodes/which-func.el                       |    2 +-
 lisp/progmodes/xref.el                             |    2 +-
 lisp/progmodes/xscheme.el                          |    2 +-
 lisp/ps-bdf.el                                     |    2 +-
 lisp/ps-mule.el                                    |    2 +-
 lisp/ps-print.el                                   |    2 +-
 lisp/ps-samp.el                                    |    2 +-
 lisp/recentf.el                                    |    2 +-
 lisp/rect.el                                       |    2 +-
 lisp/register.el                                   |    2 +-
 lisp/registry.el                                   |    2 +-
 lisp/repeat.el                                     |  122 +-
 lisp/replace.el                                    |    4 +-
 lisp/reposition.el                                 |    2 +-
 lisp/reveal.el                                     |    2 +-
 lisp/rfn-eshadow.el                                |    2 +-
 lisp/rot13.el                                      |    2 +-
 lisp/rtree.el                                      |    2 +-
 lisp/ruler-mode.el                                 |    2 +-
 lisp/savehist.el                                   |    2 +-
 lisp/saveplace.el                                  |    2 +-
 lisp/scroll-all.el                                 |    2 +-
 lisp/scroll-bar.el                                 |    2 +-
 lisp/scroll-lock.el                                |    2 +-
 lisp/select.el                                     |    2 +-
 lisp/server.el                                     |    4 +-
 lisp/ses.el                                        |    2 +-
 lisp/shadowfile.el                                 |    2 +-
 lisp/shell.el                                      |    6 +-
 lisp/simple.el                                     |   94 +-
 lisp/skeleton.el                                   |    2 +-
 lisp/so-long.el                                    |    2 +-
 lisp/sort.el                                       |    4 +-
 lisp/soundex.el                                    |    2 +-
 lisp/speedbar.el                                   |    2 +-
 lisp/sqlite-mode.el                                |    2 +-
 lisp/sqlite.el                                     |    2 +-
 lisp/startup.el                                    |    4 +-
 lisp/strokes.el                                    |    2 +-
 lisp/subr.el                                       |   75 +-
 lisp/svg.el                                        |    2 +-
 lisp/t-mouse.el                                    |    2 +-
 lisp/tab-bar.el                                    |   25 +-
 lisp/tab-line.el                                   |   16 +-
 lisp/tabify.el                                     |    2 +-
 lisp/talk.el                                       |    2 +-
 lisp/tar-mode.el                                   |    2 +-
 lisp/tempo.el                                      |    2 +-
 lisp/term.el                                       |    2 +-
 lisp/term/AT386.el                                 |    2 +-
 lisp/term/README                                   |    2 +-
 lisp/term/common-win.el                            |    2 +-
 lisp/term/fbterm.el                                |    2 +-
 lisp/term/haiku-win.el                             |    2 +-
 lisp/term/internal.el                              |    2 +-
 lisp/term/iris-ansi.el                             |    2 +-
 lisp/term/konsole.el                               |    2 +-
 lisp/term/news.el                                  |    2 +-
 lisp/term/ns-win.el                                |    2 +-
 lisp/term/pc-win.el                                |    2 +-
 lisp/term/pgtk-win.el                              |    3 +-
 lisp/term/rxvt.el                                  |    2 +-
 lisp/term/screen.el                                |    2 +-
 lisp/term/st.el                                    |    2 +-
 lisp/term/sun.el                                   |    2 +-
 lisp/term/tmux.el                                  |    2 +-
 lisp/term/tty-colors.el                            |    2 +-
 lisp/term/tvi970.el                                |    2 +-
 lisp/term/vt100.el                                 |    2 +-
 lisp/term/w32-win.el                               |    2 +-
 lisp/term/w32console.el                            |    2 +-
 lisp/term/wyse50.el                                |    2 +-
 lisp/term/x-win.el                                 |    2 +-
 lisp/term/xterm.el                                 |    2 +-
 lisp/textmodes/artist.el                           |    2 +-
 lisp/textmodes/bib-mode.el                         |    2 +-
 lisp/textmodes/bibtex-style.el                     |    2 +-
 lisp/textmodes/bibtex.el                           |   30 +-
 lisp/textmodes/conf-mode.el                        |    2 +-
 lisp/textmodes/css-mode.el                         |   59 +-
 lisp/textmodes/dns-mode.el                         |    2 +-
 lisp/textmodes/emacs-authors-mode.el               |    2 +-
 lisp/textmodes/emacs-news-mode.el                  |    2 +-
 lisp/textmodes/enriched.el                         |    2 +-
 lisp/textmodes/fill.el                             |    2 +-
 lisp/textmodes/flyspell.el                         |    2 +-
 lisp/textmodes/glyphless-mode.el                   |    2 +-
 lisp/textmodes/ispell.el                           |    2 +-
 lisp/textmodes/less-css-mode.el                    |    2 +-
 lisp/textmodes/makeinfo.el                         |    2 +-
 lisp/textmodes/mhtml-mode.el                       |    2 +-
 lisp/textmodes/nroff-mode.el                       |    2 +-
 lisp/textmodes/page-ext.el                         |    2 +-
 lisp/textmodes/page.el                             |    2 +-
 lisp/textmodes/paragraphs.el                       |    2 +-
 lisp/textmodes/picture.el                          |    2 +-
 lisp/textmodes/pixel-fill.el                       |    2 +-
 lisp/textmodes/po.el                               |    2 +-
 lisp/textmodes/refbib.el                           |    2 +-
 lisp/textmodes/refer.el                            |    2 +-
 lisp/textmodes/refill.el                           |    2 +-
 lisp/textmodes/reftex-auc.el                       |    2 +-
 lisp/textmodes/reftex-cite.el                      |    2 +-
 lisp/textmodes/reftex-dcr.el                       |    2 +-
 lisp/textmodes/reftex-global.el                    |    2 +-
 lisp/textmodes/reftex-index.el                     |    2 +-
 lisp/textmodes/reftex-parse.el                     |    2 +-
 lisp/textmodes/reftex-ref.el                       |    2 +-
 lisp/textmodes/reftex-sel.el                       |    2 +-
 lisp/textmodes/reftex-toc.el                       |    2 +-
 lisp/textmodes/reftex-vars.el                      |    6 +-
 lisp/textmodes/reftex.el                           |    2 +-
 lisp/textmodes/remember.el                         |    2 +-
 lisp/textmodes/rst.el                              |    2 +-
 lisp/textmodes/sgml-mode.el                        |    2 +-
 lisp/textmodes/string-edit.el                      |    2 +-
 lisp/textmodes/table.el                            |    2 +-
 lisp/textmodes/tex-mode.el                         |    2 +-
 lisp/textmodes/texinfmt.el                         |    2 +-
 lisp/textmodes/texinfo.el                          |    2 +-
 lisp/textmodes/texnfo-upd.el                       |    2 +-
 lisp/textmodes/text-mode.el                        |    2 +-
 lisp/textmodes/tildify.el                          |    2 +-
 lisp/textmodes/toml-ts-mode.el                     |   54 +-
 lisp/textmodes/two-column.el                       |    2 +-
 lisp/textmodes/underline.el                        |    2 +-
 lisp/textmodes/word-wrap-mode.el                   |    2 +-
 lisp/textmodes/yaml-ts-mode.el                     |    2 +-
 lisp/thingatpt.el                                  |    2 +-
 lisp/thread.el                                     |    2 +-
 lisp/time-stamp.el                                 |    2 +-
 lisp/time.el                                       |    2 +-
 lisp/timezone.el                                   |    2 +-
 lisp/tmm.el                                        |    2 +-
 lisp/tool-bar.el                                   |    2 +-
 lisp/tooltip.el                                    |    2 +-
 lisp/transient.el                                  |    2 +-
 lisp/tree-widget.el                                |    2 +-
 lisp/treesit.el                                    |  755 +-
 lisp/tutorial.el                                   |    2 +-
 lisp/type-break.el                                 |    2 +-
 lisp/uniquify.el                                   |    2 +-
 lisp/url/ChangeLog.1                               |    2 +-
 lisp/url/url-auth.el                               |    2 +-
 lisp/url/url-cache.el                              |    2 +-
 lisp/url/url-cid.el                                |    2 +-
 lisp/url/url-cookie.el                             |    2 +-
 lisp/url/url-dav.el                                |    2 +-
 lisp/url/url-domsuf.el                             |    2 +-
 lisp/url/url-expand.el                             |    2 +-
 lisp/url/url-file.el                               |    2 +-
 lisp/url/url-ftp.el                                |    2 +-
 lisp/url/url-future.el                             |    2 +-
 lisp/url/url-gw.el                                 |    2 +-
 lisp/url/url-handlers.el                           |    2 +-
 lisp/url/url-history.el                            |    2 +-
 lisp/url/url-http.el                               |    2 +-
 lisp/url/url-imap.el                               |    2 +-
 lisp/url/url-irc.el                                |    2 +-
 lisp/url/url-ldap.el                               |    2 +-
 lisp/url/url-mailto.el                             |    2 +-
 lisp/url/url-methods.el                            |    2 +-
 lisp/url/url-misc.el                               |    2 +-
 lisp/url/url-news.el                               |    2 +-
 lisp/url/url-nfs.el                                |    2 +-
 lisp/url/url-parse.el                              |    2 +-
 lisp/url/url-privacy.el                            |    2 +-
 lisp/url/url-proxy.el                              |    2 +-
 lisp/url/url-queue.el                              |    2 +-
 lisp/url/url-tramp.el                              |    2 +-
 lisp/url/url-util.el                               |    2 +-
 lisp/url/url-vars.el                               |    2 +-
 lisp/url/url.el                                    |    2 +-
 lisp/use-package/bind-key.el                       |    2 +-
 lisp/use-package/use-package-bind-key.el           |    2 +-
 lisp/use-package/use-package-core.el               |    2 +-
 lisp/use-package/use-package-delight.el            |    2 +-
 lisp/use-package/use-package-diminish.el           |    2 +-
 .../use-package-ensure-system-package.el           |    2 +-
 lisp/use-package/use-package-ensure.el             |    2 +-
 lisp/use-package/use-package-jump.el               |    2 +-
 lisp/use-package/use-package-lint.el               |    2 +-
 lisp/use-package/use-package.el                    |    2 +-
 lisp/userlock.el                                   |    2 +-
 lisp/vc/add-log.el                                 |    2 +-
 lisp/vc/compare-w.el                               |    2 +-
 lisp/vc/cvs-status.el                              |    2 +-
 lisp/vc/diff-mode.el                               |    5 +-
 lisp/vc/diff.el                                    |    2 +-
 lisp/vc/ediff-diff.el                              |    2 +-
 lisp/vc/ediff-help.el                              |    2 +-
 lisp/vc/ediff-hook.el                              |    2 +-
 lisp/vc/ediff-init.el                              |    2 +-
 lisp/vc/ediff-merg.el                              |    2 +-
 lisp/vc/ediff-mult.el                              |    2 +-
 lisp/vc/ediff-ptch.el                              |    2 +-
 lisp/vc/ediff-util.el                              |    2 +-
 lisp/vc/ediff-vers.el                              |    2 +-
 lisp/vc/ediff-wind.el                              |    2 +-
 lisp/vc/ediff.el                                   |    2 +-
 lisp/vc/log-edit.el                                |    2 +-
 lisp/vc/log-view.el                                |    2 +-
 lisp/vc/pcvs-defs.el                               |    2 +-
 lisp/vc/pcvs-info.el                               |    2 +-
 lisp/vc/pcvs-parse.el                              |    4 +-
 lisp/vc/pcvs-util.el                               |    2 +-
 lisp/vc/pcvs.el                                    |    2 +-
 lisp/vc/smerge-mode.el                             |    2 +-
 lisp/vc/vc-annotate.el                             |    2 +-
 lisp/vc/vc-bzr.el                                  |    2 +-
 lisp/vc/vc-cvs.el                                  |    2 +-
 lisp/vc/vc-dav.el                                  |    2 +-
 lisp/vc/vc-dir.el                                  |    2 +-
 lisp/vc/vc-dispatcher.el                           |    2 +-
 lisp/vc/vc-filewise.el                             |    2 +-
 lisp/vc/vc-git.el                                  |  188 +-
 lisp/vc/vc-hg.el                                   |    2 +-
 lisp/vc/vc-hooks.el                                |    2 +-
 lisp/vc/vc-rcs.el                                  |    2 +-
 lisp/vc/vc-sccs.el                                 |    2 +-
 lisp/vc/vc-src.el                                  |    2 +-
 lisp/vc/vc-svn.el                                  |    2 +-
 lisp/vc/vc.el                                      |    4 +-
 lisp/vcursor.el                                    |    2 +-
 lisp/version.el                                    |    2 +-
 lisp/view.el                                       |    2 +-
 lisp/w32-fns.el                                    |    2 +-
 lisp/w32-vars.el                                   |    2 +-
 lisp/wdired.el                                     |    2 +-
 lisp/whitespace.el                                 |   80 +-
 lisp/wid-browse.el                                 |    2 +-
 lisp/wid-edit.el                                   |    2 +-
 lisp/widget.el                                     |    2 +-
 lisp/windmove.el                                   |    2 +-
 lisp/window.el                                     |    9 +-
 lisp/winner.el                                     |    6 +-
 lisp/woman.el                                      |    2 +-
 lisp/x-dnd.el                                      |    2 +-
 lisp/xdg.el                                        |    2 +-
 lisp/xml.el                                        |    2 +-
 lisp/xt-mouse.el                                   |    2 +-
 lisp/xwidget.el                                    |    2 +-
 lisp/yank-media.el                                 |    2 +-
 lwlib/ChangeLog.1                                  |    2 +-
 lwlib/Makefile.in                                  |    2 +-
 lwlib/deps.mk                                      |    2 +-
 lwlib/lwlib-Xaw.c                                  |    2 +-
 lwlib/lwlib-Xlw.c                                  |    2 +-
 lwlib/lwlib-Xm.c                                   |    2 +-
 lwlib/lwlib-int.h                                  |    2 +-
 lwlib/lwlib-utils.c                                |    2 +-
 lwlib/lwlib-widget.h                               |    2 +-
 lwlib/lwlib.c                                      |    2 +-
 lwlib/lwlib.h                                      |    2 +-
 lwlib/xlwmenu.c                                    |    2 +-
 lwlib/xlwmenu.h                                    |    2 +-
 lwlib/xlwmenuP.h                                   |    2 +-
 m4/00gnulib.m4                                     |    2 +-
 m4/__inline.m4                                     |    2 +-
 m4/absolute-header.m4                              |    2 +-
 m4/acl.m4                                          |    2 +-
 m4/alloca.m4                                       |    4 +-
 m4/assert_h.m4                                     |    2 +-
 m4/builtin-expect.m4                               |    2 +-
 m4/byteswap.m4                                     |    2 +-
 m4/c-bool.m4                                       |    2 +-
 m4/canonicalize.m4                                 |    2 +-
 m4/clock_time.m4                                   |    2 +-
 m4/copy-file-range.m4                              |    2 +-
 m4/d-type.m4                                       |    3 +-
 m4/dirent_h.m4                                     |    2 +-
 m4/dirfd.m4                                        |    2 +-
 m4/double-slash-root.m4                            |    2 +-
 m4/dup2.m4                                         |    3 +-
 m4/eealloc.m4                                      |    2 +-
 m4/environ.m4                                      |    2 +-
 m4/errno_h.m4                                      |    2 +-
 m4/euidaccess.m4                                   |    2 +-
 m4/execinfo.m4                                     |    2 +-
 m4/explicit_bzero.m4                               |   23 +
 m4/extensions.m4                                   |    2 +-
 m4/extern-inline.m4                                |    2 +-
 m4/faccessat.m4                                    |    2 +-
 m4/fchmodat.m4                                     |    2 +-
 m4/fcntl.m4                                        |    2 +-
 m4/fcntl_h.m4                                      |    2 +-
 m4/fdopendir.m4                                    |    2 +-
 m4/filemode.m4                                     |    3 +-
 m4/flexmember.m4                                   |    2 +-
 m4/fpending.m4                                     |    2 +-
 m4/fpieee.m4                                       |    2 +-
 m4/free.m4                                         |    2 +-
 m4/fstatat.m4                                      |    2 +-
 m4/fsusage.m4                                      |    3 +-
 m4/fsync.m4                                        |    2 +-
 m4/futimens.m4                                     |    2 +-
 m4/getdtablesize.m4                                |    2 +-
 m4/getgroups.m4                                    |    3 +-
 m4/getloadavg.m4                                   |    4 +-
 m4/getopt.m4                                       |    2 +-
 m4/getrandom.m4                                    |    2 +-
 m4/gettime.m4                                      |    3 +-
 m4/gettimeofday.m4                                 |    3 +-
 m4/gnulib-common.m4                                |   59 +-
 m4/gnulib-comp.m4                                  |    2 +-
 m4/group-member.m4                                 |    3 +-
 m4/ieee754-h.m4                                    |    2 +-
 m4/include_next.m4                                 |    2 +-
 m4/inttypes.m4                                     |    2 +-
 m4/largefile.m4                                    |    2 +-
 m4/lchmod.m4                                       |    2 +-
 m4/libgmp.m4                                       |    2 +-
 m4/limits-h.m4                                     |    2 +-
 m4/lstat.m4                                        |    2 +-
 m4/malloc.m4                                       |    2 +-
 m4/manywarnings.m4                                 |    2 +-
 m4/mbstate_t.m4                                    |    2 +-
 m4/md5.m4                                          |    2 +-
 m4/memmem.m4                                       |    2 +-
 m4/mempcpy.m4                                      |    4 +-
 m4/memrchr.m4                                      |    4 +-
 m4/minmax.m4                                       |    2 +-
 m4/mkostemp.m4                                     |    2 +-
 m4/mktime.m4                                       |    4 +-
 m4/mode_t.m4                                       |    2 +-
 m4/multiarch.m4                                    |    2 +-
 m4/nanosleep.m4                                    |    2 +-
 m4/nocrash.m4                                      |    2 +-
 m4/nproc.m4                                        |    2 +-
 m4/nstrftime.m4                                    |    3 +-
 m4/off_t.m4                                        |    2 +-
 m4/open-cloexec.m4                                 |    2 +-
 m4/open-slash.m4                                   |    2 +-
 m4/open.m4                                         |    2 +-
 m4/pathmax.m4                                      |    4 +-
 m4/pid_t.m4                                        |    2 +-
 m4/pipe2.m4                                        |    2 +-
 m4/pselect.m4                                      |    2 +-
 m4/pthread_sigmask.m4                              |    2 +-
 m4/rawmemchr.m4                                    |    2 +-
 m4/readlink.m4                                     |    2 +-
 m4/readlinkat.m4                                   |    2 +-
 m4/realloc.m4                                      |    2 +-
 m4/regex.m4                                        |    2 +-
 m4/sha1.m4                                         |    2 +-
 m4/sha256.m4                                       |    2 +-
 m4/sha512.m4                                       |    2 +-
 m4/sig2str.m4                                      |    3 +-
 m4/sigdescr_np.m4                                  |    2 +-
 m4/signal_h.m4                                     |    2 +-
 m4/socklen.m4                                      |    2 +-
 m4/ssize_t.m4                                      |    3 +-
 m4/st_dm_mode.m4                                   |    2 +-
 m4/stat-time.m4                                    |    4 +-
 m4/std-gnu11.m4                                    |    2 +-
 m4/stdalign.m4                                     |    2 +-
 m4/stddef_h.m4                                     |    2 +-
 m4/stdint.m4                                       |    2 +-
 m4/stdio_h.m4                                      |    2 +-
 m4/stdlib_h.m4                                     |    2 +-
 m4/stpcpy.m4                                       |    2 +-
 m4/string_h.m4                                     |    2 +-
 m4/strnlen.m4                                      |    4 +-
 m4/strtoimax.m4                                    |    3 +-
 m4/strtoll.m4                                      |    3 +-
 m4/symlink.m4                                      |    2 +-
 m4/sys_random_h.m4                                 |    2 +-
 m4/sys_select_h.m4                                 |    2 +-
 m4/sys_socket_h.m4                                 |    2 +-
 m4/sys_stat_h.m4                                   |    2 +-
 m4/sys_time_h.m4                                   |    2 +-
 m4/sys_types_h.m4                                  |    2 +-
 m4/tempname.m4                                     |    2 +-
 m4/time_h.m4                                       |    3 +-
 m4/time_r.m4                                       |    2 +-
 m4/time_rz.m4                                      |    2 +-
 m4/timegm.m4                                       |    2 +-
 m4/timer_time.m4                                   |    2 +-
 m4/timespec.m4                                     |    3 +-
 m4/tm_gmtoff.m4                                    |    2 +-
 m4/unistd_h.m4                                     |    2 +-
 m4/unlocked-io.m4                                  |    2 +-
 m4/utimens.m4                                      |    2 +-
 m4/utimensat.m4                                    |    2 +-
 m4/utimes.m4                                       |    2 +-
 m4/vararrays.m4                                    |    2 +-
 m4/warnings.m4                                     |    2 +-
 m4/wchar_t.m4                                      |    2 +-
 m4/year2038.m4                                     |    2 +-
 m4/zzgnulib.m4                                     |    2 +-
 make-dist                                          |    2 +-
 modules/modhelp.py                                 |    2 +-
 msdos/ChangeLog.1                                  |    2 +-
 msdos/INSTALL                                      |    2 +-
 msdos/README                                       |    2 +-
 msdos/autogen/Makefile.in                          |    2 +-
 msdos/autogen/config.in                            |    2 +-
 msdos/depfiles.bat                                 |    2 +-
 msdos/inttypes.h                                   |    2 +-
 msdos/langinfo.h                                   |    2 +-
 msdos/mainmake.v2                                  |    2 +-
 msdos/sed1v2.inp                                   |    2 +-
 msdos/sed1x.inp                                    |    2 +-
 msdos/sed2v2.inp                                   |    4 +-
 msdos/sed2x.inp                                    |    2 +-
 msdos/sed3v2.inp                                   |    2 +-
 msdos/sed4.inp                                     |    2 +-
 msdos/sed5x.inp                                    |    2 +-
 msdos/sed6.inp                                     |    2 +-
 msdos/sedadmin.inp                                 |    2 +-
 msdos/sedalloc.inp                                 |    2 +-
 msdos/sedleim.inp                                  |    2 +-
 msdos/sedlibcf.inp                                 |    2 +-
 msdos/sedlibmk.inp                                 |    2 +-
 msdos/sedlisp.inp                                  |    2 +-
 nextstep/ChangeLog.1                               |    2 +-
 nextstep/INSTALL                                   |    2 +-
 nextstep/Makefile.in                               |    2 +-
 nextstep/README                                    |    2 +-
 nextstep/templates/Info.plist.in                   |    2 +-
 nt/ChangeLog.1                                     |    2 +-
 nt/INSTALL                                         |   29 +-
 nt/INSTALL.W64                                     |   90 +-
 nt/Makefile.in                                     |    2 +-
 nt/README                                          |    2 +-
 nt/README.W32                                      |    2 +-
 nt/addpm.c                                         |    2 +-
 nt/cmdproxy.c                                      |    2 +-
 nt/configure.bat                                   |    2 +-
 nt/ddeclient.c                                     |    2 +-
 nt/epaths.nt                                       |    2 +-
 nt/gnulib-cfg.mk                                   |    2 +-
 nt/icons/README                                    |    6 +-
 nt/inc/grp.h                                       |    2 +-
 nt/inc/inttypes.h                                  |    2 +-
 nt/inc/langinfo.h                                  |    2 +-
 nt/inc/ms-w32.h                                    |    2 +-
 nt/inc/nl_types.h                                  |    2 +-
 nt/inc/stdint.h                                    |    2 +-
 nt/inc/sys/resource.h                              |    2 +-
 nt/inc/sys/socket.h                                |    2 +-
 nt/inc/sys/stat.h                                  |    2 +-
 nt/inc/sys/wait.h                                  |    2 +-
 nt/preprep.c                                       |    2 +-
 nt/runemacs.c                                      |    2 +-
 oldXMenu/Activate.c                                |    2 +-
 oldXMenu/ChangeLog.1                               |    2 +-
 oldXMenu/Create.c                                  |    2 +-
 oldXMenu/FindSel.c                                 |    2 +-
 oldXMenu/Internal.c                                |    2 +-
 oldXMenu/Makefile.in                               |    2 +-
 oldXMenu/deps.mk                                   |    2 +-
 oldXMenu/insque.c                                  |    2 +-
 src/.gdbinit                                       |    2 +-
 src/.lldbinit                                      |    2 +-
 src/ChangeLog.1                                    |    2 +-
 src/ChangeLog.10                                   |    2 +-
 src/ChangeLog.11                                   |    4 +-
 src/ChangeLog.12                                   |    2 +-
 src/ChangeLog.13                                   |    2 +-
 src/ChangeLog.2                                    |    2 +-
 src/ChangeLog.3                                    |    2 +-
 src/ChangeLog.4                                    |    2 +-
 src/ChangeLog.5                                    |    2 +-
 src/ChangeLog.6                                    |    2 +-
 src/ChangeLog.7                                    |    2 +-
 src/ChangeLog.8                                    |    2 +-
 src/ChangeLog.9                                    |    2 +-
 src/Makefile.in                                    |    2 +-
 src/README                                         |    2 +-
 src/alloc.c                                        |    4 +-
 src/atimer.c                                       |    2 +-
 src/atimer.h                                       |    2 +-
 src/bidi.c                                         |    2 +-
 src/bignum.c                                       |    2 +-
 src/bignum.h                                       |    2 +-
 src/blockinput.h                                   |    2 +-
 src/buffer.c                                       |    2 +-
 src/buffer.h                                       |    2 +-
 src/bytecode.c                                     |    2 +-
 src/callint.c                                      |    2 +-
 src/callproc.c                                     |    7 +-
 src/casefiddle.c                                   |    2 +-
 src/casetab.c                                      |    2 +-
 src/category.c                                     |    2 +-
 src/ccl.c                                          |    2 +-
 src/character.c                                    |    2 +-
 src/charset.c                                      |    2 +-
 src/charset.h                                      |    2 +-
 src/cm.c                                           |    2 +-
 src/cm.h                                           |    2 +-
 src/cmds.c                                         |    2 +-
 src/coding.c                                       |    2 +-
 src/coding.h                                       |    2 +-
 src/commands.h                                     |    2 +-
 src/comp.c                                         |    2 +-
 src/comp.h                                         |    2 +-
 src/composite.c                                    |    2 +-
 src/composite.h                                    |    2 +-
 src/conf_post.h                                    |    2 +-
 src/cygw32.c                                       |    2 +-
 src/cygw32.h                                       |    2 +-
 src/data.c                                         |    2 +-
 src/dbusbind.c                                     |    2 +-
 src/decompress.c                                   |    2 +-
 src/deps.mk                                        |    2 +-
 src/dired.c                                        |    2 +-
 src/dispextern.h                                   |    6 +-
 src/dispnew.c                                      |    4 +-
 src/disptab.h                                      |    2 +-
 src/dmpstruct.awk                                  |    2 +-
 src/doc.c                                          |    2 +-
 src/doprnt.c                                       |    2 +-
 src/dosfns.c                                       |    2 +-
 src/dosfns.h                                       |    2 +-
 src/dynlib.c                                       |    2 +-
 src/dynlib.h                                       |    2 +-
 src/editfns.c                                      |    2 +-
 src/emacs-icon.h                                   |    2 +-
 src/emacs-module.c                                 |    2 +-
 src/emacs-module.h.in                              |    4 +-
 src/emacs.c                                        |    3 +-
 src/emacsgtkfixed.c                                |    2 +-
 src/emacsgtkfixed.h                                |    2 +-
 src/epaths.in                                      |    2 +-
 src/eval.c                                         |    8 +-
 src/fileio.c                                       |   49 +-
 src/filelock.c                                     |    2 +-
 src/firstfile.c                                    |    2 +-
 src/floatfns.c                                     |    2 +-
 src/fns.c                                          |    2 +-
 src/font.c                                         |    2 +-
 src/font.h                                         |    2 +-
 src/fontset.c                                      |    2 +-
 src/fontset.h                                      |    2 +-
 src/frame.c                                        |    2 +-
 src/frame.h                                        |   16 +-
 src/fringe.c                                       |    2 +-
 src/ftcrfont.c                                     |    2 +-
 src/ftfont.c                                       |    2 +-
 src/getpagesize.h                                  |    2 +-
 src/gfilenotify.c                                  |    2 +-
 src/gmalloc.c                                      |    2 +-
 src/gnutls.c                                       |  160 +-
 src/gnutls.h                                       |    2 +-
 src/gtkutil.c                                      |    2 +-
 src/gtkutil.h                                      |    2 +-
 src/haiku.c                                        |    2 +-
 src/haiku_draw_support.cc                          |    2 +-
 src/haiku_font_support.cc                          |    2 +-
 src/haiku_io.c                                     |    2 +-
 src/haiku_select.cc                                |    2 +-
 src/haiku_support.cc                               |    2 +-
 src/haiku_support.h                                |    2 +-
 src/haikufns.c                                     |   18 +-
 src/haikufont.c                                    |   27 +-
 src/haikugui.h                                     |    2 +-
 src/haikuimage.c                                   |    2 +-
 src/haikumenu.c                                    |    2 +-
 src/haikuselect.c                                  |    2 +-
 src/haikuselect.h                                  |    2 +-
 src/haikuterm.c                                    |    2 +-
 src/haikuterm.h                                    |    2 +-
 src/hbfont.c                                       |    2 +-
 src/image.c                                        |    2 +-
 src/indent.c                                       |    4 +-
 src/indent.h                                       |    2 +-
 src/inotify.c                                      |    2 +-
 src/insdel.c                                       |    2 +-
 src/intervals.c                                    |    2 +-
 src/intervals.h                                    |    2 +-
 src/itree.c                                        |    4 +-
 src/itree.h                                        |    2 +-
 src/json.c                                         |   81 +-
 src/keyboard.c                                     |    7 +-
 src/keyboard.h                                     |    2 +-
 src/keymap.c                                       |    2 +-
 src/keymap.h                                       |    2 +-
 src/kqueue.c                                       |    2 +-
 src/lastfile.c                                     |    2 +-
 src/lcms.c                                         |    2 +-
 src/lisp.h                                         |    3 +-
 src/lread.c                                        |    2 +-
 src/macfont.h                                      |    2 +-
 src/macfont.m                                      |    2 +-
 src/macros.c                                       |    2 +-
 src/macros.h                                       |    2 +-
 src/marker.c                                       |    2 +-
 src/menu.c                                         |    2 +-
 src/menu.h                                         |    2 +-
 src/minibuf.c                                      |    2 +-
 src/msdos.c                                        |    2 +-
 src/msdos.h                                        |    2 +-
 src/nsfns.m                                        |   16 +-
 src/nsfont.m                                       |    2 +-
 src/nsgui.h                                        |    2 +-
 src/nsimage.m                                      |    2 +-
 src/nsmenu.m                                       |    2 +-
 src/nsselect.m                                     |    2 +-
 src/nsterm.h                                       |    2 +-
 src/nsterm.m                                       |    2 +-
 src/nsxwidget.h                                    |    2 +-
 src/nsxwidget.m                                    |    2 +-
 src/pdumper.c                                      |    2 +-
 src/pdumper.h                                      |    2 +-
 src/pgtkfns.c                                      |   18 +-
 src/pgtkgui.h                                      |    2 +-
 src/pgtkim.c                                       |    2 +-
 src/pgtkmenu.c                                     |    2 +-
 src/pgtkselect.c                                   |    2 +-
 src/pgtkterm.c                                     |    2 +-
 src/pgtkterm.h                                     |    2 +-
 src/print.c                                        |    2 +-
 src/process.c                                      |   13 +-
 src/process.h                                      |    2 +-
 src/profiler.c                                     |    2 +-
 src/puresize.h                                     |    2 +-
 src/ralloc.c                                       |    2 +-
 src/regex-emacs.c                                  |    2 +-
 src/regex-emacs.h                                  |    2 +-
 src/region-cache.c                                 |    2 +-
 src/region-cache.h                                 |    2 +-
 src/scroll.c                                       |    2 +-
 src/search.c                                       |    2 +-
 src/sheap.c                                        |    2 +-
 src/sheap.h                                        |    2 +-
 src/sort.c                                         |    2 +-
 src/sound.c                                        |    2 +-
 src/sqlite.c                                       |    2 +-
 src/syntax.c                                       |    2 +-
 src/syntax.h                                       |    2 +-
 src/sysdep.c                                       |    2 +-
 src/sysselect.h                                    |    2 +-
 src/syssignal.h                                    |    2 +-
 src/sysstdio.h                                     |    2 +-
 src/systhread.c                                    |    2 +-
 src/systhread.h                                    |    2 +-
 src/systime.h                                      |    2 +-
 src/systty.h                                       |    2 +-
 src/syswait.h                                      |    2 +-
 src/term.c                                         |    2 +-
 src/termcap.c                                      |    2 +-
 src/termchar.h                                     |    2 +-
 src/termhooks.h                                    |    2 +-
 src/terminal.c                                     |    2 +-
 src/terminfo.c                                     |    2 +-
 src/termopts.h                                     |    2 +-
 src/textprop.c                                     |    2 +-
 src/thread.c                                       |    2 +-
 src/thread.h                                       |    2 +-
 src/timefns.c                                      |    2 +-
 src/tparam.c                                       |    2 +-
 src/tparam.h                                       |    2 +-
 src/treesit.c                                      |  293 +-
 src/treesit.h                                      |    2 +-
 src/undo.c                                         |    2 +-
 src/unexaix.c                                      |    2 +-
 src/unexcoff.c                                     |    2 +-
 src/unexcw.c                                       |    2 +-
 src/unexelf.c                                      |    2 +-
 src/unexmacosx.c                                   |    2 +-
 src/unexw32.c                                      |    2 +-
 src/verbose.mk.in                                  |    2 +-
 src/vm-limit.c                                     |    2 +-
 src/w16select.c                                    |    2 +-
 src/w32.c                                          |    2 +-
 src/w32.h                                          |    2 +-
 src/w32common.h                                    |    2 +-
 src/w32console.c                                   |    2 +-
 src/w32cygwinx.c                                   |    2 +-
 src/w32fns.c                                       |   16 +-
 src/w32font.c                                      |    2 +-
 src/w32font.h                                      |    2 +-
 src/w32gui.h                                       |    2 +-
 src/w32heap.c                                      |    2 +-
 src/w32heap.h                                      |    2 +-
 src/w32image.c                                     |    2 +-
 src/w32inevt.c                                     |    2 +-
 src/w32inevt.h                                     |    2 +-
 src/w32menu.c                                      |   15 +-
 src/w32notify.c                                    |    2 +-
 src/w32proc.c                                      |    2 +-
 src/w32reg.c                                       |    2 +-
 src/w32select.c                                    |    2 +-
 src/w32select.h                                    |    2 +-
 src/w32term.c                                      |   13 +-
 src/w32term.h                                      |    2 +-
 src/w32uniscribe.c                                 |    2 +-
 src/w32xfns.c                                      |    2 +-
 src/widget.c                                       |    2 +-
 src/widget.h                                       |    2 +-
 src/widgetprv.h                                    |    2 +-
 src/window.c                                       |    5 +-
 src/window.h                                       |    2 +-
 src/xdisp.c                                        |   42 +-
 src/xfaces.c                                       |    4 +-
 src/xfns.c                                         |   17 +-
 src/xfont.c                                        |    2 +-
 src/xftfont.c                                      |    2 +-
 src/xgselect.c                                     |    2 +-
 src/xgselect.h                                     |    2 +-
 src/xmenu.c                                        |    2 +-
 src/xml.c                                          |    2 +-
 src/xrdb.c                                         |    2 +-
 src/xselect.c                                      |    2 +-
 src/xsettings.c                                    |    2 +-
 src/xsettings.h                                    |    2 +-
 src/xsmfns.c                                       |    2 +-
 src/xterm.c                                        |  116 +-
 src/xterm.h                                        |   12 +-
 src/xwidget.c                                      |    2 +-
 src/xwidget.h                                      |    2 +-
 test/ChangeLog.1                                   |    2 +-
 test/Makefile.in                                   |    2 +-
 test/README                                        |    2 +-
 test/infra/Dockerfile.emba                         |    2 +-
 test/infra/Makefile.in                             |    2 +-
 test/infra/gitlab-ci.yml                           |    2 +-
 test/lib-src/emacsclient-tests.el                  |    2 +-
 test/lisp/abbrev-tests.el                          |    2 +-
 test/lisp/align-tests.el                           |    2 +-
 test/lisp/allout-tests.el                          |    2 +-
 test/lisp/allout-widgets-tests.el                  |    2 +-
 test/lisp/ansi-color-tests.el                      |    2 +-
 test/lisp/ansi-osc-tests.el                        |    2 +-
 test/lisp/apropos-tests.el                         |    2 +-
 test/lisp/arc-mode-tests.el                        |    2 +-
 test/lisp/auth-source-pass-tests.el                |    2 +-
 test/lisp/auth-source-tests.el                     |    2 +-
 test/lisp/autoinsert-tests.el                      |    2 +-
 test/lisp/autorevert-tests.el                      |    2 +-
 test/lisp/battery-tests.el                         |    2 +-
 test/lisp/bookmark-tests.el                        |    2 +-
 test/lisp/buff-menu-tests.el                       |    2 +-
 test/lisp/button-tests.el                          |    2 +-
 test/lisp/calc/calc-tests.el                       |    2 +-
 test/lisp/calculator-tests.el                      |    2 +-
 test/lisp/calendar/cal-french-tests.el             |    2 +-
 test/lisp/calendar/cal-julian-tests.el             |    2 +-
 test/lisp/calendar/icalendar-tests.el              |    2 +-
 test/lisp/calendar/iso8601-tests.el                |    2 +-
 test/lisp/calendar/lunar-tests.el                  |    2 +-
 test/lisp/calendar/parse-time-tests.el             |    2 +-
 test/lisp/calendar/solar-tests.el                  |    2 +-
 test/lisp/calendar/time-date-tests.el              |    2 +-
 test/lisp/calendar/todo-mode-tests.el              |    2 +-
 test/lisp/cedet/cedet-files-tests.el               |    2 +-
 test/lisp/cedet/semantic-utest-c.el                |    2 +-
 .../cedet/semantic-utest-ia-resources/test.srt     |    2 +-
 .../semantic-utest-ia-resources/testdoublens.cpp   |    2 +-
 .../semantic-utest-ia-resources/testdoublens.hpp   |    2 +-
 .../semantic-utest-ia-resources/testjavacomp.java  |    2 +-
 .../semantic-utest-ia-resources/testlocalvars.cpp  |    2 +-
 .../cedet/semantic-utest-ia-resources/testnsp.cpp  |    2 +-
 .../semantic-utest-ia-resources/testsppcomplete.c  |    2 +-
 .../semantic-utest-ia-resources/teststruct.cpp     |    2 +-
 .../semantic-utest-ia-resources/testsubclass.cpp   |    2 +-
 .../semantic-utest-ia-resources/testsubclass.hh    |    2 +-
 .../semantic-utest-ia-resources/testtemplates.cpp  |    2 +-
 .../semantic-utest-ia-resources/testtypedefs.cpp   |    2 +-
 .../semantic-utest-ia-resources/testusing.cpp      |    2 +-
 .../cedet/semantic-utest-ia-resources/testusing.hh |    2 +-
 .../semantic-utest-ia-resources/testvarnames.c     |    2 +-
 .../semantic-utest-ia-resources/testvarnames.java  |    2 +-
 .../semantic-utest-ia-resources/testwisent.wy      |    2 +-
 test/lisp/cedet/semantic-utest-ia.el               |    2 +-
 test/lisp/cedet/semantic-utest.el                  |    2 +-
 test/lisp/cedet/semantic/bovine/gcc-tests.el       |    2 +-
 .../cedet/semantic/format-resources/test-fmt.cpp   |    2 +-
 .../cedet/semantic/format-resources/test-fmt.el    |    2 +-
 test/lisp/cedet/semantic/format-tests.el           |    2 +-
 test/lisp/cedet/semantic/fw-tests.el               |    2 +-
 test/lisp/cedet/srecode-utest-getset.el            |    2 +-
 test/lisp/cedet/srecode-utest-template.el          |    2 +-
 test/lisp/cedet/srecode/document-tests.el          |    2 +-
 test/lisp/cedet/srecode/fields-tests.el            |    2 +-
 test/lisp/char-fold-tests.el                       |    2 +-
 test/lisp/color-tests.el                           |    2 +-
 test/lisp/comint-tests.el                          |    2 +-
 test/lisp/completion-tests.el                      |    2 +-
 test/lisp/cus-edit-tests.el                        |   13 +-
 test/lisp/custom-tests.el                          |    2 +-
 test/lisp/dabbrev-tests.el                         |    2 +-
 test/lisp/delim-col-tests.el                       |    2 +-
 test/lisp/descr-text-tests.el                      |    2 +-
 test/lisp/desktop-tests.el                         |    2 +-
 test/lisp/dired-aux-tests.el                       |    2 +-
 test/lisp/dired-tests.el                           |    2 +-
 test/lisp/dired-x-tests.el                         |    2 +-
 test/lisp/dnd-tests.el                             |    2 +-
 test/lisp/dom-tests.el                             |    2 +-
 test/lisp/edmacro-tests.el                         |    2 +-
 test/lisp/electric-tests.el                        |    2 +-
 test/lisp/elide-head-tests.el                      |  108 +-
 test/lisp/emacs-lisp/backquote-tests.el            |    2 +-
 test/lisp/emacs-lisp/backtrace-tests.el            |    2 +-
 test/lisp/emacs-lisp/benchmark-tests.el            |    2 +-
 test/lisp/emacs-lisp/bindat-tests.el               |    2 +-
 test/lisp/emacs-lisp/bytecomp-tests.el             |  110 +-
 test/lisp/emacs-lisp/cconv-tests.el                |    2 +-
 test/lisp/emacs-lisp/check-declare-tests.el        |    2 +-
 test/lisp/emacs-lisp/checkdoc-tests.el             |    2 +-
 test/lisp/emacs-lisp/cl-extra-tests.el             |    2 +-
 test/lisp/emacs-lisp/cl-generic-tests.el           |    2 +-
 test/lisp/emacs-lisp/cl-lib-tests.el               |    4 +-
 test/lisp/emacs-lisp/cl-macs-tests.el              |    2 +-
 test/lisp/emacs-lisp/cl-preloaded-tests.el         |    2 +-
 test/lisp/emacs-lisp/cl-print-tests.el             |    2 +-
 test/lisp/emacs-lisp/cl-seq-tests.el               |    2 +-
 test/lisp/emacs-lisp/comp-cstr-tests.el            |    2 +-
 test/lisp/emacs-lisp/comp-tests.el                 |    2 +-
 test/lisp/emacs-lisp/copyright-tests.el            |    8 +-
 test/lisp/emacs-lisp/derived-tests.el              |    2 +-
 test/lisp/emacs-lisp/easy-mmode-tests.el           |    2 +-
 .../edebug-resources/edebug-test-code.el           |    2 +-
 test/lisp/emacs-lisp/edebug-tests.el               |    2 +-
 .../eieio-tests/eieio-test-methodinvoke.el         |    2 +-
 .../emacs-lisp/eieio-tests/eieio-test-persist.el   |    2 +-
 test/lisp/emacs-lisp/eieio-tests/eieio-tests.el    |    2 +-
 test/lisp/emacs-lisp/ert-tests.el                  |    2 +-
 test/lisp/emacs-lisp/ert-x-tests.el                |   41 +-
 .../faceup-resources/faceup-test-mode.el           |    2 +-
 .../faceup-test-this-file-directory.el             |    2 +-
 .../emacs-lisp/faceup-tests/faceup-test-basics.el  |    2 +-
 .../emacs-lisp/faceup-tests/faceup-test-files.el   |    2 +-
 test/lisp/emacs-lisp/find-func-tests.el            |    2 +-
 test/lisp/emacs-lisp/float-sup-tests.el            |    2 +-
 test/lisp/emacs-lisp/generator-tests.el            |    2 +-
 test/lisp/emacs-lisp/gv-tests.el                   |    2 +-
 test/lisp/emacs-lisp/icons-tests.el                |    2 +-
 test/lisp/emacs-lisp/let-alist-tests.el            |    2 +-
 test/lisp/emacs-lisp/lisp-mnt-tests.el             |    2 +-
 test/lisp/emacs-lisp/lisp-mode-tests.el            |    2 +-
 test/lisp/emacs-lisp/lisp-tests.el                 |    2 +-
 test/lisp/emacs-lisp/macroexp-resources/m1.el      |    2 +-
 test/lisp/emacs-lisp/macroexp-resources/m2.el      |    2 +-
 test/lisp/emacs-lisp/macroexp-resources/vk.el      |    2 +-
 test/lisp/emacs-lisp/macroexp-tests.el             |    2 +-
 test/lisp/emacs-lisp/map-tests.el                  |    2 +-
 test/lisp/emacs-lisp/memory-report-tests.el        |    2 +-
 test/lisp/emacs-lisp/multisession-tests.el         |    4 +-
 test/lisp/emacs-lisp/nadvice-tests.el              |    2 +-
 test/lisp/emacs-lisp/oclosure-tests.el             |    2 +-
 .../package-resources/signed/update-signatures.sh  |    2 +-
 test/lisp/emacs-lisp/package-tests.el              |    2 +-
 test/lisp/emacs-lisp/pcase-tests.el                |    2 +-
 test/lisp/emacs-lisp/pp-tests.el                   |    2 +-
 test/lisp/emacs-lisp/range-tests.el                |    2 +-
 test/lisp/emacs-lisp/regexp-opt-tests.el           |    2 +-
 test/lisp/emacs-lisp/ring-tests.el                 |    2 +-
 test/lisp/emacs-lisp/rmc-tests.el                  |    2 +-
 test/lisp/emacs-lisp/rx-tests.el                   |    2 +-
 test/lisp/emacs-lisp/seq-tests.el                  |    2 +-
 test/lisp/emacs-lisp/shadow-tests.el               |    2 +-
 test/lisp/emacs-lisp/shortdoc-tests.el             |   12 +-
 test/lisp/emacs-lisp/subr-x-tests.el               |    2 +-
 test/lisp/emacs-lisp/syntax-tests.el               |    2 +-
 test/lisp/emacs-lisp/tabulated-list-tests.el       |    2 +-
 .../emacs-lisp/testcover-resources/testcases.el    |    2 +-
 test/lisp/emacs-lisp/testcover-tests.el            |    2 +-
 test/lisp/emacs-lisp/text-property-search-tests.el |    2 +-
 test/lisp/emacs-lisp/thunk-tests.el                |    2 +-
 test/lisp/emacs-lisp/timer-tests.el                |    2 +-
 test/lisp/emacs-lisp/unsafep-tests.el              |    2 +-
 test/lisp/emacs-lisp/vtable-tests.el               |    2 +-
 test/lisp/emacs-lisp/warnings-tests.el             |    2 +-
 test/lisp/emulation/viper-tests.el                 |    2 +-
 test/lisp/env-tests.el                             |    2 +-
 test/lisp/epg-config-tests.el                      |    2 +-
 test/lisp/epg-tests.el                             |    2 +-
 test/lisp/erc/erc-dcc-tests.el                     |    2 +-
 test/lisp/erc/erc-join-tests.el                    |    2 +-
 test/lisp/erc/erc-match-tests.el                   |    2 +-
 test/lisp/erc/erc-networks-tests.el                |    2 +-
 test/lisp/erc/erc-sasl-tests.el                    |    2 +-
 test/lisp/erc/erc-scenarios-auth-source.el         |    2 +-
 .../erc/erc-scenarios-base-association-nick.el     |    2 +-
 .../erc/erc-scenarios-base-association-query.el    |    2 +-
 .../erc/erc-scenarios-base-association-samenet.el  |    2 +-
 test/lisp/erc/erc-scenarios-base-association.el    |    2 +-
 .../erc-scenarios-base-compat-rename-bouncer.el    |    2 +-
 test/lisp/erc/erc-scenarios-base-local-modules.el  |    2 +-
 .../erc/erc-scenarios-base-misc-regressions.el     |    2 +-
 .../erc/erc-scenarios-base-netid-bouncer-id.el     |    2 +-
 .../erc-scenarios-base-netid-bouncer-recon-base.el |    2 +-
 .../erc-scenarios-base-netid-bouncer-recon-both.el |    2 +-
 .../erc-scenarios-base-netid-bouncer-recon-id.el   |    2 +-
 test/lisp/erc/erc-scenarios-base-netid-bouncer.el  |    2 +-
 test/lisp/erc/erc-scenarios-base-netid-samenet.el  |    2 +-
 test/lisp/erc/erc-scenarios-base-reconnect.el      |    2 +-
 test/lisp/erc/erc-scenarios-base-renick.el         |    2 +-
 test/lisp/erc/erc-scenarios-base-reuse-buffers.el  |    2 +-
 test/lisp/erc/erc-scenarios-base-unstable.el       |   56 +-
 .../erc/erc-scenarios-base-upstream-recon-soju.el  |    2 +-
 .../erc/erc-scenarios-base-upstream-recon-znc.el   |    2 +-
 test/lisp/erc/erc-scenarios-internal.el            |    2 +-
 test/lisp/erc/erc-scenarios-join-auth-source.el    |    2 +-
 .../lisp/erc/erc-scenarios-join-netid-newcmd-id.el |    2 +-
 test/lisp/erc/erc-scenarios-join-netid-newcmd.el   |    2 +-
 test/lisp/erc/erc-scenarios-join-netid-recon-id.el |    2 +-
 test/lisp/erc/erc-scenarios-join-netid-recon.el    |    2 +-
 test/lisp/erc/erc-scenarios-misc.el                |    2 +-
 test/lisp/erc/erc-scenarios-sasl.el                |    2 +-
 test/lisp/erc/erc-scenarios-services-misc.el       |    2 +-
 test/lisp/erc/erc-services-tests.el                |    2 +-
 test/lisp/erc/erc-tests.el                         |    8 +-
 test/lisp/erc/erc-track-tests.el                   |    2 +-
 test/lisp/erc/resources/erc-d/erc-d-i.el           |    2 +-
 test/lisp/erc/resources/erc-d/erc-d-t.el           |    2 +-
 test/lisp/erc/resources/erc-d/erc-d-tests.el       |    2 +-
 test/lisp/erc/resources/erc-d/erc-d-u.el           |    2 +-
 test/lisp/erc/resources/erc-d/erc-d.el             |    2 +-
 .../resources/erc-d/resources/proxy-subprocess.el  |    2 +-
 test/lisp/erc/resources/erc-scenarios-common.el    |    2 +-
 .../erc/resources/networks/no-module/basic.eld     |   44 +
 test/lisp/eshell/em-alias-tests.el                 |    2 +-
 test/lisp/eshell/em-basic-tests.el                 |    2 +-
 test/lisp/eshell/em-dirs-tests.el                  |    2 +-
 test/lisp/eshell/em-extpipe-tests.el               |    4 +-
 test/lisp/eshell/em-glob-tests.el                  |    2 +-
 test/lisp/eshell/em-hist-tests.el                  |    2 +-
 test/lisp/eshell/em-ls-tests.el                    |    2 +-
 test/lisp/eshell/em-pred-tests.el                  |    2 +-
 test/lisp/eshell/em-script-tests.el                |   34 +-
 test/lisp/eshell/em-tramp-tests.el                 |   94 +-
 test/lisp/eshell/esh-arg-tests.el                  |    2 +-
 test/lisp/eshell/esh-cmd-tests.el                  |   48 +-
 test/lisp/eshell/esh-ext-tests.el                  |    2 +-
 test/lisp/eshell/esh-io-tests.el                   |   87 +-
 test/lisp/eshell/esh-opt-tests.el                  |    2 +-
 test/lisp/eshell/esh-proc-tests.el                 |    2 +-
 test/lisp/eshell/esh-util-tests.el                 |    2 +-
 test/lisp/eshell/esh-var-tests.el                  |    2 +-
 test/lisp/eshell/eshell-tests-helpers.el           |   31 +-
 test/lisp/eshell/eshell-tests.el                   |   21 +-
 test/lisp/faces-resources/faces-test-dark-theme.el |    2 +-
 .../lisp/faces-resources/faces-test-light-theme.el |    2 +-
 test/lisp/faces-tests.el                           |    2 +-
 test/lisp/ffap-tests.el                            |    2 +-
 test/lisp/filenotify-tests.el                      |    2 +-
 test/lisp/files-tests.el                           |    2 +-
 test/lisp/files-x-tests.el                         |    2 +-
 test/lisp/find-cmd-tests.el                        |    2 +-
 test/lisp/font-lock-tests.el                       |    2 +-
 test/lisp/format-spec-tests.el                     |    2 +-
 test/lisp/gnus/gnus-group-tests.el                 |    2 +-
 test/lisp/gnus/gnus-icalendar-tests.el             |    2 +-
 test/lisp/gnus/gnus-search-tests.el                |    2 +-
 test/lisp/gnus/gnus-test-headers.el                |    2 +-
 test/lisp/gnus/gnus-tests.el                       |    2 +-
 test/lisp/gnus/gnus-util-tests.el                  |    2 +-
 test/lisp/gnus/message-tests.el                    |    2 +-
 test/lisp/gnus/mm-decode-tests.el                  |    2 +-
 test/lisp/gnus/mml-sec-resources/trustlist.txt     |    2 +-
 test/lisp/gnus/mml-sec-tests.el                    |    2 +-
 test/lisp/gnus/nnrss-tests.el                      |    2 +-
 test/lisp/help-fns-tests.el                        |    2 +-
 test/lisp/help-mode-tests.el                       |    2 +-
 test/lisp/help-tests.el                            |    2 +-
 test/lisp/hfy-cmap-tests.el                        |    2 +-
 test/lisp/hi-lock-tests.el                         |    2 +-
 test/lisp/hl-line-tests.el                         |    2 +-
 test/lisp/htmlfontify-tests.el                     |    2 +-
 test/lisp/ibuffer-tests.el                         |    2 +-
 test/lisp/ido-tests.el                             |    2 +-
 test/lisp/image-file-tests.el                      |    2 +-
 test/lisp/image-tests.el                           |    2 +-
 test/lisp/image/exif-tests.el                      |    2 +-
 test/lisp/image/gravatar-tests.el                  |    2 +-
 test/lisp/image/image-dired-tests.el               |    2 +-
 test/lisp/image/image-dired-util-tests.el          |    2 +-
 test/lisp/image/wallpaper-tests.el                 |    2 +-
 test/lisp/imenu-tests.el                           |    2 +-
 test/lisp/info-tests.el                            |    2 +-
 test/lisp/info-xref-tests.el                       |    2 +-
 test/lisp/international/ccl-tests.el               |    2 +-
 test/lisp/international/mule-tests.el              |    2 +-
 test/lisp/international/mule-util-tests.el         |    2 +-
 test/lisp/international/textsec-tests.el           |    2 +-
 test/lisp/international/ucs-normalize-tests.el     |    2 +-
 test/lisp/isearch-tests.el                         |    2 +-
 test/lisp/jit-lock-tests.el                        |    2 +-
 test/lisp/json-tests.el                            |    2 +-
 test/lisp/jsonrpc-tests.el                         |    2 +-
 test/lisp/kmacro-tests.el                          |    2 +-
 test/lisp/loadhist-resources/loadhist--bar.el      |    2 +-
 test/lisp/loadhist-resources/loadhist--foo.el      |    2 +-
 test/lisp/loadhist-tests.el                        |    2 +-
 test/lisp/lpr-tests.el                             |    2 +-
 test/lisp/ls-lisp-tests.el                         |    2 +-
 test/lisp/mail/flow-fill-tests.el                  |    2 +-
 test/lisp/mail/footnote-tests.el                   |    2 +-
 test/lisp/mail/ietf-drums-date-tests.el            |    2 +-
 test/lisp/mail/ietf-drums-tests.el                 |    2 +-
 test/lisp/mail/mail-extr-tests.el                  |    2 +-
 test/lisp/mail/mail-parse-tests.el                 |    2 +-
 test/lisp/mail/mail-utils-tests.el                 |    2 +-
 test/lisp/mail/qp-tests.el                         |    2 +-
 test/lisp/mail/rfc2045-tests.el                    |    2 +-
 test/lisp/mail/rfc2047-tests.el                    |    2 +-
 test/lisp/mail/rfc6068-tests.el                    |    2 +-
 test/lisp/mail/rfc822-tests.el                     |    2 +-
 test/lisp/mail/rmail-tests.el                      |    2 +-
 test/lisp/mail/rmailmm-tests.el                    |    2 +-
 test/lisp/mail/undigest-tests.el                   |    2 +-
 test/lisp/mail/uudecode-tests.el                   |    2 +-
 test/lisp/man-tests.el                             |    2 +-
 test/lisp/md4-tests.el                             |    2 +-
 test/lisp/mh-e/mh-limit-tests.el                   |    2 +-
 test/lisp/mh-e/mh-thread-tests.el                  |    2 +-
 test/lisp/mh-e/mh-utils-tests.el                   |    2 +-
 test/lisp/mh-e/mh-xface-tests.el                   |    2 +-
 test/lisp/mh-e/test-all-mh-variants.sh             |    2 +-
 test/lisp/minibuffer-tests.el                      |    2 +-
 test/lisp/misc-tests.el                            |    2 +-
 test/lisp/mouse-tests.el                           |    2 +-
 test/lisp/mwheel-tests.el                          |    2 +-
 test/lisp/net/browse-url-tests.el                  |    2 +-
 test/lisp/net/dbus-tests.el                        |    2 +-
 test/lisp/net/dig-tests.el                         |    2 +-
 test/lisp/net/eudc-tests.el                        |    2 +-
 test/lisp/net/gnutls-tests.el                      |    2 +-
 test/lisp/net/hmac-md5-tests.el                    |    2 +-
 test/lisp/net/mailcap-tests.el                     |    2 +-
 test/lisp/net/network-stream-tests.el              |    2 +-
 test/lisp/net/newsticker-tests.el                  |    2 +-
 test/lisp/net/nsm-tests.el                         |    2 +-
 test/lisp/net/ntlm-tests.el                        |    2 +-
 test/lisp/net/puny-tests.el                        |    2 +-
 test/lisp/net/rcirc-tests.el                       |    2 +-
 test/lisp/net/rfc2104-tests.el                     |    2 +-
 test/lisp/net/sasl-cram-tests.el                   |    2 +-
 test/lisp/net/sasl-scram-rfc-tests.el              |    2 +-
 test/lisp/net/sasl-tests.el                        |    2 +-
 test/lisp/net/secrets-tests.el                     |    2 +-
 test/lisp/net/shr-tests.el                         |    2 +-
 test/lisp/net/socks-tests.el                       |    2 +-
 test/lisp/net/tramp-archive-tests.el               |    2 +-
 test/lisp/net/tramp-tests.el                       |   31 +-
 test/lisp/net/webjump-tests.el                     |    2 +-
 test/lisp/newcomment-tests.el                      |    2 +-
 test/lisp/nxml/nxml-mode-tests.el                  |    2 +-
 test/lisp/nxml/xsd-regexp-tests.el                 |    2 +-
 test/lisp/obarray-tests.el                         |    2 +-
 test/lisp/obsolete/cl-tests.el                     |    2 +-
 test/lisp/obsolete/inversion-tests.el              |    2 +-
 test/lisp/obsolete/makesum-tests.el                |    2 +-
 test/lisp/obsolete/rfc2368-tests.el                |    2 +-
 test/lisp/obsolete/thumbs-tests.el                 |    2 +-
 test/lisp/org/org-tests.el                         |    2 +-
 test/lisp/paren-tests.el                           |    2 +-
 test/lisp/password-cache-tests.el                  |    2 +-
 test/lisp/pcmpl-linux-tests.el                     |    2 +-
 test/lisp/pcomplete-tests.el                       |    2 +-
 test/lisp/play/animate-tests.el                    |    2 +-
 test/lisp/play/cookie1-tests.el                    |    2 +-
 test/lisp/play/dissociate-tests.el                 |    2 +-
 test/lisp/play/fortune-tests.el                    |    2 +-
 test/lisp/play/life-tests.el                       |    2 +-
 test/lisp/play/morse-tests.el                      |    2 +-
 test/lisp/play/studly-tests.el                     |    2 +-
 test/lisp/progmodes/asm-mode-tests.el              |    2 +-
 test/lisp/progmodes/autoconf-tests.el              |    2 +-
 test/lisp/progmodes/bat-mode-tests.el              |    2 +-
 test/lisp/progmodes/bug-reference-tests.el         |    2 +-
 test/lisp/progmodes/cc-mode-tests.el               |    2 +-
 test/lisp/progmodes/compile-tests.el               |    2 +-
 .../fontify-punctuation-vars.pl                    |    2 +-
 test/lisp/progmodes/cperl-mode-tests.el            |    4 +-
 test/lisp/progmodes/eglot-tests.el                 |    2 +-
 test/lisp/progmodes/elisp-mode-tests.el            |    2 +-
 test/lisp/progmodes/etags-tests.el                 |    2 +-
 test/lisp/progmodes/executable-tests.el            |    2 +-
 test/lisp/progmodes/f90-tests.el                   |    2 +-
 test/lisp/progmodes/flymake-tests.el               |    2 +-
 test/lisp/progmodes/gdb-mi-tests.el                |    2 +-
 test/lisp/progmodes/glasses-tests.el               |    2 +-
 test/lisp/progmodes/grep-tests.el                  |    2 +-
 test/lisp/progmodes/hideshow-tests.el              |    2 +-
 test/lisp/progmodes/js-tests.el                    |    2 +-
 test/lisp/progmodes/octave-tests.el                |    2 +-
 test/lisp/progmodes/opascal-tests.el               |    2 +-
 test/lisp/progmodes/pascal-tests.el                |    2 +-
 test/lisp/progmodes/perl-mode-tests.el             |    2 +-
 test/lisp/progmodes/project-tests.el               |    2 +-
 test/lisp/progmodes/ps-mode-tests.el               |    2 +-
 test/lisp/progmodes/python-tests.el                |   66 +-
 .../ruby-after-operator-indent.rb                  |   29 +
 .../ruby-mode-resources/ruby-block-indent.rb       |   33 +
 .../ruby-mode-resources/ruby-method-call-indent.rb |   15 +
 .../ruby-method-params-indent.rb                   |   18 +
 .../ruby-parenless-call-arguments-indent.rb        |   23 +
 test/lisp/progmodes/ruby-mode-resources/ruby.rb    |   27 +
 test/lisp/progmodes/ruby-mode-tests.el             |   33 +-
 test/lisp/progmodes/ruby-ts-mode-tests.el          |  257 +
 test/lisp/progmodes/scheme-tests.el                |    2 +-
 test/lisp/progmodes/sh-script-tests.el             |    2 +-
 test/lisp/progmodes/sql-tests.el                   |    2 +-
 test/lisp/progmodes/subword-tests.el               |    2 +-
 test/lisp/progmodes/tcl-tests.el                   |    2 +-
 test/lisp/progmodes/xref-tests.el                  |    2 +-
 test/lisp/ps-print-tests.el                        |    2 +-
 test/lisp/register-tests.el                        |    2 +-
 test/lisp/repeat-tests.el                          |   32 +-
 test/lisp/replace-tests.el                         |    2 +-
 test/lisp/rot13-tests.el                           |    2 +-
 test/lisp/saveplace-tests.el                       |    2 +-
 test/lisp/scroll-lock-tests.el                     |    2 +-
 test/lisp/server-tests.el                          |    2 +-
 test/lisp/ses-tests.el                             |    2 +-
 test/lisp/shadowfile-tests.el                      |    2 +-
 test/lisp/shell-tests.el                           |    2 +-
 test/lisp/simple-tests.el                          |    2 +-
 .../so-long-tests/autoload-longlines-mode-tests.el |    2 +-
 .../so-long-tests/autoload-major-mode-tests.el     |    2 +-
 .../so-long-tests/autoload-minor-mode-tests.el     |    2 +-
 test/lisp/so-long-tests/so-long-tests-helpers.el   |    2 +-
 test/lisp/so-long-tests/so-long-tests.el           |    2 +-
 test/lisp/so-long-tests/spelling-tests.el          |    2 +-
 test/lisp/sort-tests.el                            |    2 +-
 test/lisp/soundex-tests.el                         |    2 +-
 test/lisp/startup-tests.el                         |    2 +-
 test/lisp/subr-tests.el                            |    2 +-
 test/lisp/tab-bar-tests.el                         |    2 +-
 test/lisp/tabify-tests.el                          |    2 +-
 test/lisp/tar-mode-tests.el                        |    2 +-
 test/lisp/tempo-tests.el                           |    2 +-
 test/lisp/term-tests.el                            |    2 +-
 test/lisp/term/tty-colors-tests.el                 |    2 +-
 test/lisp/textmodes/bibtex-tests.el                |    2 +-
 test/lisp/textmodes/conf-mode-tests.el             |    2 +-
 test/lisp/textmodes/css-mode-tests.el              |    2 +-
 test/lisp/textmodes/dns-mode-tests.el              |    2 +-
 test/lisp/textmodes/emacs-news-mode-tests.el       |    2 +-
 test/lisp/textmodes/fill-tests.el                  |    2 +-
 test/lisp/textmodes/mhtml-mode-tests.el            |    2 +-
 test/lisp/textmodes/page-tests.el                  |    2 +-
 test/lisp/textmodes/paragraphs-tests.el            |    2 +-
 test/lisp/textmodes/po-tests.el                    |    2 +-
 test/lisp/textmodes/reftex-tests.el                |    2 +-
 test/lisp/textmodes/sgml-mode-tests.el             |    2 +-
 test/lisp/textmodes/texinfo-tests.el               |    2 +-
 test/lisp/textmodes/tildify-tests.el               |    2 +-
 test/lisp/textmodes/underline-tests.el             |    2 +-
 test/lisp/thingatpt-tests.el                       |    2 +-
 test/lisp/thread-tests.el                          |    2 +-
 test/lisp/time-stamp-tests.el                      |    2 +-
 test/lisp/time-tests.el                            |    2 +-
 test/lisp/timezone-tests.el                        |    2 +-
 test/lisp/url/url-auth-tests.el                    |    2 +-
 test/lisp/url/url-domsuf-tests.el                  |    2 +-
 test/lisp/url/url-expand-tests.el                  |    2 +-
 test/lisp/url/url-file-tests.el                    |    2 +-
 test/lisp/url/url-future-tests.el                  |    2 +-
 test/lisp/url/url-handlers-tests.el                |    2 +-
 test/lisp/url/url-misc-tests.el                    |    2 +-
 test/lisp/url/url-parse-tests.el                   |    2 +-
 test/lisp/url/url-tramp-tests.el                   |    2 +-
 test/lisp/url/url-util-tests.el                    |    2 +-
 test/lisp/use-package/use-package-tests.el         |    2 +-
 test/lisp/vc/add-log-tests.el                      |    2 +-
 test/lisp/vc/diff-mode-tests.el                    |   81 +-
 test/lisp/vc/ediff-diff-tests.el                   |    2 +-
 test/lisp/vc/ediff-ptch-tests.el                   |    2 +-
 test/lisp/vc/log-edit-tests.el                     |    2 +-
 test/lisp/vc/smerge-mode-tests.el                  |    2 +-
 test/lisp/vc/vc-bzr-tests.el                       |    2 +-
 test/lisp/vc/vc-git-tests.el                       |    2 +-
 test/lisp/vc/vc-hg-tests.el                        |    2 +-
 test/lisp/vc/vc-tests.el                           |    2 +-
 test/lisp/version-tests.el                         |    2 +-
 test/lisp/wdired-tests.el                          |    2 +-
 test/lisp/whitespace-tests.el                      |   98 +-
 test/lisp/wid-edit-tests.el                        |    2 +-
 test/lisp/x-dnd-tests.el                           |    2 +-
 test/lisp/xdg-tests.el                             |    2 +-
 test/lisp/xml-tests.el                             |    2 +-
 test/lisp/xt-mouse-tests.el                        |    2 +-
 test/lisp/yank-media-tests.el                      |    2 +-
 test/manual/biditest.el                            |    2 +-
 test/manual/cedet/cedet-utests.el                  |    2 +-
 test/manual/cedet/ede-tests.el                     |    2 +-
 test/manual/cedet/semantic-tests.el                |    2 +-
 test/manual/cedet/tests/test.c                     |    2 +-
 test/manual/cedet/tests/test.el                    |    2 +-
 test/manual/cedet/tests/test.make                  |    2 +-
 test/manual/cedet/tests/testpolymorph.cpp          |    2 +-
 test/manual/cedet/tests/testspp.c                  |    2 +-
 test/manual/cedet/tests/testsppreplace.c           |    2 +-
 test/manual/cedet/tests/testsppreplaced.c          |    2 +-
 test/manual/etags/c-src/abbrev.c                   |    2 +-
 test/manual/etags/c-src/emacs/src/gmalloc.c        |    2 +-
 test/manual/etags/c-src/emacs/src/keyboard.c       |    2 +-
 test/manual/etags/c-src/emacs/src/lisp.h           |    2 +-
 test/manual/etags/c-src/emacs/src/regex.h          |    2 +-
 test/manual/etags/c-src/etags.c                    |    2 +-
 test/manual/etags/c-src/exit.c                     |    2 +-
 test/manual/etags/c-src/exit.strange_suffix        |    2 +-
 test/manual/etags/c-src/getopt.h                   |    2 +-
 test/manual/etags/c-src/sysdep.h                   |    2 +-
 .../etags/el-src/emacs/lisp/progmodes/etags.el     |    2 +-
 test/manual/etags/tex-src/texinfo.tex              |    2 +-
 test/manual/etags/y-src/cccp.c                     |    2 +-
 test/manual/etags/y-src/parse.c                    |    2 +-
 test/manual/etags/y-src/parse.y                    |    2 +-
 test/manual/image-circular-tests.el                |    2 +-
 test/manual/image-size-tests.el                    |    2 +-
 test/manual/image-tests.el                         |    2 +-
 test/manual/image-transforms-tests.el              |    2 +-
 test/manual/indent/pascal.pas                      |    2 +-
 test/manual/noverlay/Makefile.in                   |    2 +-
 test/manual/noverlay/check-sanitize.sh             |    2 +-
 test/manual/noverlay/emacs-compat.h                |    2 +-
 test/manual/noverlay/itree-tests.c                 |    2 +-
 test/manual/noverlay/overlay-perf.el               |   20 +
 test/manual/process-callout-tests.el               |    2 +-
 test/manual/redisplay-testsuite.el                 |    2 +-
 test/manual/scroll-tests.el                        |    2 +-
 test/misc/test-custom-deps.el                      |    2 +-
 test/misc/test-custom-libs.el                      |    2 +-
 test/misc/test-custom-noloads.el                   |    2 +-
 test/misc/test-custom-opts.el                      |    2 +-
 test/src/alloc-tests.el                            |    2 +-
 test/src/buffer-tests.el                           |    2 +-
 test/src/callint-tests.el                          |    2 +-
 test/src/callproc-tests.el                         |    2 +-
 test/src/casefiddle-tests.el                       |    2 +-
 test/src/character-tests.el                        |    2 +-
 test/src/charset-tests.el                          |    2 +-
 test/src/chartab-tests.el                          |    2 +-
 test/src/cmds-tests.el                             |    2 +-
 test/src/coding-tests.el                           |    2 +-
 test/src/comp-resources/comp-test-funcs-dyn.el     |    2 +-
 test/src/comp-resources/comp-test-funcs.el         |    2 +-
 test/src/comp-resources/comp-test-pure.el          |    2 +-
 test/src/comp-tests.el                             |    2 +-
 test/src/data-tests.el                             |    2 +-
 test/src/decompress-tests.el                       |    2 +-
 test/src/doc-tests.el                              |    2 +-
 test/src/editfns-tests.el                          |    2 +-
 test/src/emacs-module-resources/mod-test.c         |    2 +-
 test/src/emacs-module-tests.el                     |    2 +-
 test/src/emacs-tests.el                            |    2 +-
 test/src/eval-tests.el                             |    2 +-
 test/src/fileio-tests.el                           |    2 +-
 test/src/filelock-tests.el                         |    2 +-
 test/src/floatfns-tests.el                         |    2 +-
 test/src/fns-tests.el                              |    2 +-
 test/src/font-tests.el                             |    2 +-
 test/src/image-tests.el                            |    2 +-
 test/src/indent-tests.el                           |    2 +-
 test/src/inotify-tests.el                          |    2 +-
 test/src/json-tests.el                             |    2 +-
 test/src/keyboard-tests.el                         |    2 +-
 test/src/keymap-tests.el                           |    2 +-
 test/src/lcms-tests.el                             |    2 +-
 test/src/lread-tests.el                            |    2 +-
 test/src/marker-tests.el                           |    2 +-
 test/src/minibuf-tests.el                          |    2 +-
 test/src/print-tests.el                            |    2 +-
 test/src/process-tests.el                          |    4 +-
 test/src/regex-emacs-tests.el                      |    6 +-
 test/src/search-tests.el                           |    2 +-
 test/src/sqlite-tests.el                           |    2 +-
 test/src/syntax-tests.el                           |    2 +-
 test/src/textprop-tests.el                         |    2 +-
 test/src/thread-tests.el                           |    2 +-
 test/src/timefns-tests.el                          |    2 +-
 test/src/treesit-tests.el                          |  123 +-
 test/src/undo-tests.el                             |    2 +-
 test/src/xdisp-tests.el                            |    2 +-
 test/src/xfaces-tests.el                           |    2 +-
 test/src/xml-tests.el                              |    2 +-
 3260 files changed, 18105 insertions(+), 16373 deletions(-)

diff --git a/.gitattributes b/.gitattributes
index 43b73635a5c..d9288b27d0f 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,6 +1,6 @@
 # Attributes of Emacs files in the Git repository.
 
-# Copyright 2015-2022 Free Software Foundation, Inc.
+# Copyright 2015-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/.gitignore b/.gitignore
index af0ba0eb410..b09a0c030b3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,6 @@
 # Files that Git should ignore in the Emacs source directory.
 
-# Copyright 2009-2022 Free Software Foundation, Inc.
+# Copyright 2009-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3d027171d49..8462fdddc3a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-# Copyright (C) 2021-2022 Free Software Foundation, Inc.
+# Copyright (C) 2021-2023 Free Software Foundation, Inc.
 #
 #  This file is part of GNU Emacs.
 #
diff --git a/CONTRIBUTE b/CONTRIBUTE
index c226645bd7c..674b4e5b18c 100644
--- a/CONTRIBUTE
+++ b/CONTRIBUTE
@@ -1,3 +1,6 @@
+Copyright (C) 2006-2023 Free Software Foundation, Inc.
+See the end of the file for license conditions.
+
 * How developers contribute to GNU Emacs
 
 Here is how software developers can contribute to Emacs.  (Non-developers: see
diff --git a/ChangeLog.1 b/ChangeLog.1
index a8df1c04202..fcfae7c3883 100644
--- a/ChangeLog.1
+++ b/ChangeLog.1
@@ -4302,7 +4302,7 @@
        (install-arch-indep): Don't install-etc for self-contained ns builds.
 
        * configure.in (GCC_TEST_OPTIONS, NON_GCC_TEST_OPTIONS) <darwin>:
-       No longer unconditonally add /sw directories.  (Bug#2280)
+       No longer unconditionally add /sw directories.  (Bug#2280)
 
        * Makefile.in (install-arch-dep): Depend on install-arch-indep.
        (install-arch-indep): Depend on install-leim.
@@ -14700,7 +14700,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/ChangeLog.2 b/ChangeLog.2
index 5d4c1afc369..cde9e63df88 100644
--- a/ChangeLog.2
+++ b/ChangeLog.2
@@ -11843,7 +11843,7 @@
 
 2016-01-05  Alan Mackenzie  <acm@muc.de>
 
-       Make C++ buffers writeable when writing their initial text properties.
+       Make C++ buffers writable when writing their initial text properties.
 
        This is a correction to yesterday's CC Mode patch.
 
@@ -35787,7 +35787,7 @@ See ChangeLog.1 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2015-2022 Free Software Foundation, Inc.
+  Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/ChangeLog.3 b/ChangeLog.3
index 4b3507bae31..3d733804e39 100644
--- a/ChangeLog.3
+++ b/ChangeLog.3
@@ -3928,7 +3928,7 @@
 
        * lisp/follow.el (follow-scroll-down): Do away with the optimization of 
doing
        vertical-motion over only one window.  Instead move over all windows, to
-       checck for being close to point-min, and setting point accordingly.
+       check for being close to point-min, and setting point accordingly.
 
 2021-11-13  Eli Zaretskii  <eliz@gnu.org>
 
@@ -10733,7 +10733,7 @@
 
        Bump lisp/progmodes/project.el version to 0.7.1
 
-       Amont other things exposes the new project-buffers generic function to
+       Among other things exposes the new project-buffers generic function to
        ELPA users.
 
        * lisp/progmodes/project.el (Version): Bump to 0.7.1
@@ -25218,7 +25218,7 @@
 
 2021-05-12  Richard Stallman  <rms@gnu.org>
 
-       Little improvements in rmail.el.  Recognize encryped override headers.
+       Little improvements in rmail.el.  Recognize encrypted override headers.
 
        * lisp/mail/rmail.el (rmail-simplified-subject): Delete `[External] :'.
        (rmail-reply): In encrypted message, search for other header fields
@@ -27333,7 +27333,7 @@
 
 2021-04-24  Glenn Morris  <rgm@gnu.org>
 
-       Simlify top-level Makefile since admin is always included
+       Simplify top-level Makefile since admin is always included
 
        * Makefile.in (clean_dirs, distclean_dirs, maintainer_clean_dirs):
        Add admin directories.
@@ -27668,7 +27668,7 @@
        * lisp/international/mule-cmds.el (ucs-names):
        * lisp/progmodes/ebrowse.el (ebrowse-read):
        * test/src/coding-tests.el (benchmark-decoder): Avoid lowering
-       gc-cons-treshold.
+       gc-cons-threshold.
 
 2021-04-22  Stefan Kangas  <stefan@marxist.se>
 
@@ -46569,7 +46569,7 @@
        Fix syntax of symbol and punctuation characters
 
        * lisp/international/characters.el: Adjust syntax of punctuation
-       and symbol charcaters to follow that of Unicode properties.
+       and symbol characters to follow that of Unicode properties.
        (Bug#44974)
 
 2021-01-02  Andrea Corallo  <akrl@sdf.org>
@@ -50632,7 +50632,7 @@
 
        Allow for adding constraints targeting blocks with multiple predecessors
 
-       This commit remove the limitaiton we had not being able to add
+       This commit remove the limitation we had not being able to add
        constraints derived from conditional branches to basic blocks with
        multiple predecessors.  When this condition is verified we add a new
        dedicated basic block to hold the constraints.
@@ -63457,9 +63457,9 @@
 
 2020-09-30  Lars Ingebrigtsen  <larsi@gnus.org>
 
-       Fix isearch-group-* colors on low-colour displays
+       Fix isearch-group-* colors on low-color displays
 
-       * lisp/isearch.el (isearch-group-1): On low-colour displays, just
+       * lisp/isearch.el (isearch-group-1): On low-color displays, just
        use the normal isearch color (bug#43702).
        (isearch-group-2 etc): Ditto.
 
@@ -75446,7 +75446,7 @@
        According to RFC 3986 it should be percent-encoded and thus should not
        contain spaces. However, there are HTTP server implementation (notably
        nginx) that do not do that. This makes Emacs url-http.el behave like
-       most other HTTP client implementatios. Also remove the stripping of
+       most other HTTP client implementations. Also remove the stripping of
        angle bracket quotes as they are not valid according to the RFCs.
 
 2020-07-19  Satoshi Nakagawa  <ghnacker@gmail.com>  (tiny change)
@@ -87619,7 +87619,7 @@
        itself and reevaluates it in each stop to yield an address.
        We also add a warning (a red bold exclamation mark) on the header line
        when the content of the page doesn't represent the memory location
-       user requested for.  That happends when some error occurs in
+       user requested for.  That happens when some error occurs in
        evaluating the address, and we display the last successfully displayed
        memory page.
        * lisp/progmodes/gdb-mi.el (gdb-memory-address-expression)
@@ -105227,7 +105227,7 @@
        Sometimes, when finding files with icomplete-mode, backward-deleting
        the previous word or sexp (to move up a directory) doesn't actually
        refresh the file list of the new directory.  Forcing redisplay in
-       icomplete-exhibit misteriously fixes the problem.
+       icomplete-exhibit mysteriously fixes the problem.
 
        * lisp/icomplete.el (icomplete-exhibit): Add call to redisplay.
 
@@ -123828,7 +123828,7 @@
 
        * doc/lispref/text.texi (Special Properties): For the hook property
        modification-hooks, state that inhibit-modification-hooks is NOT bound 
to
-       non-nil when calling its functions.  For the hooks insert-in-fron-hooks 
and
+       non-nil when calling its functions.  For the hooks 
insert-in-front-hooks and
        insert-behind-hooks, state that that variable does get bound to non-nil.
 
 2019-06-24  Hong Xu  <hong@topbug.net>
@@ -129725,7 +129725,7 @@
        * lisp/delim-col.el: Use lexical-binding.
 
        * test/lisp/delim-col-tests.el: New file.
-       (delim-col-tests-delimit-colummns-before-after)
+       (delim-col-tests-delimit-columns-before-after)
        (delim-col-tests-delimit-columns)
        (delim-col-tests-delimit-columns-format/nil)
        (delim-col-tests-delimit-columns-format/padding)
@@ -154614,7 +154614,7 @@
        Fixes: Bug#31951
 
        * lisp/server.el (server-save-buffers-kill-terminal): Only pass
-       PRED=t to save-some-bufers if ARG in non-nil.
+       PRED=t to save-some-buffers if ARG in non-nil.
 
 2018-06-27  Vincent Belaïche  <vincentb1@users.sourceforge.net>
 
@@ -156545,7 +156545,7 @@
        Obsolete Flymake's flymake-diagnostic-types-alist
 
        That variable was an association between symbols and properties,
-       effecively duplicating symbol's property lists.  It is simpler to just
+       effectively duplicating symbol's property lists.  It is simpler to just
        put properties on symbols.  Backward compatibility to the old variable
        has been kept.
 
@@ -190693,7 +190693,7 @@
        Support multi-lingual detection of SEE ALSO man sections
 
        * lisp/man.el (Man-see-also-regexp): Add support for SEE ALSO
-       section detection in several langages: French, German, Spanish,
+       section detection in several languages: French, German, Spanish,
        Portuguese, Italian, Polish, Turkish, Japanese, Chinese.  (Bug#28142)
 
 2017-08-26  Paul Eggert  <eggert@cs.ucla.edu>
@@ -221589,7 +221589,7 @@
        (ses-define-if-new-local-printer): New defsubst.
        (ses-center, ses-center-span, ses-dashfill)
        (ses-dashfill-span, ses-tildefill-span): Allow to pass printer
-       as an optional argument to superseed column printer/default
+       as an optional argument to supersede column printer/default
        spreadsheet printer.
        (ses-prin1): New defun.
 
@@ -236927,7 +236927,7 @@ See ChangeLog.2 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2015-2022 Free Software Foundation, Inc.
+  Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/GNUmakefile b/GNUmakefile
index 05edbe099b0..014a98ca32e 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -1,6 +1,6 @@
 # Build Emacs from a fresh tarball or version-control checkout.
 
-# Copyright (C) 2011-2022 Free Software Foundation, Inc.
+# Copyright (C) 2011-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/INSTALL b/INSTALL
index c0323f770ba..344ae39f464 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,5 +1,5 @@
 GNU Emacs Installation Guide
-Copyright (C) 1992, 1994, 1996-1997, 2000-2022 Free Software Foundation,
+Copyright (C) 1992, 1994, 1996-1997, 2000-2023 Free Software Foundation,
 Inc.
 See the end of the file for license conditions.
 
diff --git a/INSTALL.REPO b/INSTALL.REPO
index ef488f3fd9c..dcbbbcb9594 100644
--- a/INSTALL.REPO
+++ b/INSTALL.REPO
@@ -98,7 +98,7 @@ never platform-specific.
 
 
 
-Copyright (C) 2002-2022 Free Software Foundation, Inc.
+Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/Makefile.in b/Makefile.in
index 93609a4e166..2fb7754d683 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1992-2022 Free Software Foundation, Inc.
+# Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/README b/README
index f982c55b4cd..19d5c96e348 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/admin/ChangeLog.1 b/admin/ChangeLog.1
index 9409a608cc2..ed8b148b99b 100644
--- a/admin/ChangeLog.1
+++ b/admin/ChangeLog.1
@@ -2577,7 +2577,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/admin/README b/admin/README
index 89cdbbbfafd..37e55005571 100644
--- a/admin/README
+++ b/admin/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/admin/admin.el b/admin/admin.el
index 6a67f172e2c..90f810b79c6 100644
--- a/admin/admin.el
+++ b/admin/admin.el
@@ -1,6 +1,6 @@
 ;;; admin.el --- utilities for Emacs administration  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -843,8 +843,11 @@ $Date: %s $
       (package-install pkg)
       (require pkg nil t))))
 
+(declare-function org-html-export-as-html "ox-html.el")
 (defvar org-html-postamble)
 (defvar org-html-mathjax-template)
+(defvar htmlize-output-type)
+
 (defun make-news-html-file (root version)
   "Convert the NEWS file into an HTML file."
   (interactive (let ((root
diff --git a/admin/alloc-colors.c b/admin/alloc-colors.c
index b78dd42b7e6..6bd857e393b 100644
--- a/admin/alloc-colors.c
+++ b/admin/alloc-colors.c
@@ -1,6 +1,6 @@
 /* Allocate X colors.  Used for testing with dense colormaps.
 
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/admin/authors.el b/admin/authors.el
index fd8ba9cb01f..147282a99a2 100644
--- a/admin/authors.el
+++ b/admin/authors.el
@@ -1,6 +1,6 @@
 ;;; authors.el --- utility for maintaining Emacs's AUTHORS file  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <gerd@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/admin/automerge b/admin/automerge
index d2c92948e17..b01e866ab61 100755
--- a/admin/automerge
+++ b/admin/automerge
@@ -1,7 +1,7 @@
 #!/bin/bash
 ### automerge - automatically merge the Emacs release branch to master
 
-## Copyright (C) 2018-2022 Free Software Foundation, Inc.
+## Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <rgm@gnu.org>
 ## Maintainer: Stefan Kangas <stefankangas@gmail.com>
diff --git a/admin/build-configs b/admin/build-configs
index 05e70786b30..5447a7a3476 100755
--- a/admin/build-configs
+++ b/admin/build-configs
@@ -1,7 +1,7 @@
 #! /usr/bin/perl
 # Build Emacs in several different configurations.
 
-# Copyright (C) 2001-2022 Free Software Foundation, Inc.
+# Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/charsets/Makefile.in b/admin/charsets/Makefile.in
index 572e352f4ad..4c62bb19dc5 100644
--- a/admin/charsets/Makefile.in
+++ b/admin/charsets/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2015-2022 Free Software Foundation, Inc.
+# Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 #   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/admin/charsets/mapconv b/admin/charsets/mapconv
index 9898d36e743..4a68d3da53b 100755
--- a/admin/charsets/mapconv
+++ b/admin/charsets/mapconv
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# Copyright (C) 2015-2022 Free Software Foundation, Inc.
+# Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 #   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/admin/charsets/mapfiles/README b/admin/charsets/mapfiles/README
index 0380df9ad72..30889c9e9ef 100644
--- a/admin/charsets/mapfiles/README
+++ b/admin/charsets/mapfiles/README
@@ -1,4 +1,4 @@
-Copyright (C) 2009-2022 Free Software Foundation, Inc.
+Copyright (C) 2009-2023 Free Software Foundation, Inc.
 Copyright (C) 2009, 2010, 2011
   National Institute of Advanced Industrial Science and Technology (AIST)
   Registration Number H13PRO009
diff --git a/admin/check-man-pages b/admin/check-man-pages
index c7d781ba3d2..3fb87dd1b89 100755
--- a/admin/check-man-pages
+++ b/admin/check-man-pages
@@ -1,7 +1,7 @@
 #!/bin/bash
 ### check-man-pages - check man pages for errors
 
-## Copyright (C) 2022 Free Software Foundation, Inc.
+## Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ## Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/admin/cus-test.el b/admin/cus-test.el
index 44897cd1060..f07019bb52c 100644
--- a/admin/cus-test.el
+++ b/admin/cus-test.el
@@ -1,6 +1,6 @@
 ;;; cus-test.el --- tests for custom types and load problems  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998, 2000, 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000, 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Markus Rost <rost@math.uni-bielefeld.de>
 ;; Created: 13 Sep 1998
diff --git a/admin/diff-tar-files b/admin/diff-tar-files
index 869c9421502..89abc7fa382 100755
--- a/admin/diff-tar-files
+++ b/admin/diff-tar-files
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-# Copyright (C) 2001-2022 Free Software Foundation, Inc.
+# Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/emacs-shell-lib b/admin/emacs-shell-lib
index 750f81e0577..67f76f61300 100644
--- a/admin/emacs-shell-lib
+++ b/admin/emacs-shell-lib
@@ -1,7 +1,7 @@
 #!/bin/bash
 ### emacs-shell-lib - shared code for Emacs shell scripts
 
-## Copyright (C) 2022 Free Software Foundation, Inc.
+## Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ## Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/admin/emake b/admin/emake
index 09f74107793..0aa1178768d 100755
--- a/admin/emake
+++ b/admin/emake
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-# Copyright (C) 2022 Free Software Foundation, Inc.
+# Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/find-gc.el b/admin/find-gc.el
index 1c3c419c563..7cb319d867a 100644
--- a/admin/find-gc.el
+++ b/admin/find-gc.el
@@ -1,6 +1,6 @@
 ;;; find-gc.el --- detect functions that call the garbage collector  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1992, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
@@ -100,7 +100,7 @@ Also store it in `find-gc-unsafe-list'."
 
 
 
-(defun trace-call-tree (&optional ignored)
+(defun trace-call-tree (&optional _ignored)
   (message "Setting up directories...")
   (setq find-gc-subrs-called nil)
   (let ((case-fold-search nil)
diff --git a/admin/git-bisect-start b/admin/git-bisect-start
index 945d4901c1b..a439ee7fe15 100755
--- a/admin/git-bisect-start
+++ b/admin/git-bisect-start
@@ -4,7 +4,7 @@
 ### the result of merging external trees into the Emacs repository, as
 ### well as certain commits on which Emacs fails to build, are skipped.
 
-## Copyright (C) 2022 Free Software Foundation, Inc.
+## Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
@@ -66,7 +66,7 @@ $REAL_GIT bisect start "$@"
 ## already on master.  In other words, it is the parent of the merge
 ## commit for which 'git rev-list --max-parents=0 <commit>' does not
 ## include ce5584125c44a1a2fbb46e810459c50b227a95e2 (which is the root
-## commit of the Emacs respository).
+## commit of the Emacs repository).
 
 for C in $(cat $0 | grep '^# SKIP-BRANCH ' | sed 's/^# SKIP-BRANCH //')
 do
@@ -82,7 +82,7 @@ done
 # SKIP-BRANCH 58cc931e92ece70c3e64131ee12a799d65409100
 
 ## The list below is the exhaustive list of all commits between Dec 1
-## 2016 and Nov 30 2022 on which building Emacs with the default
+## 2016 and Dec 31 2022 on which building Emacs with the default
 ## options, on a GNU/Linux computer and with GCC, fails.  It is
 ## possible (though unlikely) that building Emacs with non-default
 ## options, with other compilers, or on other platforms, would succeed
@@ -1637,3 +1637,40 @@ $REAL_GIT bisect skip $(cat $0 | grep '^# SKIP-SINGLE ' 
| sed 's/^# SKIP-SINGLE
 # SKIP-SINGLE 4552b01d8c8052f607dca2fcddcf7b2e270f1db6
 # SKIP-SINGLE b6568c1389128d47538b646d940427949ddf58d0
 # SKIP-SINGLE 6d5b34d9de7b2f1b346d9aff123ad20c942166dc
+# SKIP-SINGLE d9d90666f545dc25be63c1b16c030ce1aa96510e
+# SKIP-SINGLE e645bcc26d468ab6b8e16b6160c203c5db70ec6b
+# SKIP-SINGLE 0aea1cf8190aa804a0d11a67b4a3cb4b715ae82d
+# SKIP-SINGLE 7e6d1d1c47196bf1bb5254f5c9014e25bdaf9833
+# SKIP-SINGLE 784e509bded0fe41dd9908022a92c54ac8c21a2c
+# SKIP-SINGLE bc4cbbcc57a56a23c64576c8c23ecf6afb1c747b
+# SKIP-SINGLE 523261b454058d0b28df2c3de1eab55fe378aa69
+# SKIP-SINGLE 29d23b7fa00ed8263baa060d487b526d51fa6986
+# SKIP-SINGLE 9371d488be62a37788b499a7e44b1f5db158e212
+# SKIP-SINGLE 60418e6f09c67924e3e05eb4948e109d8f7c4073
+# SKIP-SINGLE 9153cf8158489d387a6a0d9d0ede9a2528c35f0a
+# SKIP-SINGLE d11e34ce76aac8680337f247419657e042e4cf34
+# SKIP-SINGLE 2541bec21bf3cf090071e434dac170d52394594e
+# SKIP-SINGLE 007e66bccb2cb8382158e5e24727fd1b4478cd69
+# SKIP-SINGLE 753b7a1cff6b8ce2367a94d27b615ac31f1067ba
+# SKIP-SINGLE 7c63b632e4e2241a28f08015cc981a72e18d7867
+# SKIP-SINGLE 91ae9f3d12885373d38c3e8d693f7dc210f9d471
+# SKIP-SINGLE 314cbef84944145e2160736ce32812403ed99cd9
+# SKIP-SINGLE 1a88a28ace24c8b4fb1e4780948b50dd37ada539
+# SKIP-SINGLE 98327e371938033f7ccefd1c5226cd102cb29ad1
+# SKIP-SINGLE 9d814bea4600ac28dcdbf9caf386467551d7d9be
+# SKIP-SINGLE 73769dc2b872441eb0b8565e1090e97fc0b5d521
+# SKIP-SINGLE 283043621756fd004906ecdd5ba829a47cb3fc57
+# SKIP-SINGLE 05ece1eb8b7ce28d366d02df89449d453be8d37e
+# SKIP-SINGLE 248c13dcfe1b9618811a6fe67e967b25b1a8f139
+# SKIP-SINGLE 38c35bf0f6a938001dfecbe439addf8fb62897c6
+# SKIP-SINGLE 9065d745151e1995b80a1f4d5a04e2af111ad928
+# SKIP-SINGLE e78e69b33189c653d1588b810283969ac3cca137
+# SKIP-SINGLE 909091d7578b7225601b202fb9257dedae879e9a
+# SKIP-SINGLE 706ed85285515e7047e16608815c1d02d4907b07
+# SKIP-SINGLE 7013b0179cbe5cce19e114d7673770d1425d3005
+# SKIP-SINGLE 2de25accaf31aef643557ec476041c770fc7ac15
+# SKIP-SINGLE 2b1fdbffcb595bcd72fa9aa3db674c6985042bcb
+# SKIP-SINGLE 1480865e641b06d570f5ab56011f8e3e5481da7d
+# SKIP-SINGLE 8c13e8497821881b5197a1717e9e53b9991859d0
+# SKIP-SINGLE a6db8464e150c49724c71c5969b97f205ee2dec5
+# SKIP-SINGLE cfbfd393b450d4eb7ac0b7922b44208688553c9e
diff --git a/admin/gitmerge.el b/admin/gitmerge.el
index ddd3e184424..396d2fe2ac5 100644
--- a/admin/gitmerge.el
+++ b/admin/gitmerge.el
@@ -1,6 +1,6 @@
 ;;; gitmerge.el --- help merge one Emacs branch into another  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Authors: David Engster <deng@randomsample.de>
 ;;          Stefan Monnier <monnier@iro.umontreal.ca>
@@ -293,7 +293,7 @@ should not be skipped."
   "Try to resolve conflicts in FILE with smerge.
 Returns non-nil if conflicts remain."
   (unless (file-exists-p file) (error "Gitmerge-resolve: Can't find %s" file))
-  (with-demoted-errors
+  (with-demoted-errors "Error: %S"
     (let ((exists (find-buffer-visiting file)))
       (with-current-buffer (let ((enable-local-variables :safe)
                                  (enable-local-eval nil))
diff --git a/admin/grammars/Makefile.in b/admin/grammars/Makefile.in
index 178c79b7a02..04a5e0d7205 100644
--- a/admin/grammars/Makefile.in
+++ b/admin/grammars/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-## Copyright (C) 2013-2022 Free Software Foundation, Inc.
+## Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
diff --git a/admin/grammars/c.by b/admin/grammars/c.by
index 2395e747fd6..a152e3d8696 100644
--- a/admin/grammars/c.by
+++ b/admin/grammars/c.by
@@ -1,5 +1,5 @@
 ;;; c.by -- LL grammar for C/C++ language specification
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;;         David Ponce <david@dponce.com>
diff --git a/admin/grammars/grammar.wy b/admin/grammars/grammar.wy
index 1180dc28eb7..1821948ffcb 100644
--- a/admin/grammars/grammar.wy
+++ b/admin/grammars/grammar.wy
@@ -1,6 +1,6 @@
 ;;; semantic-grammar.wy -- LALR grammar of Semantic input grammars
 ;;
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: David Ponce <david@dponce.com>
 ;; Created: 26 Aug 2002
diff --git a/admin/grammars/java-tags.wy b/admin/grammars/java-tags.wy
index 138adb2082c..578172c0b7b 100644
--- a/admin/grammars/java-tags.wy
+++ b/admin/grammars/java-tags.wy
@@ -1,6 +1,6 @@
 ;;; java-tags.wy -- Semantic LALR grammar for Java
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: David Ponce <david@dponce.com>
 ;; Created: 26 Aug 2002
diff --git a/admin/grammars/js.wy b/admin/grammars/js.wy
index 2357153ccb5..fc68471face 100644
--- a/admin/grammars/js.wy
+++ b/admin/grammars/js.wy
@@ -1,6 +1,6 @@
 ;;; javascript-jv.wy -- LALR grammar for Javascript
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1998-2011 Ecma International.
 
 ;; Author: Joakim Verona
diff --git a/admin/grammars/make.by b/admin/grammars/make.by
index 193ad77fa98..7bee4ed0ab4 100644
--- a/admin/grammars/make.by
+++ b/admin/grammars/make.by
@@ -1,6 +1,6 @@
 ;;; make.by -- BY notation for Makefiles.
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;;         David Ponce <david@dponce.com>
diff --git a/admin/grammars/python.wy b/admin/grammars/python.wy
index 17d87e711a2..081a4d7ea3f 100644
--- a/admin/grammars/python.wy
+++ b/admin/grammars/python.wy
@@ -1,6 +1,6 @@
 ;;; python.wy -- LALR grammar for Python
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 ;; Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
 ;; 2009, 2010 Python Software Foundation; All Rights Reserved
 
diff --git a/admin/grammars/scheme.by b/admin/grammars/scheme.by
index fcf3007ae7f..288557db54e 100644
--- a/admin/grammars/scheme.by
+++ b/admin/grammars/scheme.by
@@ -1,6 +1,6 @@
 ;;; scheme.by -- Scheme BNF language specification
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/admin/grammars/srecode-template.wy 
b/admin/grammars/srecode-template.wy
index 7ba73d2921a..957c00ab1b9 100644
--- a/admin/grammars/srecode-template.wy
+++ b/admin/grammars/srecode-template.wy
@@ -1,6 +1,6 @@
 ;;; srecode-template.wy --- Semantic Recoder Template parser
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/admin/last-chance.el b/admin/last-chance.el
index 45d470cacde..a9aaa400b75 100644
--- a/admin/last-chance.el
+++ b/admin/last-chance.el
@@ -1,6 +1,6 @@
 ;;; last-chance.el --- dangling deterrence     -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Thien-Thi Nguyen <ttn@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/admin/make-emacs b/admin/make-emacs
index 06d56080921..f31c2383fc0 100755
--- a/admin/make-emacs
+++ b/admin/make-emacs
@@ -2,7 +2,7 @@
 # Build Emacs with various options for profiling, debugging,
 # with and without warnings enabled etc.
 
-# Copyright (C) 2001-2022 Free Software Foundation, Inc.
+# Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/make-manuals b/admin/make-manuals
index a252bf20f1e..f1a46861533 100755
--- a/admin/make-manuals
+++ b/admin/make-manuals
@@ -1,7 +1,7 @@
 #!/bin/bash
 ### make-manuals - create the Emacs manuals to upload to the gnu.org website
 
-## Copyright 2018-2022 Free Software Foundation, Inc.
+## Copyright 2018-2023 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <rgm@gnu.org>
 ## Maintainer: emacs-devel@gnu.org
diff --git a/admin/merge-gnulib b/admin/merge-gnulib
index 99f834b0ae3..f47c5e6e8d4 100755
--- a/admin/merge-gnulib
+++ b/admin/merge-gnulib
@@ -4,7 +4,7 @@
 #
 #      admin/merge-gnulib
 
-# Copyright 2012-2022 Free Software Foundation, Inc.
+# Copyright 2012-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/merge-pkg-config b/admin/merge-pkg-config
index 2f785729a6d..ba3c48b546b 100755
--- a/admin/merge-pkg-config
+++ b/admin/merge-pkg-config
@@ -4,7 +4,7 @@
 #
 #      admin/merge-pkg-config
 
-# Copyright 2014-2022 Free Software Foundation, Inc.
+# Copyright 2014-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/notes/copyright b/admin/notes/copyright
index 6f7cb153345..ae09707bac8 100644
--- a/admin/notes/copyright
+++ b/admin/notes/copyright
@@ -1,4 +1,4 @@
-Copyright (C) 2007-2022 Free Software Foundation, Inc.
+Copyright (C) 2007-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/admin/notes/emba b/admin/notes/emba
index 4c8c27dfeaa..564cc3c54ac 100644
--- a/admin/notes/emba
+++ b/admin/notes/emba
@@ -1,6 +1,6 @@
 -*- mode: outline; coding: utf-8 -*-
 
-Copyright (C) 2019-2022 Free Software Foundation, Inc.
+Copyright (C) 2019-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 NOTES FOR EMACS CONTINUOUS BUILD ON EMBA
diff --git a/admin/notes/hydra b/admin/notes/hydra
index 0987e7be820..12d3f356020 100644
--- a/admin/notes/hydra
+++ b/admin/notes/hydra
@@ -1,6 +1,6 @@
 -*- mode: outline; coding: utf-8 -*-
 
-Copyright (C) 2013-2022 Free Software Foundation, Inc.
+Copyright (C) 2013-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 NOTES FOR EMACS CONTINUOUS BUILD ON HYDRA
diff --git a/admin/notes/multi-tty b/admin/notes/multi-tty
index 84bc1b77d4e..d0b63f166fd 100644
--- a/admin/notes/multi-tty
+++ b/admin/notes/multi-tty
@@ -1,6 +1,6 @@
 -*- coding: utf-8; mode: text; -*-
 
-Copyright (C) 2007-2022 Free Software Foundation, Inc.
+Copyright (C) 2007-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 From README.multi-tty in the multi-tty branch.
diff --git a/admin/notes/tree-sitter/html-manual/Accessing-Node.html 
b/admin/notes/tree-sitter/html-manual/Accessing-Node.html
index 00ac63b8339..9e7a4b68299 100644
--- a/admin/notes/tree-sitter/html-manual/Accessing-Node.html
+++ b/admin/notes/tree-sitter/html-manual/Accessing-Node.html
@@ -6,8 +6,7 @@
 <!-- This is the GNU Emacs Lisp Reference Manual
 corresponding to Emacs version 29.0.50.
 
-Copyright © 1990-1996, 1998-2022 Free Software Foundation,
-Inc.
+Copyright © 1990-1996, 1998-2023 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
diff --git a/admin/notes/tree-sitter/html-manual/Language-Definitions.html 
b/admin/notes/tree-sitter/html-manual/Language-Definitions.html
index 6dd589f8259..6c17e8c3344 100644
--- a/admin/notes/tree-sitter/html-manual/Language-Definitions.html
+++ b/admin/notes/tree-sitter/html-manual/Language-Definitions.html
@@ -6,8 +6,7 @@
 <!-- This is the GNU Emacs Lisp Reference Manual
 corresponding to Emacs version 29.0.50.
 
-Copyright © 1990-1996, 1998-2022 Free Software Foundation,
-Inc.
+Copyright © 1990-1996, 1998-2023 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
diff --git a/admin/notes/tree-sitter/html-manual/Multiple-Languages.html 
b/admin/notes/tree-sitter/html-manual/Multiple-Languages.html
index 46985649a82..65507687d51 100644
--- a/admin/notes/tree-sitter/html-manual/Multiple-Languages.html
+++ b/admin/notes/tree-sitter/html-manual/Multiple-Languages.html
@@ -6,8 +6,7 @@
 <!-- This is the GNU Emacs Lisp Reference Manual
 corresponding to Emacs version 29.0.50.
 
-Copyright © 1990-1996, 1998-2022 Free Software Foundation,
-Inc.
+Copyright © 1990-1996, 1998-2023 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
diff --git 
a/admin/notes/tree-sitter/html-manual/Parser_002dbased-Font-Lock.html 
b/admin/notes/tree-sitter/html-manual/Parser_002dbased-Font-Lock.html
index e04a730b05c..670f235bd20 100644
--- a/admin/notes/tree-sitter/html-manual/Parser_002dbased-Font-Lock.html
+++ b/admin/notes/tree-sitter/html-manual/Parser_002dbased-Font-Lock.html
@@ -6,8 +6,7 @@
 <!-- This is the GNU Emacs Lisp Reference Manual
 corresponding to Emacs version 29.0.50.
 
-Copyright © 1990-1996, 1998-2022 Free Software Foundation,
-Inc.
+Copyright © 1990-1996, 1998-2023 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
diff --git 
a/admin/notes/tree-sitter/html-manual/Parser_002dbased-Indentation.html 
b/admin/notes/tree-sitter/html-manual/Parser_002dbased-Indentation.html
index 95005de6d11..cf1257f3102 100644
--- a/admin/notes/tree-sitter/html-manual/Parser_002dbased-Indentation.html
+++ b/admin/notes/tree-sitter/html-manual/Parser_002dbased-Indentation.html
@@ -6,8 +6,7 @@
 <!-- This is the GNU Emacs Lisp Reference Manual
 corresponding to Emacs version 29.0.50.
 
-Copyright © 1990-1996, 1998-2022 Free Software Foundation,
-Inc.
+Copyright © 1990-1996, 1998-2023 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -240,7 +239,7 @@ expression <code>treesit-comment-start</code> (see <a 
href="Tree_002dsitter-majo
 the comment node.
 </p>
 </dd>
-<dt 
id='index-coment_002dstart_002dskip'><span><code>coment-start-skip</code><a 
href='#index-coment_002dstart_002dskip' class='copiable-anchor'> 
&para;</a></span></dt>
+<dt 
id='index-coment_002dstart_002dskip'><span><code>comment-start-skip</code><a 
href='#index-coment_002dstart_002dskip' class='copiable-anchor'> 
&para;</a></span></dt>
 <dd><p>This anchor is a function that is called with 3 arguments: 
<var>node</var>,
 <var>parent</var>, and <var>bol</var>, and returns the position after the
 comment-start token and any whitespace characters following that
diff --git a/admin/notes/tree-sitter/html-manual/Parsing-Program-Source.html 
b/admin/notes/tree-sitter/html-manual/Parsing-Program-Source.html
index a0b5775f11f..58f6b4e9d5a 100644
--- a/admin/notes/tree-sitter/html-manual/Parsing-Program-Source.html
+++ b/admin/notes/tree-sitter/html-manual/Parsing-Program-Source.html
@@ -6,8 +6,7 @@
 <!-- This is the GNU Emacs Lisp Reference Manual
 corresponding to Emacs version 29.0.50.
 
-Copyright © 1990-1996, 1998-2022 Free Software Foundation,
-Inc.
+Copyright © 1990-1996, 1998-2023 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
diff --git a/admin/notes/tree-sitter/html-manual/Pattern-Matching.html 
b/admin/notes/tree-sitter/html-manual/Pattern-Matching.html
index 21eb4702b12..9ef536b79dd 100644
--- a/admin/notes/tree-sitter/html-manual/Pattern-Matching.html
+++ b/admin/notes/tree-sitter/html-manual/Pattern-Matching.html
@@ -6,8 +6,7 @@
 <!-- This is the GNU Emacs Lisp Reference Manual
 corresponding to Emacs version 29.0.50.
 
-Copyright © 1990-1996, 1998-2022 Free Software Foundation,
-Inc.
+Copyright © 1990-1996, 1998-2023 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
diff --git a/admin/notes/tree-sitter/html-manual/Retrieving-Node.html 
b/admin/notes/tree-sitter/html-manual/Retrieving-Node.html
index 0c086dab91d..58e87e8df7f 100644
--- a/admin/notes/tree-sitter/html-manual/Retrieving-Node.html
+++ b/admin/notes/tree-sitter/html-manual/Retrieving-Node.html
@@ -6,8 +6,7 @@
 <!-- This is the GNU Emacs Lisp Reference Manual
 corresponding to Emacs version 29.0.50.
 
-Copyright © 1990-1996, 1998-2022 Free Software Foundation,
-Inc.
+Copyright © 1990-1996, 1998-2023 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
diff --git a/admin/notes/tree-sitter/html-manual/Tree_002dsitter-C-API.html 
b/admin/notes/tree-sitter/html-manual/Tree_002dsitter-C-API.html
index 29d51eecf73..0c827b3e755 100644
--- a/admin/notes/tree-sitter/html-manual/Tree_002dsitter-C-API.html
+++ b/admin/notes/tree-sitter/html-manual/Tree_002dsitter-C-API.html
@@ -6,8 +6,7 @@
 <!-- This is the GNU Emacs Lisp Reference Manual
 corresponding to Emacs version 29.0.50.
 
-Copyright © 1990-1996, 1998-2022 Free Software Foundation,
-Inc.
+Copyright © 1990-1996, 1998-2023 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
diff --git a/admin/notes/tree-sitter/html-manual/Using-Parser.html 
b/admin/notes/tree-sitter/html-manual/Using-Parser.html
index a4f31f90897..fd8fc482f46 100644
--- a/admin/notes/tree-sitter/html-manual/Using-Parser.html
+++ b/admin/notes/tree-sitter/html-manual/Using-Parser.html
@@ -6,8 +6,7 @@
 <!-- This is the GNU Emacs Lisp Reference Manual
 corresponding to Emacs version 29.0.50.
 
-Copyright © 1990-1996, 1998-2022 Free Software Foundation,
-Inc.
+Copyright © 1990-1996, 1998-2023 Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
diff --git a/admin/notes/tree-sitter/html-manual/manual.css 
b/admin/notes/tree-sitter/html-manual/manual.css
index 5a6790a3458..c03e0d37009 100644
--- a/admin/notes/tree-sitter/html-manual/manual.css
+++ b/admin/notes/tree-sitter/html-manual/manual.css
@@ -1,6 +1,6 @@
 /* Style-sheet to use for Emacs manuals  */
 
-/* Copyright (C) 2013-2014 Free Software Foundation, Inc.
+/* Copyright (C) 2013-2014, 2023 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff --git a/admin/notes/unicode b/admin/notes/unicode
index 014bfb9b0d5..0e000365da7 100644
--- a/admin/notes/unicode
+++ b/admin/notes/unicode
@@ -1,6 +1,6 @@
                                             -*-mode: text; coding: utf-8;-*-
 
-Copyright (C) 2002-2022 Free Software Foundation, Inc.
+Copyright (C) 2002-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Importing a new Unicode Standard version into Emacs
diff --git a/admin/notes/www b/admin/notes/www
index d1a8f0637ff..d6e15ffe955 100644
--- a/admin/notes/www
+++ b/admin/notes/www
@@ -1,6 +1,6 @@
 -*- outline -*-
 
-Copyright (C) 2013-2022 Free Software Foundation, Inc.
+Copyright (C) 2013-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 NOTES FOR EMACS WWW PAGES
diff --git a/admin/notes/years b/admin/notes/years
index 3df8139f9b9..113e6608d3f 100644
--- a/admin/notes/years
+++ b/admin/notes/years
@@ -10,9 +10,10 @@ results for plausibility, then commit them.
 A few known problems with the build-aux/update-copyright script:
 
   . it doesn't update config.bat, msdos/depfiles.bat,
-    nt/configure.bat, etc/tutorials/TUTORIAL.cn, and
-    etc/tutorials/TUTORIAL.he because the "Copyright" statement begins
-    in these files after a prefix that is more than 5 characters long
+    nt/configure.bat, etc/tutorials/TUTORIAL.cn,
+    etc/tutorials/TUTORIAL.el_GR, and etc/tutorials/TUTORIAL.he
+    because the "Copyright" statement begins in these files
+    after a prefix that is more than 5 characters long
   . it doesn't update etc/tutorials/TUTORIAL.nl and
     etc/tutorials/TUTORIAL.ro for some reason
   . it doesn't update the second Copyright notice, the one that gets
diff --git a/admin/nt/README-UNDUMP.W32 b/admin/nt/README-UNDUMP.W32
index c42b7b64940..b151df1eb0f 100644
--- a/admin/nt/README-UNDUMP.W32
+++ b/admin/nt/README-UNDUMP.W32
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
                           Emacs for Windows
diff --git a/admin/nt/dist-build/README-windows-binaries 
b/admin/nt/dist-build/README-windows-binaries
index 475612ac80e..f53558960c4 100644
--- a/admin/nt/dist-build/README-windows-binaries
+++ b/admin/nt/dist-build/README-windows-binaries
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
                      Precompiled Distributions of
diff --git a/admin/nt/dist-build/build-dep-zips.py 
b/admin/nt/dist-build/build-dep-zips.py
index a1d9afa517f..71105a071ec 100755
--- a/admin/nt/dist-build/build-dep-zips.py
+++ b/admin/nt/dist-build/build-dep-zips.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python3
 
-## Copyright (C) 2017-2022 Free Software Foundation, Inc.
+## Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
diff --git a/admin/nt/dist-build/build-zips.sh 
b/admin/nt/dist-build/build-zips.sh
index 39ac1fde604..28aee4a0b67 100755
--- a/admin/nt/dist-build/build-zips.sh
+++ b/admin/nt/dist-build/build-zips.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-## Copyright (C) 2017-2022 Free Software Foundation, Inc.
+## Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
diff --git a/admin/quick-install-emacs b/admin/quick-install-emacs
index b0a1d342518..4ca8cee5d7a 100755
--- a/admin/quick-install-emacs
+++ b/admin/quick-install-emacs
@@ -1,7 +1,7 @@
 #!/bin/sh
 ### quick-install-emacs --- do a halfway-decent job of installing emacs quickly
 
-## Copyright (C) 2001-2022 Free Software Foundation, Inc.
+## Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ## Author: Miles Bader <miles@gnu.org>
 
diff --git a/admin/unidata/Makefile.in b/admin/unidata/Makefile.in
index f3e653879c0..cccd85213f1 100644
--- a/admin/unidata/Makefile.in
+++ b/admin/unidata/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2012-2022 Free Software Foundation, Inc.
+# Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 # Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
 #   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/admin/unidata/blocks.awk b/admin/unidata/blocks.awk
index 48a14ec3ca9..80ce7478a45 100755
--- a/admin/unidata/blocks.awk
+++ b/admin/unidata/blocks.awk
@@ -1,6 +1,6 @@
 #!/usr/bin/awk -f
 
-## Copyright (C) 2015-2022 Free Software Foundation, Inc.
+## Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <rgm@gnu.org>
 ## Maintainer: emacs-devel@gnu.org
diff --git a/admin/unidata/emoji-zwj.awk b/admin/unidata/emoji-zwj.awk
index 3d605d5d640..7d2ff6cb900 100644
--- a/admin/unidata/emoji-zwj.awk
+++ b/admin/unidata/emoji-zwj.awk
@@ -1,6 +1,6 @@
 #!/usr/bin/awk -f
 
-## Copyright (C) 2020, 2022 Free Software Foundation, Inc.
+## Copyright (C) 2020, 2022-2023 Free Software Foundation, Inc.
 
 ## Author: Robert Pluim <rpluim@gmail.com>
 
diff --git a/admin/unidata/unidata-gen.el b/admin/unidata/unidata-gen.el
index 5927760ad58..1ad347c9425 100644
--- a/admin/unidata/unidata-gen.el
+++ b/admin/unidata/unidata-gen.el
@@ -1,6 +1,6 @@
 ;;; unidata-gen.el --- Create files containing character property data  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/admin/unidata/uvs.el b/admin/unidata/uvs.el
index 5a4b8e71a2d..70f6d323f12 100644
--- a/admin/unidata/uvs.el
+++ b/admin/unidata/uvs.el
@@ -1,6 +1,6 @@
 ;;; uvs.el --- utility for UVS (format 14) cmap subtables in OpenType fonts  
-*- lexical-binding:t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
 
diff --git a/admin/update-copyright b/admin/update-copyright
index 8b7c05749d0..df6f6c7d487 100755
--- a/admin/update-copyright
+++ b/admin/update-copyright
@@ -7,7 +7,7 @@
 # By default, this script uses the local-time calendar year.
 # Set the UPDATE_COPYRIGHT_YEAR environment variable to override the default.
 
-# Copyright 2013-2022 Free Software Foundation, Inc.
+# Copyright 2013-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/update_autogen b/admin/update_autogen
index 55e11be95c7..5088bc674ca 100755
--- a/admin/update_autogen
+++ b/admin/update_autogen
@@ -1,7 +1,7 @@
 #!/usr/bin/env bash
 ### update_autogen - update some auto-generated files in the Emacs tree
 
-## Copyright (C) 2011-2022 Free Software Foundation, Inc.
+## Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <rgm@gnu.org>
 ## Maintainer: Stefan Kangas <stefankangas@gmail.com>
diff --git a/admin/upload-manuals b/admin/upload-manuals
index 04f7c3acc72..6f44456efb8 100755
--- a/admin/upload-manuals
+++ b/admin/upload-manuals
@@ -2,7 +2,7 @@
 
 ### upload-manuals - upload the Emacs manuals to the gnu.org website
 
-## Copyright 2018-2022 Free Software Foundation, Inc.
+## Copyright 2018-2023 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <rgm@gnu.org>
 ## Maintainer: emacs-devel@gnu.org
diff --git a/autogen.sh b/autogen.sh
index 041468edcd9..af4c2ad14df 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 ### autogen.sh - tool to help build Emacs from a repository checkout
 
-## Copyright (C) 2011-2022 Free Software Foundation, Inc.
+## Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <rgm@gnu.org>
 ## Maintainer: emacs-devel@gnu.org
diff --git a/build-aux/config.guess b/build-aux/config.guess
index 980b0208381..b30b9fdc8ef 100755
--- a/build-aux/config.guess
+++ b/build-aux/config.guess
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2022 Free Software Foundation, Inc.
+#   Copyright 1992-2023 Free Software Foundation, Inc.
 
 # shellcheck disable=SC2006,SC2268 # see below for rationale
 
diff --git a/build-aux/config.sub b/build-aux/config.sub
index baf1512b3c0..9e118bdee3c 100755
--- a/build-aux/config.sub
+++ b/build-aux/config.sub
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2022 Free Software Foundation, Inc.
+#   Copyright 1992-2023 Free Software Foundation, Inc.
 
 # shellcheck disable=SC2006,SC2268 # see below for rationale
 
diff --git a/build-aux/git-hooks/commit-msg b/build-aux/git-hooks/commit-msg
index bb4f358c5e4..d0578bcfb46 100755
--- a/build-aux/git-hooks/commit-msg
+++ b/build-aux/git-hooks/commit-msg
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Check the format of GNU Emacs change log entries.
 
-# Copyright 2014-2022 Free Software Foundation, Inc.
+# Copyright 2014-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/build-aux/git-hooks/pre-commit b/build-aux/git-hooks/pre-commit
index 49bf05f2d9f..f89d9ca8f8c 100755
--- a/build-aux/git-hooks/pre-commit
+++ b/build-aux/git-hooks/pre-commit
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Check file names in git commits for GNU Emacs.
 
-# Copyright 2014-2022 Free Software Foundation, Inc.
+# Copyright 2014-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/build-aux/git-hooks/prepare-commit-msg 
b/build-aux/git-hooks/prepare-commit-msg
index 7dc36f22193..7802dffda43 100755
--- a/build-aux/git-hooks/prepare-commit-msg
+++ b/build-aux/git-hooks/prepare-commit-msg
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Check the format of GNU Emacs change log entries.
 
-# Copyright 2019-2022 Free Software Foundation, Inc.
+# Copyright 2019-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
index 82d9f973366..4678bad1050 100755
--- a/build-aux/gitlog-to-changelog
+++ b/build-aux/gitlog-to-changelog
@@ -3,7 +3,7 @@
 
 # Convert git log output to ChangeLog format.
 
-# Copyright (C) 2008-2022 Free Software Foundation, Inc.
+# Copyright (C) 2008-2023 Free Software Foundation, Inc.
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/build-aux/gitlog-to-emacslog b/build-aux/gitlog-to-emacslog
index 2ea20261718..73bf973dbb1 100755
--- a/build-aux/gitlog-to-emacslog
+++ b/build-aux/gitlog-to-emacslog
@@ -2,7 +2,7 @@
 
 # Convert git log output to ChangeLog format for GNU Emacs.
 
-# Copyright (C) 2014-2022 Free Software Foundation, Inc.
+# Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 # Author: Paul Eggert
 
diff --git a/build-aux/make-info-dir b/build-aux/make-info-dir
index c29ea5088b7..3490b7a31f9 100755
--- a/build-aux/make-info-dir
+++ b/build-aux/make-info-dir
@@ -2,7 +2,7 @@
 
 ### make-info-dir - create info/dir, for systems without install-info
 
-## Copyright (C) 2013-2022 Free Software Foundation, Inc.
+## Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <rgm@gnu.org>
 ## Maintainer: emacs-devel@gnu.org
diff --git a/build-aux/move-if-change b/build-aux/move-if-change
index 9f7379a603b..93839108fd9 100755
--- a/build-aux/move-if-change
+++ b/build-aux/move-if-change
@@ -8,7 +8,7 @@ VERSION='2018-03-07 03:47'; # UTC
 # If you change this file with Emacs, please let the write hook
 # do its job.  Otherwise, update this string manually.
 
-# Copyright (C) 2002-2022 Free Software Foundation, Inc.
+# Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/build-aux/msys-to-w32 b/build-aux/msys-to-w32
index 2e5df8252d7..53bc60da55e 100755
--- a/build-aux/msys-to-w32
+++ b/build-aux/msys-to-w32
@@ -2,7 +2,7 @@
 # Convert a MSYS path list to Windows-native format.
 # Status is zero if successful, nonzero otherwise.
 
-# Copyright (C) 2013-2022 Free Software Foundation, Inc.
+# Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/build-aux/update-copyright b/build-aux/update-copyright
index 81b691e8570..ce919bac727 100755
--- a/build-aux/update-copyright
+++ b/build-aux/update-copyright
@@ -3,7 +3,7 @@
 
 # Update an FSF copyright year list to include the current year.
 
-# Copyright (C) 2009-2022 Free Software Foundation, Inc.
+# Copyright (C) 2009-2023 Free Software Foundation, Inc.
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/build-aux/update-subdirs b/build-aux/update-subdirs
index 95cf06bb5c2..275b2d37cac 100755
--- a/build-aux/update-subdirs
+++ b/build-aux/update-subdirs
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Write into $1/subdirs.el a list of subdirs of directory $1.
 
-# Copyright (C) 1994-1995, 1997, 1999, 2001-2022 Free Software
+# Copyright (C) 1994-1995, 1997, 1999, 2001-2023 Free Software
 # Foundation, Inc.
 
 # This file is part of GNU Emacs.
diff --git a/config.bat b/config.bat
index 7f2060ce000..edea9610803 100644
--- a/config.bat
+++ b/config.bat
@@ -1,7 +1,7 @@
 @echo off
 rem   ----------------------------------------------------------------------
 rem   Configuration script for MSDOS
-rem   Copyright (C) 1994-1999, 2001-2022 Free Software Foundation, Inc.
+rem   Copyright (C) 1994-1999, 2001-2023 Free Software Foundation, Inc.
 
 rem   This file is part of GNU Emacs.
 
diff --git a/configure.ac b/configure.ac
index 5bd6645a256..7833ed3e464 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@ dnl     autoconf
 dnl in the directory containing this script.
 dnl If you changed any AC_DEFINES, also run autoheader.
 dnl
-dnl Copyright (C) 1994-1996, 1999-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 1994-1996, 1999-2023 Free Software Foundation, Inc.
 dnl
 dnl  This file is part of GNU Emacs.
 dnl
@@ -2695,39 +2695,6 @@ if test "${HAVE_X11}" = "yes"; then
     export LD_RUN_PATH
   fi
 
-  if test "${opsys}" = "gnu-linux"; then
-    AC_CACHE_CHECK([whether X on GNU/Linux needs -b to link], 
[emacs_cv_b_link],
-    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
-     [[XOpenDisplay ("foo");]])],
-     [xgnu_linux_first_failure=no],
-     [xgnu_linux_first_failure=yes])
-    if test "${xgnu_linux_first_failure}" = "yes"; then
-      OLD_CPPFLAGS="$CPPFLAGS"
-      OLD_LIBS="$LIBS"
-      CPPFLAGS="$CPPFLAGS -b i486-linuxaout"
-      LIBS="$LIBS -b i486-linuxaout"
-      AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
-       [[XOpenDisplay ("foo");]])],
-       [xgnu_linux_second_failure=no],
-       [xgnu_linux_second_failure=yes])
-      if test "${xgnu_linux_second_failure}" = "yes"; then
-       # If we get the same failure with -b, there is no use adding -b.
-       # So leave it out.  This plays safe.
-        emacs_cv_b_link=no
-      else
-        emacs_cv_b_link=yes
-      fi
-      CPPFLAGS=$OLD_CPPFLAGS
-      LIBS=$OLD_LIBS
-    else
-      emacs_cv_b_link=no
-    fi])
-    if test "x$emacs_cv_b_link" = xyes ; then
-      LD_SWITCH_X_SITE="$LD_SWITCH_X_SITE -b i486-linuxaout"
-      C_SWITCH_X_SITE="$C_SWITCH_X_SITE -b i486-linuxaout"
-    fi
-  fi
-
   # Reportedly, some broken Solaris systems have XKBlib.h but are missing
   # header files included from there.
   AC_CACHE_CHECK([for Xkb], [emacs_cv_xkb],
@@ -3222,6 +3189,7 @@ AC_SUBST([JSON_OBJ])
 
 HAVE_TREE_SITTER=no
 TREE_SITTER_OBJ=
+NEED_DYNLIB=no
 
 if test "${with_tree_sitter}" != "no"; then
    dnl Tree-sitter 0.20.2 added support to change the malloc it uses
@@ -3247,6 +3215,7 @@ if test "${with_tree_sitter}" != "no"; then
       LIBS=$OLD_LIBS
       if test "$ac_cv_func_ts_set_allocator" = yes; then
         AC_DEFINE(HAVE_TREE_SITTER, 1, [Define if using tree-sitter.])
+       NEED_DYNLIB=yes
       else
         AC_MSG_ERROR([Tree-sitter library exists but its version is too old]);
         TREE_SITTER_CFLAGS=
@@ -4145,7 +4114,6 @@ AC_SUBST(DYNAMIC_LIB_SECONDARY_SUFFIX)
 LIBMODULES=
 HAVE_MODULES=no
 MODULES_OBJ=
-NEED_DYNLIB=no
 MODULES_SUFFIX="${DYNAMIC_LIB_SUFFIX}"
 MODULES_SECONDARY_SUFFIX="${DYNAMIC_LIB_SECONDARY_SUFFIX}"
 
@@ -5241,6 +5209,7 @@ AC_CACHE_CHECK([whether signals can be handled on 
alternate stack],
               [emacs_cv_alternate_stack],
   [AC_COMPILE_IFELSE(
      [AC_LANG_PROGRAM([[#include <signal.h>
+                       #include <stdlib.h>
                      ]],
                      [[stack_t ss;
                        struct sigaction sa;
@@ -6130,7 +6099,7 @@ fi
 
 version=$PACKAGE_VERSION
 
-copyright="Copyright (C) 2022 Free Software Foundation, Inc."
+copyright="Copyright (C) 2023 Free Software Foundation, Inc."
 AC_DEFINE_UNQUOTED([COPYRIGHT], ["$copyright"],
   [Short copyright string for this version of Emacs.])
 AC_SUBST([copyright])
diff --git a/doc/emacs/ChangeLog.1 b/doc/emacs/ChangeLog.1
index 6669e28e6b5..16afa073169 100644
--- a/doc/emacs/ChangeLog.1
+++ b/doc/emacs/ChangeLog.1
@@ -10919,7 +10919,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/emacs/Makefile.in b/doc/emacs/Makefile.in
index a24c03ead3b..161bdcb1c59 100644
--- a/doc/emacs/Makefile.in
+++ b/doc/emacs/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1994, 1996-2022 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1996-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/emacs/abbrevs.texi b/doc/emacs/abbrevs.texi
index 77f40c7df2d..3678377e9b5 100644
--- a/doc/emacs/abbrevs.texi
+++ b/doc/emacs/abbrevs.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Abbrevs
diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi
index f0a45fd3151..d61809fa58f 100644
--- a/doc/emacs/ack.texi
+++ b/doc/emacs/ack.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 1994--1997, 1999--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1994--1997, 1999--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @node Acknowledgments
diff --git a/doc/emacs/anti.texi b/doc/emacs/anti.texi
index b86037f2a63..c46110a530d 100644
--- a/doc/emacs/anti.texi
+++ b/doc/emacs/anti.texi
@@ -1,137 +1,157 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 2005--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2005--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 
 @node Antinews
-@appendix Emacs 27 Antinews
+@appendix Emacs 28 Antinews
 @c Update the emacs.texi Antinews menu entry with the above version number.
 
   For those users who live backwards in time, here is information
-about downgrading to Emacs version 27.2.  We hope you will enjoy the
+about downgrading to Emacs version 28.2.  We hope you will enjoy the
 greater simplicity that results from the absence of many @w{Emacs
 @value{EMACSVER}} features.
 
 @itemize @bullet
 @item
-Emacs can no longer be built with support of native compilation of
-Lisp programs.  This means Emacs builds much faster, and the problems
-that came with native compilation: the need to have GCC and Binutils
-installed, the complications of managing your @file{eln-cache}
-directories---all of that is now future history.  The simplicity and
-elegance of the Emacs byte-compiled code is now restored in all of its
-pristine beauty.
+Like its newer releases, Emacs 28 can still be built with support of
+native compilation of Lisp programs.  However, in preparation for
+removal of this feature in some previous version, we've deleted the
+capability of ahead-of-time native compilation of all the Lisp files
+that come with Emacs.  This makes the Emacs build process much faster.
 
 @item
-Emacs no longer builds by default with Cairo, even if it's present.
-The warnings about not using HarfBuzz are also gone, in preparation
-for complete removal of HarfBuzz support in previous Emacs versions.
-Fancy text shaping and display is becoming less important as you move
-back in time.  The @code{ftx} font backend is again part of Emacs, for
-the same reasons.
+Emacs can no longer be built with the tree-sitter library, so you no
+longer will need to look for and install the grammar libraries for
+the languages in which you want to program.  Similarly, all the modes
+that are based on the tree-sitter library were deleted, leaving you
+with just one major mode for every supported programming language: no
+more need to decide whether to turn the tree-sitter supported modes on
+and try using their parser-based fontification, indentation, and other
+features.  For some languages and file types, this means no major mode
+at all, leaving you with the venerable Fundamental mode as the
+natural, high-performance choice.  For example, Go, Rust, and CMake
+files no longer have any major modes for editing their files ---
+another milestone towards a simpler, leaner Emacs.
 
 @item
-Emacs once again supports versions 5.3 and older OpenBSD systems,
-which will be needed as you move back in time.
+Built-in support for accessing SQLite databases was removed.  You can
+now again edit SQLite files as simple binary files, which Emacs is
+quite capable to support, as it always did.
 
 @item
-We've dropped support for Secure Computing filter on GNU/Linux.  The
-past world is much more secure than the present, so the complexities
-related with this stuff, which can only be explained by severe
-paranoia, are no longer justified.
+As a gesture to users of the Haiku operating system, we've dropped the
+code which allowed Emacs to be built on that OS@.  We expect Haiku
+users to enjoy the much simpler editors they have for editing their
+files.
 
 @item
-Emacs reverted back to supporting Unicode 13.x, since the following
-versions of the standards are not yet published where you are going.
-The @samp{emoji} script and the support for displaying Emoji sequences
-were removed for the same reasons: no one will produce them in the
-past.
+Support for XInput2 input events on X is gone.  We think the
+traditional X input events are more than enough, certainly so as you
+move back in time, where XInput2 will eventually be removed from X as
+well, once the maintainers of the X Windows system realize the utter
+futility of supporting fancy input mechanisms.
 
 @item
-Mode-specific commands and the @kbd{M-S-x} command that invokes them
-were removed.  As you move back in time, the command set in Emacs
-becomes smaller, so any such filtering of applicable commands just
-gets in the way.
+The ``pure GTK'' (a.k.a.@: @acronym{PGTK}) configuration of Emacs is
+no longer supported.  This is in anticipation of the complete removal
+of the GTK toolkit support from Emacs, and in accordance with our
+expectation that GTK will cease to exist as you move back in time.  We
+plan on removing support for all the other toolkits as well, leaving
+only the pure X build with our own widgets as the single supported GUI
+configuration on X.
 
 @item
-We have removed the system for displaying documentation of groups of
-related functions, the @kbd{shortdoc-display-group} command to go with
-it, and the corresponding ``See also'' button in the @file{*Help*}
-buffer.  That should make searching for certain functions simpler:
-just use the venerable @samp{apropos} commands.
+The @option{--init-directory} command-line option was removed, as
+initializing Emacs with init files of another user is a preposterous
+idea anyway.
 
 @item
-The @code{context-menu-mode} was removed, and with it the context
-menus popped by pressing the right mouse button.  This is one small
-step towards freeing Emacs (and eventually, the whole world of
-computing) from the tyranny of the GUI pointing devices in general,
-and moving back to the simplicity of text-mode user interfaces.
-Down with mice and other rodents!
+In line with simplifying and eventually removing the
+native-compilation option, we've deleted the
+@code{inhibit-automatic-native-compilation} variable and its support
+code.  This greatly simplifies how native compilation works and makes
+your configure-time decision regarding native compilation in Emacs
+clear-cut: either Emacs always compiles Lisp to native code before
+using it, or it never does so; no more half measures and special
+exceptions.  For similar reasons, @code{native-compile-prune-cache}
+and @code{startup-redirect-eln-cache} features are no longer part of
+Emacs.
 
 @item
-The commands @kbd{C-x 4 4} and @kbd{C-x 5 5} for displaying the
-results in a new window/frame re gone.  We are quite certain that
-creating a new window/frame before running a command is much simpler,
-and doesn't require a complication of a new prefix.
+We've deleted the special code and features which allowed Emacs to
+present decent performance and responsiveness when editing files with
+very long lines.  Such files become more and more rare as time goes
+back, and so having all this tricky code in Emacs for their benefit
+was deemed an unnecessary complication.
 
 @item
-The behavior of active minibuffers when switching frames is now the
-perfect mess it should be: sometimes the minibuffer moves to the new
-selected frame, sometimes it doesn't, and sometimes you get an error.
-This makes Emacs usage much more fun, as you get to guess the result,
-instead of having it boringly consistent.
+Emacs dropped support for Eglot and the LSP servers.  We decided that
+the built-in ways of analyzing source code are more than enough as you
+move back in time.
 
 @item
-Compact mode-line display mode has been removed.  The items displayed
-on the mode line are now always in the same place, and if there's not
-enough space for them, they are not displayed at all, instead of being
-confusingly displayed in a different position.  You no longer need to
-think twice where to find a particular mode-line element on display.
+Commands to scale and rotate images are once again bound to single
+keys like @kbd{+}, @kbd{-}, and @kbd{r}, which makes them much easier
+to type.  As for the risk of typing these by mistake, we don't believe
+Emacs users make typing mistakes, especially as they move back in
+time and become younger and younger.
 
 @item
-Many commands and options related to tab bars were removed, including
-(but not limited to) frame-specific appearance of tab bars, the
-@code{tab-bar-format} option, the @kbd{C-x t n}, @kbd{C-x t N},
-@kbd{C-x t M}, and @kbd{C-x t G} commands, and many mouse gestures on
-the tab bar.  We are going to delete the tab bar support from Emacs in
-one of the past versions, and this is a step in that direction.
+To simplify typing popular commands, we've rebound the @w{@kbd{C-x 8 . .}}
+back to @w{@kbd{C-x 8 .}} and @w{@kbd{C-x 8 = =}} back to @w{@kbd{C-x 8 =}}.
+There's no need for fancier, longer key sequences, as moving back in
+time means we will have fewer and fewer commands to bind to them in
+the first place.
 
 @item
-The ``transient'' input methods have been removed; use @kbd{C-\} to
-turn input methods on and off instead.  This is in preparation for
-complete removal of input methods from Emacs in version 19, and
-consistent with the fact that the number of input methods we support
-becomes smaller as you move back in time.
+If you inadvertently kill the @file{*scratch*} buffer, Emacs will
+recreate it in Fundamental mode, not in Lisp Interaction mode.  You
+get to turn on the mode you like yourself.  Our long-term plans for
+past Emacs releases is to remove the recreation of @file{*scratch*}
+altogether, and this is the first step in that direction.
 
 @item
-We disabled @code{show-paren-mode} by default, since we think the
-venerable @code{blink-matching-paren} feature is more than enough, and
-better fits the simplicity of past Emacs versions.  It will definitely
-be better when colors are removed from Emacs in the distant past.
+Support for @code{rlogin} and @code{rsh} protocols are back, since we
+expect them to become more and more important and popular as you move
+back in time.
 
-For the same reason, sub-groups in interactive regexp searches are no
-longer highlighted in distinct colors.
+@item
+In preparation for eventual removal of Unicode support from Emacs,
+we've downgraded our Unicode support to version 14.0.
+
+@item
+You can no longer change the size of the font globally.  Since Emacs
+will at some past date remove all support for variable-size fonts,
+having such commands is a luxury we are better without.
+
+@item
+On our permanent quest for simplifying Emacs, we've removed the
+commands @code{duplicate-line} and @code{duplicate-dwim}; the old-time
+friends @kbd{M-w} and @kbd{C-y} (typed one or more times) should
+suffice.  The command @code{rename-visited-file} is gone for the same
+reason.
 
 @item
-On our permanent quest for simplifying Emacs, we've removed the Ispell
-command @code{ispell-comment-or-string-at-point}; the old-time friend
-@code{ispell-comments-and-strings} should suffice.
+We've deleted many commands related to Emoji, which were bound in the
+@kbd{C-x 8 e} prefix keymap.  We decided that the ability to type
+Emoji sequences using @kbd{C-x 8 @key{RET}} is enough, and actually
+serves our users better by requiring them to know the codepoints of
+the sequences they want to type.
 
 @item
-Many Gnus commands and options were deemed to unnecessarily complicate
-the use of Gnus (which is too complex to begin with), and thus were
-removed.  This includes @code{gnus-topic-display-predicate},
-@code{gnus-process-mark-toggle}, @code{gnus-registry-register-all},
-@code{gnus-paging-select-next}, and many others.  The @code{nnselect}
-backend was deleted for the same reason.
+We dropped support for many scripts and input methods, especially old
+scripts that no one uses anyway.  For similar reasons, Greek and
+Ukrainian translations of the Emacs tutorial are not available
+anymore.
 
 @item
-The @file{project.el} package have been redesigned to remove many
-unnecessary features, so that just the bare essentials remain.  We
-plan on removing this package from Emacs in a previous version, but
-decided to begin with removing some extra features first.
+@file{package.el} can no longer fetch source code of packages from
+their VCS repositories.  We think command-line tools like Git should
+be enough to allow you to clone their repositories.  So we deleted
+the @code{package-vc-install} command and other similar commands.
 
 @item
 To keep up with decreasing computer memory capacity and disk space, many
-other functions and files have been eliminated in Emacs 27.2.
+other functions and files have been eliminated in Emacs 28.2.
 @end itemize
diff --git a/doc/emacs/arevert-xtra.texi b/doc/emacs/arevert-xtra.texi
index a384e562e80..9dc1d3b5fb7 100644
--- a/doc/emacs/arevert-xtra.texi
+++ b/doc/emacs/arevert-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/back.texi b/doc/emacs/back.texi
index 85d79913af3..49b116df72d 100644
--- a/doc/emacs/back.texi
+++ b/doc/emacs/back.texi
@@ -1,6 +1,6 @@
 \input texinfo  @c -*-texinfo-*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
diff --git a/doc/emacs/basic.texi b/doc/emacs/basic.texi
index 1a4abdc9ecd..2cc45a8805e 100644
--- a/doc/emacs/basic.texi
+++ b/doc/emacs/basic.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Basic
diff --git a/doc/emacs/buffers.texi b/doc/emacs/buffers.texi
index 8b21b6457cd..b6aafe24b96 100644
--- a/doc/emacs/buffers.texi
+++ b/doc/emacs/buffers.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Buffers
diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi
index 93ad4145ccc..98f67ddd9d9 100644
--- a/doc/emacs/building.texi
+++ b/doc/emacs/building.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Building
diff --git a/doc/emacs/cal-xtra.texi b/doc/emacs/cal-xtra.texi
index 7c41adf0297..f0341a2817d 100644
--- a/doc/emacs/cal-xtra.texi
+++ b/doc/emacs/cal-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.  -*- coding: utf-8 -*-
-@c Copyright (C) 2004--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/calendar.texi b/doc/emacs/calendar.texi
index 0ba8b2cbd03..7b5b1b78fc9 100644
--- a/doc/emacs/calendar.texi
+++ b/doc/emacs/calendar.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.  -*- coding: utf-8 -*-
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Calendar/Diary
diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi
index 0f7acd87978..9514e3414e1 100644
--- a/doc/emacs/cmdargs.texi
+++ b/doc/emacs/cmdargs.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Emacs Invocation
diff --git a/doc/emacs/commands.texi b/doc/emacs/commands.texi
index df3c47504a7..98f0610ee44 100644
--- a/doc/emacs/commands.texi
+++ b/doc/emacs/commands.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi
index aaf41d2aef1..91df15a21d7 100644
--- a/doc/emacs/custom.texi
+++ b/doc/emacs/custom.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Customization
@@ -1990,13 +1990,17 @@ to assign meanings to key bindings that use these 
modifiers.  The
 modifier bits are labeled as @samp{s-}, @samp{H-} and @samp{A-}
 respectively.
 
+@cindex modifier keys unsupported by keyboard
   Even if your keyboard lacks these additional modifier keys, you can
-enter it using @kbd{C-x @@}: @kbd{C-x @@ h} adds the Hyper flag to
+enter them using @kbd{C-x @@}: @kbd{C-x @@ h} adds the Hyper flag to
 the next character, @kbd{C-x @@ s} adds the Super flag, and
 @kbd{C-x @@ a} adds the Alt flag.  For instance, @kbd{C-x @@ h
 C-a} is a way to enter @kbd{Hyper-Control-a}.  (Unfortunately, there
 is no way to add two modifiers by using @kbd{C-x @@} twice for the
 same character, because the first one goes to work on the @kbd{C-x}.)
+You can similarly enter the Shift, Control, and Meta modifiers by
+using @kbd{C-x @ S}, @kbd{C-x @ c}, and @kbd{C-x @ m}, respectively,
+although this is rarely needed.
 
 @node Function Keys
 @subsection Rebinding Function Keys
@@ -2697,6 +2701,28 @@ function is not defined.
 
 A @code{setq} on a variable which does not exist is generally
 harmless, so those do not need a conditional.
+
+@item
+Using @code{use-package} to automatically load and configure a
+package.
+
+@example
+(use-package hi-lock
+  :defer t
+  :init (add-hook 'some-hook 'hi-lock-mode)
+  :config (use-package my-hi-lock)
+  :bind (("M-o l" . highlight-lines-matching-regexp)
+         ("M-o r" . highlight-regexp)
+         ("M-o w" . highlight-phrase)))
+@end example
+
+@noindent
+This will load @code{hi-lock} when some of its commands or variables
+are first used, bind 3 keys to its commands, and additionally load the
+@code{my-hi-lock} package (presumably further customizing
+@code{hi-lock}) after loading @code{hi-lock}.  The @code{use-package}
+facility is fully documented in its own manual, @pxref{Top,,,
+use-package, use-package User manual}.
 @end itemize
 
 @node Terminal Init
diff --git a/doc/emacs/dired-xtra.texi b/doc/emacs/dired-xtra.texi
index 454abcae4c1..04b5ed44ed1 100644
--- a/doc/emacs/dired-xtra.texi
+++ b/doc/emacs/dired-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi
index 7a382c05663..cae8207990e 100644
--- a/doc/emacs/dired.texi
+++ b/doc/emacs/dired.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Dired
diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index cf4f0414523..f77ab569483 100644
--- a/doc/emacs/display.texi
+++ b/doc/emacs/display.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 
 @c See file emacs.texi for copying conditions.
@@ -920,12 +920,12 @@ decrease the font size of the affected faces, depending 
on the
 direction of the scrolling.
 
   The final key of these commands may be repeated without the leading
-@kbd{C-x}.  For instance, @kbd{C-x C-= C-= C-=} increases the face
-height by three steps.  Each step scales the text height by a factor
-of 1.2; to change this factor, customize the variable
-@code{text-scale-mode-step}.  A numeric argument of 0
-to the @code{text-scale-adjust} command restores the default height,
-the same as typing @kbd{C-x C-0}.
+@kbd{C-x} and without the modifiers.  For instance, @w{@kbd{C-x C-= C-= C-=}}
+and @w{@kbd{C-x C-= = =}} increase the face height by three steps.  Each
+step scales the text height by a factor of 1.2; to change this factor,
+customize the variable @code{text-scale-mode-step}.  A numeric
+argument of 0 to the @code{text-scale-adjust} command restores the
+default height, the same as typing @kbd{C-x C-0}.
 
 @cindex adjust global font size
 @findex global-text-scale-adjust
diff --git a/doc/emacs/emacs-xtra.texi b/doc/emacs/emacs-xtra.texi
index fbc1e1228e5..066070262a7 100644
--- a/doc/emacs/emacs-xtra.texi
+++ b/doc/emacs/emacs-xtra.texi
@@ -16,7 +16,7 @@
 @copying
 This manual describes specialized features of Emacs.
 
-Copyright @copyright{} 2004--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2004--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi
index 5c81641bf63..b6d149eb3ef 100644
--- a/doc/emacs/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -20,7 +20,7 @@ This is the @cite{GNU Emacs Manual},
 @end ifclear
 updated for Emacs version @value{EMACSVER}.
 
-Copyright @copyright{} 1985--1987, 1993--2022 Free Software Foundation,
+Copyright @copyright{} 1985--1987, 1993--2023 Free Software Foundation,
 Inc.
 
 @quotation
@@ -220,7 +220,7 @@ Appendices
 * GNU Free Documentation License:: The license for this documentation.
 * Emacs Invocation::    Hairy startup options.
 * X Resources::         X resources for customizing Emacs.
-* Antinews::            Information about Emacs version 27.
+* Antinews::            Information about Emacs version 28.
 * Mac OS / GNUstep::     Using Emacs under macOS and GNUstep.
 * Haiku::               Using Emacs on Haiku.
 * Microsoft Windows::   Using Emacs on Microsoft Windows and MS-DOS.
diff --git a/doc/emacs/emerge-xtra.texi b/doc/emacs/emerge-xtra.texi
index d7d94c8b840..32392dde460 100644
--- a/doc/emacs/emerge-xtra.texi
+++ b/doc/emacs/emerge-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/entering.texi b/doc/emacs/entering.texi
index 6069da0380c..c23015ee10e 100644
--- a/doc/emacs/entering.texi
+++ b/doc/emacs/entering.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi
index 1717c5c25bc..6a9103d3a09 100644
--- a/doc/emacs/files.texi
+++ b/doc/emacs/files.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Files
@@ -801,22 +801,21 @@ in these cases, customize the variable
 @vindex write-region-inhibit-fsync
   Normally, when a program writes a file, the operating system briefly
 caches the file's data in main memory before committing the data to
-disk.  This can greatly improve performance; for example, when running
-on laptops, it can avoid a disk spin-up each time a file is written.
-However, it risks data loss if the operating system crashes before
-committing the cache to disk.
+secondary storage.  Although this can greatly improve performance, it
+risks data loss if the system loses power before committing the cache,
+and on some platforms other processes might not immediately notice the
+file's change.
 
   To lessen this risk, Emacs can invoke the @code{fsync} system call
 after saving a file.  Using @code{fsync} does not eliminate the risk
-of data loss, partly because many systems do not implement
+of data loss or slow notification, partly because many systems do not support
 @code{fsync} properly, and partly because Emacs's file-saving
 procedure typically relies also on directory updates that might not
 survive a crash even if @code{fsync} works properly.
 
   The @code{write-region-inhibit-fsync} variable controls whether
 Emacs invokes @code{fsync} after saving a file.  The variable's
-default value is @code{nil} when Emacs is interactive, and @code{t}
-when Emacs runs in batch mode (@pxref{Initial Options, Batch Mode}).
+default value is @code{t}.
 
   Emacs never uses @code{fsync} when writing auto-save files, as these
 files might lose data anyway.
diff --git a/doc/emacs/fixit.texi b/doc/emacs/fixit.texi
index d2704e25d67..78503d31a38 100644
--- a/doc/emacs/fixit.texi
+++ b/doc/emacs/fixit.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Fixit
diff --git a/doc/emacs/fortran-xtra.texi b/doc/emacs/fortran-xtra.texi
index fc20d8ea357..8e904cfbd28 100644
--- a/doc/emacs/fortran-xtra.texi
+++ b/doc/emacs/fortran-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi
index 3ff47c6ffcf..3ee6eb59dbb 100644
--- a/doc/emacs/frames.texi
+++ b/doc/emacs/frames.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Frames
diff --git a/doc/emacs/glossary.texi b/doc/emacs/glossary.texi
index 9a537019974..e845ea8827a 100644
--- a/doc/emacs/glossary.texi
+++ b/doc/emacs/glossary.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Glossary
diff --git a/doc/emacs/gnu.texi b/doc/emacs/gnu.texi
index 58cc6bb664e..f484e5499a5 100644
--- a/doc/emacs/gnu.texi
+++ b/doc/emacs/gnu.texi
@@ -1,4 +1,4 @@
-@c Copyright (C) 1985--1987, 1993, 1995, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993, 1995, 2001--2023 Free Software
 @c Foundation, Inc.
 @c
 @c Permission is granted to anyone to make or distribute verbatim copies
diff --git a/doc/emacs/haiku.texi b/doc/emacs/haiku.texi
index 33c81b6f17f..1506bc8f912 100644
--- a/doc/emacs/haiku.texi
+++ b/doc/emacs/haiku.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2021--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2021--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Haiku
 @appendix Emacs and Haiku
diff --git a/doc/emacs/help.texi b/doc/emacs/help.texi
index 6d9c028b742..2513e6be271 100644
--- a/doc/emacs/help.texi
+++ b/doc/emacs/help.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Help
diff --git a/doc/emacs/indent.texi b/doc/emacs/indent.texi
index 058d313c2d0..95ad726828d 100644
--- a/doc/emacs/indent.texi
+++ b/doc/emacs/indent.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Indentation
diff --git a/doc/emacs/killing.texi b/doc/emacs/killing.texi
index bac2f7ff787..47e0b5e37ae 100644
--- a/doc/emacs/killing.texi
+++ b/doc/emacs/killing.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 
diff --git a/doc/emacs/kmacro.texi b/doc/emacs/kmacro.texi
index 88df2937659..fc1402b489d 100644
--- a/doc/emacs/kmacro.texi
+++ b/doc/emacs/kmacro.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Keyboard Macros
diff --git a/doc/emacs/m-x.texi b/doc/emacs/m-x.texi
index a98b879c882..7b366562019 100644
--- a/doc/emacs/m-x.texi
+++ b/doc/emacs/m-x.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node M-x
diff --git a/doc/emacs/macos.texi b/doc/emacs/macos.texi
index 96f881ca124..6b9ae196704 100644
--- a/doc/emacs/macos.texi
+++ b/doc/emacs/macos.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2000--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2000--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Mac OS / GNUstep
 @appendix Emacs and macOS / GNUstep
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 9ebb044652c..8c77ded55d3 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual., Abbrevs, This is part of the Emacs 
manual., Top
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Maintaining
@@ -3166,7 +3166,7 @@ Most projects with a certain amount of users track bug 
reports in some
 issue tracking software which assigns each report a unique and short
 number or identifier.  Those are used to reference a given bug, e.g.,
 in a source code comment above the code fixing some bug, in
-documentation files, or in discussions on some mailinglist or IRC
+documentation files, or in discussions on some mailing list or IRC
 channel.
 
 @findex bug-reference-mode
diff --git a/doc/emacs/mark.texi b/doc/emacs/mark.texi
index 5472a288d1e..3f1c76c1591 100644
--- a/doc/emacs/mark.texi
+++ b/doc/emacs/mark.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Mark
diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi
index 90e50a41d53..6fb312ec321 100644
--- a/doc/emacs/mini.texi
+++ b/doc/emacs/mini.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Minibuffer
diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index 702c72bac25..c706b727e6f 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1985--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
 @chapter Miscellaneous Commands
diff --git a/doc/emacs/modes.texi b/doc/emacs/modes.texi
index 1a32f619478..d0eacce0842 100644
--- a/doc/emacs/modes.texi
+++ b/doc/emacs/modes.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Modes
diff --git a/doc/emacs/msdos-xtra.texi b/doc/emacs/msdos-xtra.texi
index 57e1ac90a51..11e63be51a0 100644
--- a/doc/emacs/msdos-xtra.texi
+++ b/doc/emacs/msdos-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/msdos.texi b/doc/emacs/msdos.texi
index d55c751210f..52561ec9a33 100644
--- a/doc/emacs/msdos.texi
+++ b/doc/emacs/msdos.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Microsoft Windows
diff --git a/doc/emacs/mule.texi b/doc/emacs/mule.texi
index 1bbd7440f3e..3b98a93c5aa 100644
--- a/doc/emacs/mule.texi
+++ b/doc/emacs/mule.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 1997, 1999--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1997, 1999--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node International
 @chapter International Character Set Support
diff --git a/doc/emacs/package.texi b/doc/emacs/package.texi
index cd4c113ae5a..d993b7b071f 100644
--- a/doc/emacs/package.texi
+++ b/doc/emacs/package.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Packages
diff --git a/doc/emacs/picture-xtra.texi b/doc/emacs/picture-xtra.texi
index f5c827ea174..d155a34951d 100644
--- a/doc/emacs/picture-xtra.texi
+++ b/doc/emacs/picture-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi
index 3812c2aa281..44cad5a148e 100644
--- a/doc/emacs/programs.texi
+++ b/doc/emacs/programs.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Programs
diff --git a/doc/emacs/regs.texi b/doc/emacs/regs.texi
index ef9187bb9a6..ec2367d71e3 100644
--- a/doc/emacs/regs.texi
+++ b/doc/emacs/regs.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Registers
diff --git a/doc/emacs/rmail.texi b/doc/emacs/rmail.texi
index 7414cdb0799..382254cc11b 100644
--- a/doc/emacs/rmail.texi
+++ b/doc/emacs/rmail.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Rmail
diff --git a/doc/emacs/screen.texi b/doc/emacs/screen.texi
index 954d7a1c83e..5e9e89e6b11 100644
--- a/doc/emacs/screen.texi
+++ b/doc/emacs/screen.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Screen
diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi
index 63541d78a5a..a5048093869 100644
--- a/doc/emacs/search.texi
+++ b/doc/emacs/search.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Search
diff --git a/doc/emacs/sending.texi b/doc/emacs/sending.texi
index cc54224200a..6b94cd0b737 100644
--- a/doc/emacs/sending.texi
+++ b/doc/emacs/sending.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Sending Mail
diff --git a/doc/emacs/text.texi b/doc/emacs/text.texi
index 27abe5caaab..8fbf731a4f7 100644
--- a/doc/emacs/text.texi
+++ b/doc/emacs/text.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Text
diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi
index 887e5c6170f..e168514fcb9 100644
--- a/doc/emacs/trouble.texi
+++ b/doc/emacs/trouble.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
diff --git a/doc/emacs/vc-xtra.texi b/doc/emacs/vc-xtra.texi
index 1ed2d625662..3b0471872a2 100644
--- a/doc/emacs/vc-xtra.texi
+++ b/doc/emacs/vc-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included in emacs-xtra.texi when producing the printed
diff --git a/doc/emacs/vc1-xtra.texi b/doc/emacs/vc1-xtra.texi
index 23d5f504322..22b415613cb 100644
--- a/doc/emacs/vc1-xtra.texi
+++ b/doc/emacs/vc1-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2023 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in vc-xtra.texi (when producing the
diff --git a/doc/emacs/windows.texi b/doc/emacs/windows.texi
index 4537f8157e8..239b5b2956b 100644
--- a/doc/emacs/windows.texi
+++ b/doc/emacs/windows.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Windows
diff --git a/doc/emacs/xresources.texi b/doc/emacs/xresources.texi
index ab0df3563f5..ee054430766 100644
--- a/doc/emacs/xresources.texi
+++ b/doc/emacs/xresources.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1987, 1993--1995, 1997, 2001--2022 Free Software
+@c Copyright (C) 1987, 1993--1995, 1997, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node X Resources
diff --git a/doc/lispintro/ChangeLog.1 b/doc/lispintro/ChangeLog.1
index a581faa73b9..76603b0a5f3 100644
--- a/doc/lispintro/ChangeLog.1
+++ b/doc/lispintro/ChangeLog.1
@@ -782,7 +782,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/lispintro/Makefile.in b/doc/lispintro/Makefile.in
index 42e6d2c1c87..77087e97fac 100644
--- a/doc/lispintro/Makefile.in
+++ b/doc/lispintro/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1994-1999, 2001-2022 Free Software Foundation, Inc.
+# Copyright (C) 1994-1999, 2001-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/lispintro/README b/doc/lispintro/README
index b6dc23bb904..b1b30bcbf49 100644
--- a/doc/lispintro/README
+++ b/doc/lispintro/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/doc/lispintro/cons-1.eps b/doc/lispintro/cons-1.eps
index f2e445b8517..e8b5ec78b3f 100644
--- a/doc/lispintro/cons-1.eps
+++ b/doc/lispintro/cons-1.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:26:58 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-2.eps b/doc/lispintro/cons-2.eps
index fd607021e74..0bb93c83e3b 100644
--- a/doc/lispintro/cons-2.eps
+++ b/doc/lispintro/cons-2.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:26:39 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-2a.eps b/doc/lispintro/cons-2a.eps
index 23051ef7fcb..5ca33ac8807 100644
--- a/doc/lispintro/cons-2a.eps
+++ b/doc/lispintro/cons-2a.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Tue Mar 14 15:09:30 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-3.eps b/doc/lispintro/cons-3.eps
index 24fb0e11004..bf2a14e7da8 100644
--- a/doc/lispintro/cons-3.eps
+++ b/doc/lispintro/cons-3.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:25:41 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-4.eps b/doc/lispintro/cons-4.eps
index 70a82103f51..bf995906a12 100644
--- a/doc/lispintro/cons-4.eps
+++ b/doc/lispintro/cons-4.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:25:06 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-5.eps b/doc/lispintro/cons-5.eps
index 03391127b01..cd27259ae98 100644
--- a/doc/lispintro/cons-5.eps
+++ b/doc/lispintro/cons-5.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:27:28 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/drawers.eps b/doc/lispintro/drawers.eps
index 7e3c83deb61..446bd8c71a7 100644
--- a/doc/lispintro/drawers.eps
+++ b/doc/lispintro/drawers.eps
@@ -9,7 +9,7 @@
 %%EndComments
 %%BeginProlog
 
-% Copyright (C) 2001-2022 Free Software Foundation, Inc.
+% Copyright (C) 2001-2023 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/emacs-lisp-intro.texi 
b/doc/lispintro/emacs-lisp-intro.texi
index 860ef2fc78e..a2b82d25633 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -115,7 +115,7 @@ Edition @value{edition-number}, @value{update-date}
 @sp 1
 Distributed with Emacs version @value{EMACSVER}.
 @sp 1
-Copyright @copyright{} 1990--1995, 1997, 2001--2022 Free Software
+Copyright @copyright{} 1990--1995, 1997, 2001--2023 Free Software
 Foundation, Inc.
 @sp 1
 
diff --git a/doc/lispintro/lambda-1.eps b/doc/lispintro/lambda-1.eps
index a9adeae357d..91a7ce9431f 100644
--- a/doc/lispintro/lambda-1.eps
+++ b/doc/lispintro/lambda-1.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:31:53 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/lambda-2.eps b/doc/lispintro/lambda-2.eps
index 05cf437b1eb..9dc7f138eda 100644
--- a/doc/lispintro/lambda-2.eps
+++ b/doc/lispintro/lambda-2.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:33:09 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/lambda-3.eps b/doc/lispintro/lambda-3.eps
index 8ff4c7c4fc1..b403271c1f3 100644
--- a/doc/lispintro/lambda-3.eps
+++ b/doc/lispintro/lambda-3.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:33:49 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispref/ChangeLog.1 b/doc/lispref/ChangeLog.1
index 82840aed1d6..dd6a220398f 100644
--- a/doc/lispref/ChangeLog.1
+++ b/doc/lispref/ChangeLog.1
@@ -2201,7 +2201,7 @@
        * doclicense.texi: Update to latest version from FSF.
        These are just minor editorial changes.
        * elisp.texi (GNU Free Documentation License)
-       (GNU General Public Licens):
+       (GNU General Public License):
        Provide sectioning, since doclicense.texi no longer does that.
 
        * loading.texi (Named Features): @ -> @@ to fix typo.
@@ -5150,7 +5150,7 @@
 
        * backups.texi (Making Backups):
        * modes.texi (Example Major Modes): Use recommended coding style.
-       (Major Mode Basics, Derived Modes): Encourge more strongly use of
+       (Major Mode Basics, Derived Modes): Encourage more strongly use of
        define-derived-mode.  Mention completion-at-point-functions.
 
 2010-12-13  Chong Yidong  <cyd@stupidchicken.com>
@@ -13989,7 +13989,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1998-2022 Free Software Foundation, Inc.
+  Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/lispref/Makefile.in b/doc/lispref/Makefile.in
index 69991696899..325f23a3c0f 100644
--- a/doc/lispref/Makefile.in
+++ b/doc/lispref/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1990-1996, 1998-2022 Free Software Foundation, Inc.
+# Copyright (C) 1990-1996, 1998-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/lispref/README b/doc/lispref/README
index 70c0242123d..48bbccd61f9 100644
--- a/doc/lispref/README
+++ b/doc/lispref/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2022 Free Software Foundation, Inc.  -*- outline -*-
+Copyright (C) 2001-2023 Free Software Foundation, Inc.  -*- outline -*-
 See the end of the file for license conditions.
 
 
diff --git a/doc/lispref/abbrevs.texi b/doc/lispref/abbrevs.texi
index a366e9c7bcb..a9a5f84434d 100644
--- a/doc/lispref/abbrevs.texi
+++ b/doc/lispref/abbrevs.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1994, 1999, 2001--2022 Free Software Foundation,
+@c Copyright (C) 1990--1994, 1999, 2001--2023 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Abbrevs
diff --git a/doc/lispref/anti.texi b/doc/lispref/anti.texi
index 09103cbeabe..cddf675d336 100644
--- a/doc/lispref/anti.texi
+++ b/doc/lispref/anti.texi
@@ -1,184 +1,187 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1999, 2002--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1999, 2002--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 
 @c This node must have no pointers.
 
 @node Antinews
-@appendix Emacs 27 Antinews
+@appendix Emacs 28 Antinews
 @c Update the elisp.texi Antinews menu entry with the above version number.
 
 For those users who live backwards in time, here is information about
-downgrading to Emacs version 27.2.  We hope you will enjoy the greater
+downgrading to Emacs version 28.2.  We hope you will enjoy the greater
 simplicity that results from the absence of many @w{Emacs
 @value{EMACSVER}} features.
 
 @itemize @bullet
 @item
-The annoying @code{lexical-binding} local variable now heeds the
-value of @code{enable-local-variables}: if it's @code{nil}, the
-@code{lexical-binding} cookie is ignored.  We are working hard on
-removing the lexical-binding support in some past Emacs version, and
-this small step advances us back to that change.
+The implementation of overlays is back to its simple, time-proven
+storage in a pair of linear linked lists centered around some buffer
+position.  No more fancy interval trees and suchlikes.  Lisp programs
+that use overlays once again need to recenter overlays around the
+buffer position of interest, and display-related features should again
+make sure they don't use too many overlays in a buffer, lest redisplay
+will be too slow.
 
 @item
-The @code{load-dangerous-libraries} variable is not obsolete, as it
-must be used to allow loading Lisp compiled by XEmacs, which will
-become more and more important as you move back in time.
+Several functions stopped the annoying conversion of quotes and key
+sequences by no longer calling @code{substitute-command-keys}.  One
+prominent example is @code{format-prompt} and all its many callers.
+This makes the strings they produce much more predictable, returning
+to you, the Lisp programmer, control on which punctuation characters
+will appear in the text presented to the users.  For similar reasons,
+the @code{substitute-quotes} function was deleted.
 
 @item
-The optional @var{modes} argument of @code{interactive} is not
-supported, and every command is deemed applicable to any major mode.
-We believe this makes the life of Lisp programmers much simpler, as
-there's now no need to tag commands with the modes where they make
-sense.
+The venerable @code{buffer-modified-p} function again reliably returns
+either @code{nil} or @code{t}, not any other confusing values.
 
 @item
-Shorthands for Lisp symbols have been removed, which makes loading
-Lisp files and handling Lisp symbols much simpler and more efficient.
-This is important for decent performance on slower CPUs as you move
-back in time.
+The support for @samp{medium} weight of fonts was dropped.  Emacs now
+considers @samp{medium} and @samp{regular} weights to be the same.  We
+believe this will simplify your font setup, since there's no longer a
+need to worry about fonts that support @samp{regular} weight, but not
+the @samp{medium} one, or vice versa: either one will do!
 
 @item
 To reduce the amount of code in Emacs related to unimportant features,
-we've removed the variables @code{global-minor-modes} and
-@code{local-minor-modes}.  If your Lisp program needs to determine
-whether some minor mode is in effect, it will have to test explicitly
-for every mode.  We don't expect anyone to miss those fancy variables.
+we've removed the function @code{compiled-function-p}.  Lisp programs
+are expected to test explicitly for the relevant types of function
+objects: built-in, byte-compiled, and natively-compiled.  For the same
+reasons we deleted the functions @code{pos-bol}, @code{pos-eol},
+@code{file-attribute-file-identifier}, and quite a few others.  We
+don't expect anyone to miss those fancy functions.
 
 @item
-The default preference for servicing sub-processes that produce output
-at a high rate, and the associated variable
-@code{process-prioritize-lower-fds}, have been removed.  Moving back
-in time means fewer and fewer programs can produce such high-rate
-output, so this features becomes just useless crud.
+The timeout used by @code{x-show-tip} can no longer be specified by
+Lisp programs; it is hard-coded in the function.  This will lead to a
+simpler, easier maintained code, and no one should want to control the
+timeout after which the tip pops down.
 
 @item
-The encodings that are variants of EBCDIC were removed.  This includes
-@code{ibm256}, @code{ibm273}, and others---variants of the EBCDIC
-encoding tailored for some Japanese and European locales.  You won't
-need those where you are going.
+The macro @code{setopt} was deleted; use @code{customize-variable}
+instead, or invoke the @code{:set} function from Lisp.
 
 @item
-The ``Bindat type expression'' description language has been removed,
-as the existing data layout specifications are perfectly suited for
-this job.
+We removed the @code{lisp-directory} variable, as the value can be
+easily deduced from other similar variables, like
+@code{installation-directory} and @code{source-directory}, each one
+when it's relevant.
 
 @item
-To simplify code and reduce complexity, we removed the capability of
-specifying the success handler in @code{condition-case} via the
-@code{:success} keyword.  If you really need this feature (why would
-you?), you can always write some simple Lisp that has the same effect.
+To simplify code and reduce complexity, we deleted the functions
+@code{get-display-property} and @code{add-display-text-property}; use
+the generic @code{get-text-property} and @code{put-text-property}
+instead.
 
 @item
-Emacs modules can no longer provide interactive functions, or install
-finalizers, nor open channels to existing pipe sub-processes.  All
-this is extra ballast, especially since we plan on removing modules in
-some past Emacs version.  The @code{make_unibyte_string} module API
-was removed for the same reason.
+Support for pinch input events and for modern drag-and-drop
+functionality on X was dropped.  As you move back in time, these
+facilities will become less and less important, and will soon enough
+disappear, so there's no reason to keep them in Emacs.
 
 @item
-To keep Emacs clean and elegant, we've removed the
-@code{print-integers-as-characters} option.  Recognizing characters by
-their decimal codes is a basic requirement for Emacs Lisp programmers,
-and with the expected decrease in use of Unicode characters, this will
-be soon limited to ASCII only: surely something you all can master!
+To keep Emacs clean and elegant, we've removed the @file{textsec.el}
+library, with its facilities for checking whether some text is
+``suspicious''.  We consider our users smart enough to detect
+maliciously modified text by just looking at it or by moving the
+cursor across it, and the whole idea that someone would wish to
+deliberately deceive Emacs users ridiculous and unworthy of
+complicating our elegant text-processing and display capabilities.
 
 @item
-The optional @var{count} argument of the @code{directory-files}
-function has been removed.  Extracting the first @var{n} members from
-the full list is trivial, so this is a significant simplification for
-an insignificant cost.
+The functions @code{keymap-set}, @code{keymap-global-set},
+@code{keymap-local-set}, @code{keymap-substitute},
+@code{keymap-lookup}, and some others were deleted.  We have found the
+traditional @code{define-key}, @code{global-set-key},
+@code{local-set-key}, @code{substitute-key-definition}, and
+@code{key-binding} more than enough, and their minor inconsistencies
+in the syntax of keys they accept a source of endless fun in Emacs
+Lisp programming.  Why make Emacs programming a dull place?  For the
+same reasons we deleted @code{key-valid-p}, since we consider the
+permissive nature of @code{kbd} more in the spirit of Emacs Lisp.
 
 @item
-Functions that create sub-processes and network connections no longer
-accept the @code{:coding} argument; use
-@code{set-process-coding-system} or bind
-@code{coding-system-for-read/write} instead: again, a significant
-reduction in Emacs complexity for little or no cost.
+Yanking of anything but plain text from other applications becomes
+more and more an unnecessary feature as you move back in time, so we
+dropped support for pasting media like HTML and images via the
+clipboard.  If you @i{really} need to yank those into an Emacs buffer,
+you can go via a disk file.
 
 @item
-We deleted from the macros @code{define-derived-mode} and
-@code{define-minor-mode} the code which allowed using the
-@code{:interactive} argument.  The possibility of marking a mode
-non-interactive makes very little sense,
+We removed unnecessary functions @code{string-pixel-width} and
+@code{string-glyph-split}, as we consider it inappropriate for Lisp
+programs to do display layout calculations, where these functions come
+in handy.  Display is for the display engine, written in C, and should
+stay there!
 
 @item
-The possibility of having links to man pages in doc strings has been
-removed.  Use plain text instead, if you need such references.
+Various new Xwidget functions, such as
+@code{xwidget-perform-lispy-event}, @code{xwidget-webkit-load-html},
+and @code{xwidget-webkit-back-forward-list}, were deleted as part of
+our continuing effort to gradually delete the entire Xwidget
+functionality in some previous release of Emacs.
 
 @item
-Temporary buffers are no longer exempt from running any buffer-related
-hooks.  Programs that don't want such hooks in some buffer can always
-disable it locally, whereas making that simpler complicates Emacs for
-no good reason.
+Setting the @code{:stderr} property of a process in a
+@code{make-process} call once again forces the process's connection to
+use pipes, not ptys, for all the standard streams --- a considerable
+simplification of this complex interface.
 
 @item
+To keep the amount of Lisp functions from growing out of control, we
+deleted @code{string-equal-ignore-case}.  Use @code{compare-strings}
+instead.
+
 Several features that complicated the byte compiler have been removed:
 
 @itemize @minus
 @item
-The checks for missing declarations of dynamic variables.  This will
-continue making less and less sense as we move away of lexical-binding
-support.
-
-@item
-The ability of compiling symlinked @file{*.el} files, which is really
-gross: copy the files instead.
+The warnings about quoting mistakes in documentation strings.  You are
+expected to find such mistakes yourself, by eyeballing the resulting
+@file{*Help*} buffer display.
 
 @item
-The warnings about too-wide doc strings---that is just a nuisance, as
-the programmers should be trusted to know what they are doing.
+The warnings about malformed @code{defcustom} types, like
+double-quoting symbols in @code{choice} lists.
 @end itemize
 
-
-@item
-We deleted several features of the @code{pcase} macro, in accordance
-with our general plan to remove @code{pcase} from Emacs:
-
-@itemize @minus
-@item
-The @code{cl-type} pattern.
-
 @item
-the @code{pcase-setq} macro.
-
-@item
-The @code{pcase-compile-patterns} function.
-@end itemize
+The macro @code{with-buffer-unmodified-if-unchanged} was deleted.
+Lisp programs that need to leave the buffer unmodified in these cases
+can always compare the text before and after the modifications.
 
 @item
-Some of the keywords used in Edebug specification lists were deemed to
-be of little use, and were therefore removed: @code{&interpose},
-@code{&error}, and @code{&name}.  The long-term plane is for Emacs to
-drop Edebug entirely, leaving only the trusted Lisp debugger, and we
-continue working according to that plan.
+The functions @code{string-edit} and @code{read-string-from-buffer}
+were removed, as we consider the fun of programming them anew every
+time an important part of the education of each Emacs Lisp developer.
 
 @item
-The function @code{object-intervals} was dropped, as a Lisp program
-can easily collect the intervals of a buffer or a string by iterating
-through them one by one.
+We deleted the function @code{readablep} and the related variable
+@code{print-unreadable-function}, since no one is supposed to want to
+print unreadable Lisp objects.
 
 @item
-We decided that the @code{require-theme} function is an unnecessary
-complication, so we deleted it.  Lisp programs can easily search along
-@code{custom-theme-load-path} instead.
+The facility for storing multisession variables was deleted as an
+unnecessary complication.  With it are gone @code{multisession-value},
+@code{define-multisession-variable}, and
+@code{list-multisession-values}.
 
 @item
-The convenience functions @code{length<}, @code{length>}, and
-@code{length=} were removed, as using @code{length} followed by a
-comparison should be good enough for everyone, especially considering
-that the typical length of a list keeps going down as you move back
-through time.
+The support for the @code{cursor-face} text property was dropped.  We
+consider the rest of the faces adequate for supporting this
+functionality.
 
 @item
-The variable @code{current-minibuffer-command} is no longer available,
-as we found little justification for keeping it.
+The function @code{tooltip-show} dropped support for optional face
+arguments @code{text-face} and @code{default-face} that allow fancy
+control of the face of the tip text and top frame colors.  We decided
+that tooltips should all look the same, to prevent user confusion.
 
 @item
 As part of the ongoing quest for simplicity, many other functions and
 variables have been eliminated.  Other functions and variables, that
-were declared obsolete since Emacs 23, have been added back, in
-preparation for releasing Emacs 23 in some distant past.
+were declared obsolete since Emacs 24, have been added back, in
+preparation for releasing Emacs 24 in some distant past.
 @end itemize
diff --git a/doc/lispref/back.texi b/doc/lispref/back.texi
index d0f56f49bc2..adc3c575f27 100644
--- a/doc/lispref/back.texi
+++ b/doc/lispref/back.texi
@@ -1,6 +1,6 @@
 \input texinfo  @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 2001--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2001--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @c
 @c %**start of header
diff --git a/doc/lispref/backups.texi b/doc/lispref/backups.texi
index f0b154e4955..cba212c634d 100644
--- a/doc/lispref/backups.texi
+++ b/doc/lispref/backups.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1999, 2001--2022 Free Software Foundation,
+@c Copyright (C) 1990--1995, 1999, 2001--2023 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Backups and Auto-Saving
diff --git a/doc/lispref/buffers.texi b/doc/lispref/buffers.texi
index c40e088293e..b56006e5aa9 100644
--- a/doc/lispref/buffers.texi
+++ b/doc/lispref/buffers.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Buffers
@@ -977,17 +977,15 @@ first argument is @var{buffer-or-name} and the second is 
@var{arg}
 A cons-cell @code{(@var{oper} . @var{expr})} where @var{oper} is one
 of
 @table @code
-@item not
-Satisfied if @var{expr} doesn't satisfy @code{buffer-match-p} with
+@item (not @var{cond})
+Satisfied if @var{cond} doesn't satisfy @code{buffer-match-p} with
 the same buffer and @code{arg}.
-@item or
-Satisfied if @var{expr} is a list and @emph{any} condition in
-@var{expr} satisfies @code{buffer-match-p}, with the same buffer and
-@code{arg}.
-@item and
-Satisfied if @var{expr} is a list and @emph{all} conditions in
-@var{expr} satisfy @code{buffer-match-p}, with the same buffer and
-@code{arg}.
+@item (or @var{conds}@dots{})
+Satisfied if @emph{any} condition in @var{conds} satisfies
+@code{buffer-match-p}, with the same buffer and @code{arg}.
+@item (and @var{conds}@dots{})
+Satisfied if @emph{all} the conditions in @var{conds} satisfy
+@code{buffer-match-p}, with the same buffer and @code{arg}.
 @item derived-mode
 Satisfied if the buffer's major mode derives from @var{expr}.
 @item major-mode
diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi
index 662de29d45a..dc78adc4520 100644
--- a/doc/lispref/commands.texi
+++ b/doc/lispref/commands.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Command Loop
diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi
index 3e397349995..be2125a9ab3 100644
--- a/doc/lispref/compile.texi
+++ b/doc/lispref/compile.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1994, 2001--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1990--1994, 2001--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Byte Compilation
 @chapter Byte Compilation
@@ -930,7 +930,7 @@ used by Emacs to natively-compile any Lisp file or 
byte-compiled Lisp
 file that is loaded into Emacs, when no natively-compiled file for it
 is available.  Note that because of this use of a subprocess, native
 compilation may produce warning and errors which byte-compilation does
-not, and lisp code may thus need to be modified to work correctly.  See
+not, and Lisp code may thus need to be modified to work correctly.  See
 @code{native-comp-async-report-warnings-errors} in @pxref{Native-Compilation
 Variables} for more details.
 
diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi
index 3c874ee3fe0..930903d5085 100644
--- a/doc/lispref/control.texi
+++ b/doc/lispref/control.texi
@@ -1,6 +1,6 @@
 @c -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Control Structures
diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi
index 204719e942b..308145def55 100644
--- a/doc/lispref/customize.texi
+++ b/doc/lispref/customize.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1997--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1997--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Customization
 @chapter Customization Settings
diff --git a/doc/lispref/debugging.texi b/doc/lispref/debugging.texi
index 9ae40949d1e..d2e4f687f64 100644
--- a/doc/lispref/debugging.texi
+++ b/doc/lispref/debugging.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1994, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1994, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Debugging
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index 4111a86aa7e..5a9a9f95f7b 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -1,6 +1,6 @@
 @c -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1990--1995, 1998--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Display
 @chapter Emacs Display
@@ -346,6 +346,20 @@ The default value is the function that clears the message 
displayed in
 an active minibuffer.
 @end defvar
 
+@defopt set-message-functions
+The value of this user option is a list of functions to be called for
+handling display of echo-area messages.  Each function is called with
+one argument, the text of the message to display.  If the function
+returns a string, that string replaces the original message, and the
+next function in the list is called with the new message text.  If the
+function returns @code{nil}, the next function in the list is called
+with the same text; if the last function in the list returns
+@code{nil}, the message text is displayed in the echo area.  If the
+function returns a non-@code{nil} value that is not a string, the
+message is considered to be handled, and no further functions in the
+list are called.
+@end defopt
+
 @defvar inhibit-message
 When this variable is non-@code{nil}, @code{message} and related functions
 will not use the Echo Area to display messages.
@@ -3043,17 +3057,30 @@ If @var{frame} is @code{t}, this function sets the 
default attributes
 for newly created frames; they will effectively override the attribute
 values specified by @code{defface}.  If @var{frame} is @code{nil},
 this function sets the attributes for all existing frames, as well as
-for newly created frames.  However, if you want to @emph{reset} the
-value of an attribute to @code{unspecified} in a way that also affects
-newly created frames, you @emph{must} explicitly call this function
-with @var{frame} set to @code{t} and the value of the attribute set to
-@code{unspecified} (@emph{not} @code{nil}!@:), in addition to the call
-with @var{frame} set to @code{nil}.  This is because the default
-attributes for newly created frames are merged with the face's spec in
-@code{defface} when a new frame is created, and so having
+for newly created frames.
+
+To @emph{reset} the value of an attribute, that is, to indicate that
+the face doesn't by itself specify a value for the attribute, use the
+special value @code{unspecified} (@emph{not} @code{nil}!@:) for the
+attribute, and set the @var{frame} argument to @code{t}, in addition
+to the call with @var{frame} set to @code{nil}.  This is because the
+default attributes for newly created frames are merged with the face's
+spec in @code{defface} when a new frame is created, and so having
 @code{unspecified} in the default attributes for new frames will be
 unable to override @code{defface}; the special call to this function
 as described above will arrange for @code{defface} to be overridden.
+
+Note that the attribute-value pairs are evaluated in the order they
+are specified, with the exception of the @code{:family} and
+@code{:foundry} attributes, which are evaluated first.  This means
+that if a certain attribute is specified more than once, only the last
+value will be used.  It also means that in some cases a different
+order of attributes will produce different results.  For example, when
+@code{:weight} is placed before @code{:font}, the weight value is
+applied to the current font of the face, and might be rounded to the
+closest available weight of that font, whereas when @code{:font} is
+placed before @code{:weight} the weight value is applied to the
+specified font.
 @end defun
 
   The following commands and functions mostly provide compatibility
@@ -6280,7 +6307,7 @@ embedding large images, comparing to @code{svg-embed}, 
because all the
 work is done directly by librsvg.
 
 @lisp
-;; Embeding /tmp/subdir/rms.jpg and /tmp/another/rms.jpg
+;; Embedding /tmp/subdir/rms.jpg and /tmp/another/rms.jpg
 (svg-embed-base-uri-image svg "subdir/rms.jpg"
            :width "100px" :height "100px"
            :x "50px" :y "75px")
diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi
index 1562a378421..c5be3a40d2c 100644
--- a/doc/lispref/edebug.texi
+++ b/doc/lispref/edebug.texi
@@ -1,6 +1,6 @@
 @comment -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1992--1994, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1992--1994, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 
@@ -171,14 +171,13 @@ of the variable @code{edebug-all-defs}.
 
 @findex eval-region @r{(Edebug)}
 @findex eval-buffer @r{(Edebug)}
-@findex eval-current-buffer @r{(Edebug)}
   If @code{edebug-all-defs} is non-@code{nil}, then the commands
-@code{eval-region}, @code{eval-current-buffer}, and @code{eval-buffer}
-also instrument any definitions they evaluate.  Similarly,
-@code{edebug-all-forms} controls whether @code{eval-region} should
-instrument @emph{any} form, even non-defining forms.  This doesn't apply
-to loading or evaluations in the minibuffer.  The command @kbd{M-x
-edebug-all-forms} toggles this option.
+@code{eval-region}, and @code{eval-buffer} also instrument any
+definitions they evaluate.  Similarly, @code{edebug-all-forms}
+controls whether @code{eval-region} should instrument @emph{any} form,
+even non-defining forms.  This doesn't apply to loading or evaluations
+in the minibuffer.  The command @kbd{M-x edebug-all-forms} toggles
+this option.
 
 @findex edebug-eval-top-level-form
 @findex edebug-defun
@@ -1635,8 +1634,8 @@ but only when you also use Edebug.
 @defopt edebug-all-defs
 If this is non-@code{nil}, normal evaluation of defining forms such as
 @code{defun} and @code{defmacro} instruments them for Edebug.  This
-applies to @code{eval-defun}, @code{eval-region}, @code{eval-buffer},
-and @code{eval-current-buffer}.
+applies to @code{eval-defun}, @code{eval-region} and
+@code{eval-buffer}.
 
 Use the command @kbd{M-x edebug-all-defs} to toggle the value of this
 option.  @xref{Instrumenting}.
@@ -1644,9 +1643,9 @@ option.  @xref{Instrumenting}.
 
 @defopt edebug-all-forms
 If this is non-@code{nil}, the commands @code{eval-defun},
-@code{eval-region}, @code{eval-buffer}, and @code{eval-current-buffer}
-instrument all forms, even those that don't define anything.
-This doesn't apply to loading or evaluations in the minibuffer.
+@code{eval-region} and @code{eval-buffer} instrument all forms, even
+those that don't define anything.  This doesn't apply to loading or
+evaluations in the minibuffer.
 
 Use the command @kbd{M-x edebug-all-forms} to toggle the value of this
 option.  @xref{Instrumenting}.
diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi
index b1bbe5e0a96..c7dc330441f 100644
--- a/doc/lispref/elisp.texi
+++ b/doc/lispref/elisp.texi
@@ -99,7 +99,7 @@ This is the @cite{GNU Emacs Lisp Reference Manual}
 @end ifclear
 corresponding to Emacs version @value{EMACSVER}.
 
-Copyright @copyright{} 1990--1996, 1998--2022 Free Software Foundation,
+Copyright @copyright{} 1990--1996, 1998--2023 Free Software Foundation,
 Inc.
 
 @quotation
@@ -235,7 +235,7 @@ To view this manual in other formats, click
 
 Appendices
 
-* Antinews::                Info for users downgrading to Emacs 27.
+* Antinews::                Info for users downgrading to Emacs 28.
 * GNU Free Documentation License:: The license for this documentation.
 * GPL::                     Conditions for copying and changing GNU Emacs.
 * Tips::                    Advice and coding conventions for Emacs Lisp.
@@ -1364,13 +1364,13 @@ Syntax Tables
 
 Parsing Program Source
 
-* Language Definitions::     Loading tree-sitter language definitions.
+* Language Grammar::         Loading tree-sitter language grammar.
 * Using Parser::             Introduction to parsers.
 * Retrieving Nodes::         Retrieving nodes from a syntax tree.
 * Accessing Node Information:: Accessing node information.
 * Pattern Matching::         Pattern matching with query patterns.
 * Multiple Languages::       Parse text written in multiple languages.
-* Tree-sitter major modes::  Develop major modes using tree-sitter.
+* Tree-sitter Major Modes::  Develop major modes using tree-sitter.
 * Tree-sitter C API::        Compare the C API and the ELisp API.
 
 Syntax Descriptors
diff --git a/doc/lispref/errors.texi b/doc/lispref/errors.texi
index cb05290abd1..db46a6aaf59 100644
--- a/doc/lispref/errors.texi
+++ b/doc/lispref/errors.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1993, 1999, 2001--2022 Free Software Foundation,
+@c Copyright (C) 1990--1993, 1999, 2001--2023 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Standard Errors
diff --git a/doc/lispref/eval.texi b/doc/lispref/eval.texi
index 11c321b32ed..88e899de1e8 100644
--- a/doc/lispref/eval.texi
+++ b/doc/lispref/eval.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1994, 1998, 2001--2022 Free Software Foundation,
+@c Copyright (C) 1990--1994, 1998, 2001--2023 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Evaluation
@@ -819,9 +819,6 @@ output of the output functions is printed in the echo area.
 (@pxref{Unloading}), and defaults to @code{buffer-file-name}
 (@pxref{Buffer File Name}).  If @var{unibyte} is non-@code{nil},
 @code{read} converts strings to unibyte whenever possible.
-
-@findex eval-current-buffer
-@code{eval-current-buffer} is an alias for this command.
 @end deffn
 
 @defopt max-lisp-eval-depth
diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi
index a767f9c28d5..91643530f7f 100644
--- a/doc/lispref/files.texi
+++ b/doc/lispref/files.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Files
@@ -692,11 +692,9 @@ files that the user does not need to know about.
 
 @defvar write-region-inhibit-fsync
 If this variable's value is @code{nil}, @code{write-region} uses the
-@code{fsync} system call after writing a file.  Although this slows
-Emacs down, it lessens the risk of data loss after power failure.  If
-the value is @code{t}, Emacs does not use @code{fsync}.  The default
-value is @code{nil} when Emacs is interactive, and @code{t} when Emacs
-runs in batch mode.  @xref{Files and Storage}.
+@code{fsync} system call after writing a file.  If the value is
+@code{t}, Emacs does not use @code{fsync}.  The default value is
+@code{t}.  @xref{Files and Storage}.
 @end defvar
 
 @defmac with-temp-file file body@dots{}
@@ -2038,17 +2036,28 @@ data already stored elsewhere on secondary storage 
until one file or
 the other is later modified; this will lose both files if the only
 copy on secondary storage is lost due to media failure.  Second, the
 operating system might not write data to secondary storage
-immediately, which will lose the data if power is lost.
+immediately, which will lose the data if power is lost
+or if there is a media failure.
 
 @findex write-region
 Although both sorts of failures can largely be avoided by a suitably
-configured file system, such systems are typically more expensive or
-less efficient.  In more-typical systems, to survive media failure you
+configured system, such systems are typically more expensive or
+less efficient.  In lower-end systems, to survive media failure you
 can copy the file to a different device, and to survive a power
-failure you can use the @code{write-region} function with the
+failure (or be immediately notified of a media failure) you can use
+the @code{write-region} function with the
 @code{write-region-inhibit-fsync} variable set to @code{nil}.
+Although this variable is ordinarily @code{t} because that can
+significantly improve performance, it may make sense to temporarily
+bind it to @code{nil} if using Emacs to implement database-like
+transactions that survive power failure on lower-end systems.
 @xref{Writing to Files}.
 
+On some platforms when Emacs changes a file other processes might not
+be notified of the change immediately.  Setting
+@code{write-region-inhibit-fsync} to @code{nil} may improve
+notification speed in this case, though there are no guarantees.
+
 @node File Names
 @section File Names
 @cindex file names
diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi
index a656964198b..68f31e500bb 100644
--- a/doc/lispref/frames.texi
+++ b/doc/lispref/frames.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Frames
diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi
index 9d5a2661916..3a8eddb93ea 100644
--- a/doc/lispref/functions.texi
+++ b/doc/lispref/functions.texi
@@ -1,6 +1,6 @@
 @c -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Functions
@@ -700,8 +700,10 @@ redefinition from unintentional redefinition.
 @defun defalias name definition &optional doc
 @anchor{Definition of defalias}
 This function defines the symbol @var{name} as a function, with
-definition @var{definition} (which can be any valid Lisp function).
-Its return value is @emph{undefined}.
+definition @var{definition}.  @var{definition} can be any valid Lisp
+function or macro, or a special form (@pxref{Special Forms}), or a
+keymap (@pxref{Keymaps}), or a vector or string (a keyboard macro).
+The return value of @code{defalias} is @emph{undefined}.
 
 If @var{doc} is non-@code{nil}, it becomes the function documentation
 of @var{name}.  Otherwise, any documentation provided by
@@ -713,10 +715,10 @@ If @var{name} has a @code{defalias-fset-function} 
property, however,
 the associated value is used as a function to call in place of @code{fset}.
 
 The proper place to use @code{defalias} is where a specific function
-name is being defined---especially where that name appears explicitly in
-the source file being loaded.  This is because @code{defalias} records
-which file defined the function, just like @code{defun}
-(@pxref{Unloading}).
+or macro name is being defined---especially where that name appears
+explicitly in the source file being loaded.  This is because
+@code{defalias} records which file defined the function, just like
+@code{defun} (@pxref{Unloading}).
 
 By contrast, in programs that manipulate function definitions for other
 purposes, it is better to use @code{fset}, which does not keep such
diff --git a/doc/lispref/hash.texi b/doc/lispref/hash.texi
index 25a56bd7151..4edc761cfab 100644
--- a/doc/lispref/hash.texi
+++ b/doc/lispref/hash.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1999, 2001--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1999, 2001--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Hash Tables
 @chapter Hash Tables
diff --git a/doc/lispref/help.texi b/doc/lispref/help.texi
index ee6fdb0dbbc..de5ed76c7f7 100644
--- a/doc/lispref/help.texi
+++ b/doc/lispref/help.texi
@@ -1,6 +1,6 @@
 @c -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Documentation
diff --git a/doc/lispref/hooks.texi b/doc/lispref/hooks.texi
index 339e1387d2e..513146a3c08 100644
--- a/doc/lispref/hooks.texi
+++ b/doc/lispref/hooks.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1993, 1998, 2001--2022 Free Software Foundation,
+@c Copyright (C) 1990--1993, 1998, 2001--2023 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Standard Hooks
diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi
index 3174056ed83..e1a4613875c 100644
--- a/doc/lispref/internals.texi
+++ b/doc/lispref/internals.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1993, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1993, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node GNU Emacs Internals
diff --git a/doc/lispref/intro.texi b/doc/lispref/intro.texi
index eccc8deb63c..cfe5679b643 100644
--- a/doc/lispref/intro.texi
+++ b/doc/lispref/intro.texi
@@ -1,6 +1,6 @@
 @c -*-coding: utf-8-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1994, 2001--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1990--1994, 2001--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 
 @node Introduction
diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi
index 5882f247948..1c548af1990 100644
--- a/doc/lispref/keymaps.texi
+++ b/doc/lispref/keymaps.texi
@@ -1,6 +1,6 @@
 @c -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1994, 1998--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1990--1994, 1998--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Keymaps
 @chapter Keymaps
diff --git a/doc/lispref/lay-flat.texi b/doc/lispref/lay-flat.texi
index 77820ed68e9..c4262907772 100644
--- a/doc/lispref/lay-flat.texi
+++ b/doc/lispref/lay-flat.texi
@@ -1,6 +1,6 @@
 \input texinfo    @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 2001--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2001--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @c
 @comment %**start of header
diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi
index 30f65e359ab..44b7058e19d 100644
--- a/doc/lispref/lists.texi
+++ b/doc/lispref/lists.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Lists
diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi
index c7fbdac1d76..dbbdc767738 100644
--- a/doc/lispref/loading.texi
+++ b/doc/lispref/loading.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Loading
@@ -1026,6 +1026,61 @@ with a call to @code{provide}.  The order of the 
elements in the
 @code{features} list is not significant.
 @end defvar
 
+@cindex loading and configuring features
+The @code{use-package} macro provides a convenient way of loading a
+feature and configuring it for use.  It provides a means to combine
+requiring a feature, like @code{require} does, with code to be run
+when the feature is actually loaded, similar to load-time hooks
+(@pxref{Hooks for Loading}).  The declarative syntax of
+@code{use-package} makes it exceptionally easy to use in user init
+files.
+
+@defmac use-package feature &rest args
+This macro specifies how to load the named @var{feature} and how to
+configure and customize it for use.  The arguments @var{args} are
+keyword-value pairs.  Some of the important keywords and their values
+are:
+
+@table @code
+@item :init @var{forms}
+Specifies @var{forms} to execute before @var{feature} is loaded.
+
+@item :config @var{forms}
+Specifies @var{forms} to execute after loading @var{feature}.
+
+@item :defer @var{condition}
+If @var{condition} is non-@code{nil}, it specifies to defer loading
+@var{feature} until any of the autoloaded commands or variables of
+@var{feature} are first used.  If @var{condition} is a number @var{n},
+it specifies that @var{feature} should be loaded after @var{n}
+seconds of idle time.
+
+@item :commands @var{commands}@dots{}
+Specifies commands of @var{feature} to be autoloaded.
+
+@item :bind @var{keybindings}@dots{}
+Specifies the @var{keybindings} for @var{feature}s commands.  Each
+binding has the form
+
+@lisp
+(@var{key-sequence} . @var{command})
+@end lisp
+@noindent
+or
+@lisp
+(:map @var{keymap} (@var{key-sequence} . @var{command}))
+@end lisp
+
+@noindent
+where @var{key-sequence} is in the form accepted by the @code{kbd}
+macro (@pxref{Key Sequences}).
+@end table
+
+For more details about @code{use-package}, see @ref{Top,,,
+use-package, use-package User Manual}.
+@end defmac
+
+
 @node Where Defined
 @section Which File Defined a Certain Symbol
 @cindex symbol, where defined
diff --git a/doc/lispref/macros.texi b/doc/lispref/macros.texi
index 26a611613c7..e3961e4bace 100644
--- a/doc/lispref/macros.texi
+++ b/doc/lispref/macros.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998, 2001--2022 Free Software Foundation,
+@c Copyright (C) 1990--1995, 1998, 2001--2023 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Macros
diff --git a/doc/lispref/maps.texi b/doc/lispref/maps.texi
index d18b553dc19..7da704c79b6 100644
--- a/doc/lispref/maps.texi
+++ b/doc/lispref/maps.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1993, 1999, 2001--2022 Free Software Foundation,
+@c Copyright (C) 1990--1993, 1999, 2001--2023 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Standard Keymaps
diff --git a/doc/lispref/markers.texi b/doc/lispref/markers.texi
index 8362799b621..0b98eee137a 100644
--- a/doc/lispref/markers.texi
+++ b/doc/lispref/markers.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Markers
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index 332a453619c..18125c372ce 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Minibuffers
diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index c44938f3929..dffd6653369 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Modes
@@ -2841,6 +2841,35 @@ function uses @code{imenu-generic-expression} instead.
 Setting this variable makes it buffer-local in the current buffer.
 @end defvar
 
+If built with tree-sitter, Emacs can automatically generate an Imenu
+index if the major mode sets relevant variables.
+
+@defvar treesit-simple-imenu-settings
+This variable instructs Emacs how to generate Imenu indexes.  It
+should be a list of @w{(@var{category} @var{regexp} @var{pred}
+@var{name-fn})}.
+
+@var{category} should be the name of a category, like "Function",
+"Class", etc.  @var{regexp} should be a regexp matching the type of
+nodes that belong to @var{category}.  @var{pred} should be either
+@code{nil} or a function that takes a node as the argument.  It should
+return non-@code{nil} if the node is a valid node for @var{category},
+or @code{nil} if not.
+
+@var{category} could also be @code{nil}.  In which case the entries
+matched by @var{regexp} and @var{pred} are not grouped under
+@var{category}.
+
+@var{name-fn} should be either @var{nil} or a function that takes a
+defun node and returns the name of that defun, e.g., the function name
+for a function definition.  If @var{name-fn} is @var{nil},
+@code{treesit-defun-name} (@pxref{Tree-sitter Major Modes}) is used
+instead.
+
+@code{treesit-major-mode-setup} (@pxref{Tree-sitter Major Modes})
+automatically sets up Imenu if this variable is non-@code{nil}.
+@end defvar
+
 @node Font Lock Mode
 @section Font Lock Mode
 @cindex Font Lock mode
@@ -4023,11 +4052,12 @@ This function takes a series of @var{query-spec}s, 
where each
 @var{:keyword}/@var{value} pairs.  Each @var{query} is a
 tree-sitter query in either the string, s-expression or compiled form.
 
+@c FIXME: Cross-ref treesit-font-lock-level to user manual.
 For each @var{query}, the @var{:keyword}/@var{value} pairs that
 precede it add meta information to it.  The @code{:lang} keyword
 declares @var{query}'s language.  The @code{:feature} keyword sets the
 feature name of @var{query}.  Users can control which features are
-enabled with @code{font-lock-maximum-decoration} and
+enabled with @code{treesit-font-lock-level} and
 @code{treesit-font-lock-feature-list} (described below).  These two
 keywords are mandatory.
 
@@ -4067,10 +4097,11 @@ priority.  If a capture name is neither a face nor a 
function, it is
 ignored.
 @end defun
 
+@c FIXME: Cross-ref treesit-font-lock-level to user manual.
 @defvar treesit-font-lock-feature-list
 This is a list of lists of feature symbols.  Each element of the list
 is a list that represents a decoration level.
-@code{font-lock-maximum-decoration} controls which levels are
+@code{treesit-font-lock-level} controls which levels are
 activated.
 
 Each element of the list is a list of the form @w{@code{(@var{feature}
@@ -5024,6 +5055,14 @@ comment-start token.  Comment-start tokens are defined 
by regular
 expression @code{comment-start-skip}.  This function assumes
 @var{parent} is the comment node.
 
+@item prev-adaptive-prefix
+This anchor is a function that is called with 3 arguments: @var{node},
+@var{parent}, and @var{bol}.  It tries to go to the beginning of the
+previous non-empty line, and matches @code{adaptive-fill-regexp}.  If
+there is a match, this function returns the end of the match,
+otherwise it returns nil.  This anchor is useful for a
+@code{indent-relative}-like indent behavior for block comments.
+
 @end ftable
 @end defvar
 
@@ -5043,7 +5082,7 @@ shown in red color.  @c Are colors customizable? faces?
 @end defun
 
 It is also helpful to use @code{treesit-inspect-mode} (@pxref{Language
-Definitions}) when writing indentation rules.
+Grammar}) when writing indentation rules.
 
 @node Desktop Save Mode
 @section Desktop Save Mode
diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi
index 006966daedb..7e5590ed8ec 100644
--- a/doc/lispref/nonascii.texi
+++ b/doc/lispref/nonascii.texi
@@ -1,6 +1,6 @@
 @c -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1998--1999, 2001--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1998--1999, 2001--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Non-ASCII Characters
 @chapter Non-@acronym{ASCII} Characters
diff --git a/doc/lispref/numbers.texi b/doc/lispref/numbers.texi
index 2c7a1d32668..9bfb771fc07 100644
--- a/doc/lispref/numbers.texi
+++ b/doc/lispref/numbers.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Numbers
diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi
index 7b5e9adee29..99a3c073971 100644
--- a/doc/lispref/objects.texi
+++ b/doc/lispref/objects.texi
@@ -1,6 +1,6 @@
 @c -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Lisp Data Types
diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi
index 3e16ac0eb49..3be7036f637 100644
--- a/doc/lispref/os.texi
+++ b/doc/lispref/os.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node System Interface
diff --git a/doc/lispref/package.texi b/doc/lispref/package.texi
index 4cb0c3214a7..2952e7dfcfc 100644
--- a/doc/lispref/package.texi
+++ b/doc/lispref/package.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 2010--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2010--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Packaging
 @chapter Preparing Lisp code for distribution
diff --git a/doc/lispref/parsing.texi b/doc/lispref/parsing.texi
index adb4c5e6e0c..19a22c121de 100644
--- a/doc/lispref/parsing.texi
+++ b/doc/lispref/parsing.texi
@@ -1,6 +1,6 @@
 @c -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 2021-2022 Free Software Foundation, Inc.
+@c Copyright (C) 2021--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Parsing Program Source
 @chapter Parsing Program Source
@@ -30,7 +30,7 @@ available for the current Emacs session.
 
 To be able to parse the program source using the tree-sitter library
 and access the syntax tree of the program, a Lisp program needs to
-load a language definition library, and create a parser for that
+load a language grammar library, and create a parser for that
 language and the current buffer.  After that, the Lisp program can
 query the parser about specific nodes of the syntax tree.  Then, it
 can access various kinds of information about each node, and search
@@ -39,37 +39,37 @@ explains how to do all this, and also how a Lisp program 
can work with
 source files that mix multiple programming languages.
 
 @menu
-* Language Definitions::     Loading tree-sitter language definitions.
+* Language Grammar::         Loading tree-sitter language grammar.
 * Using Parser::             Introduction to parsers.
 * Retrieving Nodes::         Retrieving nodes from a syntax tree.
 * Accessing Node Information:: Accessing node information.
 * Pattern Matching::         Pattern matching with query patterns.
 * Multiple Languages::       Parse text written in multiple languages.
-* Tree-sitter major modes::  Develop major modes using tree-sitter.
+* Tree-sitter Major Modes::  Develop major modes using tree-sitter.
 * Tree-sitter C API::        Compare the C API and the ELisp API.
 @end menu
 
-@node Language Definitions
-@section Tree-sitter Language Definitions
-@cindex language definitions, for tree-sitter
+@node Language Grammar
+@section Tree-sitter Language Grammar
+@cindex language grammar, for tree-sitter
 
-@heading Loading a language definition
-@cindex loading language definition for tree-sitter
+@heading Loading a language grammar
+@cindex loading language grammar for tree-sitter
 
 @cindex language argument, for tree-sitter
-Tree-sitter relies on language definitions to parse text in that
-language.  In Emacs, a language definition is represented by a symbol.
-For example, the C language definition is represented as the symbol
+Tree-sitter relies on language grammar to parse text in that
+language.  In Emacs, a language grammar is represented by a symbol.
+For example, the C language grammar is represented as the symbol
 @code{c}, and @code{c} can be passed to tree-sitter functions as the
 @var{language} argument.
 
 @vindex treesit-extra-load-path
 @vindex treesit-load-language-error
 @vindex treesit-load-suffixes
-Tree-sitter language definitions are distributed as dynamic libraries.
-In order to use a language definition in Emacs, you need to make sure
+Tree-sitter language grammar are distributed as dynamic libraries.
+In order to use a language grammar in Emacs, you need to make sure
 that the dynamic library is installed on the system.  Emacs looks for
-language definitions in several places, in the following order:
+language grammar in several places, in the following order:
 
 @itemize @bullet
 @item
@@ -91,12 +91,12 @@ that signal could be one of the following:
 
 @table @code
 @item (not-found @var{error-msg} @dots{})
-This means that Emacs could not find the language definition library.
+This means that Emacs could not find the language grammar library.
 @item (symbol-error @var{error-msg})
 This means that Emacs could not find in the library the expected function
-that every language definition library should export.
+that every language grammar library should export.
 @item (version-mismatch @var{error-msg})
-This means that the version of language definition library is incompatible
+This means that the version of language grammar library is incompatible
 with that of the tree-sitter library.
 @end table
 
@@ -105,7 +105,7 @@ In all of these cases, @var{error-msg} might provide 
additional
 details about the failure.
 
 @defun treesit-language-available-p language &optional detail
-This function returns non-@code{nil} if the language definitions for
+This function returns non-@code{nil} if the language grammar for
 @var{language} exist and can be loaded.
 
 If @var{detail} is non-@code{nil}, return @code{(t . nil)} when
@@ -119,7 +119,7 @@ By convention, the file name of the dynamic library for 
@var{language} is
 @file{libtree-sitter-@var{language}.@var{ext}}, where @var{ext} is the
 system-specific extension for dynamic libraries.  Also by convention,
 the function provided by that library is named
-@code{tree_sitter_@var{language}}.  If a language definition library
+@code{tree_sitter_@var{language}}.  If a language grammar library
 doesn't follow this convention, you should add an entry
 
 @example
@@ -140,19 +140,25 @@ to the list in the variable 
@code{treesit-load-name-override-list}, where
 for a language that considers itself too ``cool'' to abide by
 conventions.
 
-@cindex language-definition version, compatibility
-@defun treesit-language-version &optional min-compatible
-This function returns the version of the language-definition
+@cindex language grammar version, compatibility
+@defun treesit-library-abi-version &optional min-compatible
+This function returns the version of the language grammar
 Application Binary Interface (@acronym{ABI}) supported by the
 tree-sitter library.  By default, it returns the latest ABI version
 supported by the library, but if @var{min-compatible} is
 non-@code{nil}, it returns the oldest ABI version which the library
-still can support.  Language definition libraries must be built for
+still can support.  language grammar libraries must be built for
 ABI versions between the oldest and the latest versions supported by
 the tree-sitter library, otherwise the library will be unable to load
 them.
 @end defun
 
+@defun treesit-language-abi-version language
+This function returns the @acronym{ABI} version of the language
+grammar library loaded by Emacs for @var{language}.  If @var{language}
+is unavailable, this function returns @code{nil}.
+@end defun
+
 @heading Concrete syntax tree
 @cindex syntax tree, concrete
 
@@ -210,7 +216,7 @@ punctuation characters like bracket @samp{]}, and keywords 
like
 @cindex field name, tree-sitter
 @cindex tree-sitter node field name
 @anchor{tree-sitter node field name}
-To make the syntax tree easier to analyze, many language definitions
+To make the syntax tree easier to analyze, many language grammar
 assign @dfn{field names} to child nodes.  For example, a
 @code{function_definition} node could have a @code{declarator} and a
 @code{body}:
@@ -266,13 +272,13 @@ parser in @code{(treesit-parser-list)} (@pxref{Using 
Parser}).
 @heading Reading the grammar definition
 @cindex reading grammar definition, tree-sitter
 
-Authors of language definitions define the @dfn{grammar} of a
+Authors of language grammar define the @dfn{grammar} of a
 programming language, which determines how a parser constructs a
 concrete syntax tree out of the program text.  In order to use the
 syntax tree effectively, you need to consult the @dfn{grammar file}.
 
 The grammar file is usually @file{grammar.js} in a language
-definition's project repository.  The link to a language definition's
+grammar's project repository.  The link to a language grammar's
 home page can be found on
 @uref{https://tree-sitter.github.io/tree-sitter, tree-sitter's
 homepage}.
@@ -350,7 +356,7 @@ makes any node matched by @code{preprocessor_call_exp} 
appear as
 @end table
 
 Below are grammar functions of lesser importance for reading a
-language definition.
+language grammar.
 
 @table @code
 @item token(@var{rule})
@@ -393,17 +399,11 @@ tree-sitter can be activated.  Major modes should check 
this value
 when deciding whether to enable tree-sitter features.
 @end defvar
 
-@defun treesit-can-enable-p
-This function checks whether the current buffer is suitable for
-activating tree-sitter features.  It basically checks
-@code{treesit-available-p} and @code{treesit-max-buffer-size}.
-@end defun
-
 @cindex creating tree-sitter parsers
 @cindex tree-sitter parser, creating
 @defun treesit-parser-create language &optional buffer no-reuse
 Create a parser for the specified @var{buffer} and @var{language}
-(@pxref{Language Definitions}).  If @var{buffer} is omitted or
+(@pxref{Language Grammar}).  If @var{buffer} is omitted or
 @code{nil}, it stands for the current buffer.
 
 By default, this function reuses a parser if one already exists for
@@ -511,7 +511,9 @@ notification.
 
 Every time a parser reparses a buffer, it compares the old and new
 parse-tree, computes the ranges in which nodes have changed, and
-passes the ranges to notifier functions.
+passes the ranges to notifier functions.  Note that the initial parse
+is also considered a ``change'', so notifier functions are called on
+the initial parse, with range being the whole buffer.
 
 @defun treesit-parser-add-notifier parser function
 This function adds @var{function} to @var{parser}'s list of
@@ -576,12 +578,12 @@ leaf node after @var{pos}.
 Finally, if there is no leaf node after @var{pos}, return the first
 leaf node before @var{pos}.
 
-When @var{parser-or-lang} is @code{nil} or omitted, this function uses
-the first parser in @code{(treesit-parser-list)} of the current
-buffer.  If @var{parser-or-lang} is a parser object, it uses that
-parser; if @var{parser-or-lang} is a language, it finds the first
-parser using that language in @code{(treesit-parser-list)}, and uses
-that.
+If @var{parser-or-lang} is a parser object, this function uses that
+parser; if @var{parser-or-lang} is a language, this function uses the
+first parser for that language in the current buffer, or creates one
+if none exists; if @var{parser-or-lang} is @code{nil}, this function
+tries to guess the language at @var{pos} by calling
+@code{treesit-language-at} (@pxref{Multiple Languages}).
 
 If this function cannot find a suitable node to return, it returns
 @code{nil}.
@@ -610,13 +612,14 @@ is at or after @var{end}.
 inside any top-level construct (function definition, etc.) most
 probably will give you the root node, because the root node is the
 smallest node that covers that empty line.  Most of the time, you want
-to use @code{treesit-node-at}, described above, instead.
+to use @code{treesit-node-at} instead.
 
-When @var{parser-or-lang} is @code{nil}, this function uses the first
-parser in @code{(treesit-parser-list)} of the current buffer.  If
-@var{parser-or-lang} is a parser object, it uses that parser; if
-@var{parser-or-lang} is a language, it finds the first parser using
-that language in @code{(treesit-parser-list)}, and uses that.
+If @var{parser-or-lang} is a parser object, this function uses that
+parser; if @var{parser-or-lang} is a language, this function uses the
+first parser for that language in the current buffer, or creates one
+if none exists; if @var{parser-or-lang} is @code{nil}, this function
+tries to guess the language at @var{beg} by calling
+@code{treesit-language-at}.
 
 If @var{named} is non-@code{nil}, this function looks for a named node
 only (@pxref{tree-sitter named node, named node}).
@@ -628,9 +631,10 @@ This function returns the root node of the syntax tree 
generated by
 @end defun
 
 @defun treesit-buffer-root-node &optional language
-This function finds the first parser that uses @var{language} in
-@code{(treesit-parser-list)} of the current buffer, and returns the
-root node generated by that parser.  If it cannot find an appropriate
+This function finds the first parser for @var{language} in the current
+buffer, or creates one if none exists, and returns the root node
+generated by that parser.  If @var{language} is omitted, it uses the
+first parser in the parser list.  If it cannot find an appropriate
 parser, it returns @code{nil}.
 @end defun
 
@@ -647,6 +651,10 @@ it, or query for information about this node.
 
 @defun treesit-node-parent node
 This function returns the immediate parent of @var{node}.
+
+If @var{node} is more than 1000 levels deep in a parse tree, the
+return value is undefined.  Currently it returns @var{nil}, but that
+could change in the future.
 @end defun
 
 @defun treesit-node-child node n &optional named
@@ -683,7 +691,7 @@ This function finds the previous sibling of @var{node}.  If
 @cindex nodes, by field name
 @cindex syntax tree nodes, by field name
 
-To make the syntax tree easier to analyze, many language definitions
+To make the syntax tree easier to analyze, many language grammar
 assign @dfn{field names} to child nodes (@pxref{tree-sitter node field
 name, field name}).  For example, a @code{function_definition} node
 could have a @code{declarator} node and a @code{body} node.
@@ -927,7 +935,7 @@ tree.
 
 In general, nodes in a concrete syntax tree fall into two categories:
 @dfn{named nodes} and @dfn{anonymous nodes}.  Whether a node is named
-or anonymous is determined by the language definition
+or anonymous is determined by the language grammar
 (@pxref{tree-sitter named node, named node}).
 
 @cindex tree-sitter missing node
@@ -966,7 +974,7 @@ Named nodes have ``types'' (@pxref{tree-sitter node type, 
node type}).
 For example, a named node can be a @code{string_literal} node, where
 @code{string_literal} is its type.  The type of an anonymous node is
 just the text that the node represents; e.g., the type of a @samp{,}
-node 480is just @samp{,}.
+node is just @samp{,}.
 
 This function returns @var{node}'s type as a string.
 @end defun
@@ -1266,10 +1274,11 @@ example, with the following pattern:
 @end example
 
 @noindent
-tree-sitter only matches arrays where the first element equals to
-the last element.  To attach a predicate to a pattern, we need to
-group them together.  A predicate always starts with a @samp{#}.
-Currently there are two predicates, @code{#equal} and @code{#match}.
+tree-sitter only matches arrays where the first element equals to the
+last element.  To attach a predicate to a pattern, we need to group
+them together.  A predicate always starts with a @samp{#}.  Currently
+there are three predicates, @code{#equal}, @code{#match}, and
+@code{#pred}.
 
 @deffn Predicate equal arg1 arg2
 Matches if @var{arg1} equals to @var{arg2}.  Arguments can be either
@@ -1282,6 +1291,11 @@ Matches if the text that @var{capture-name}'s node spans 
in the buffer
 matches regular expression @var{regexp}.  Matching is case-sensitive.
 @end deffn
 
+@deffn Predicate pred fn &rest nodes
+Matches if function @var{fn} returns non-@code{nil} when passed each
+node in @var{nodes} as arguments.
+@end deffn
+
 Note that a predicate can only refer to capture names that appear in
 the same pattern.  Indeed, it makes little sense to refer to capture
 names in other patterns.
@@ -1661,7 +1675,7 @@ language of the buffer text at @var{pos}.  This variable 
is used by
 @code{treesit-language-at}.
 @end defvar
 
-@node Tree-sitter major modes
+@node Tree-sitter Major Modes
 @section Developing major modes with tree-sitter
 @cindex major mode, developing with tree-sitter
 
@@ -1696,8 +1710,8 @@ whether tree-sitter can be activated in this mode.
 This function checks for conditions for activating tree-sitter.  It
 checks whether Emacs was built with tree-sitter, whether the buffer's
 size is not too large for tree-sitter to handle it, and whether the
-language definition for @var{language} is available on the system
-(@pxref{Language Definitions}).
+language grammar for @var{language} is available on the system
+(@pxref{Language Grammar}).
 
 This function emits a warning if tree-sitter cannot be activated.  If
 @var{quiet} is @code{message}, the warning is turned into a message;
@@ -1716,15 +1730,25 @@ This function activates some tree-sitter features for a 
major mode.
 Currently, it sets up the following features:
 @itemize
 @item
-If @code{treesit-font-lock-settings} is non-@code{nil}, it sets up
-fontification.
+If @code{treesit-font-lock-settings} (@pxref{Parser-based Font Lock})
+is non-@code{nil}, it sets up fontification.
+
 @item
-If @code{treesit-simple-indent-rules} is non-@code{nil}, it sets up
-indentation.
+If @code{treesit-simple-indent-rules} (@pxref{Parser-based Font Lock})
+is non-@code{nil}, it sets up indentation.
+
 @item
 If @code{treesit-defun-type-regexp} is non-@code{nil}, it sets up
 navigation functions for @code{beginning-of-defun} and
 @code{end-of-defun}.
+
+@item
+If @code{treesit-defun-name-function} is non-@code{nil}, it sets up
+add-log functions used by @code{add-log-current-defun}.
+
+@item
+If @code{treesit-simple-imenu-settings} (@pxref{Imenu}) is
+non-@code{nil}, it sets up Imenu.
 @end itemize
 @end defun
 
@@ -1735,6 +1759,55 @@ For more information of these built-in tree-sitter 
features,
 For supporting mixing of multiple languages in a major mode,
 @pxref{Multiple Languages}.
 
+Besides @code{beginning-of-defun} and @code{end-of-defun}, Emacs
+provides some additional functions for working with defuns:
+@code{treesit-defun-at-point} returns the defun node at point, and
+@code{treesit-defun-name} returns the name of a defun node.
+
+@c FIXME: Cross-reference to treesit-defun-tactic once we have it in
+@c the user manual.
+@defun treesit-defun-at-point
+This function returns the defun node at point, or @code{nil} if none
+is found.  It respects @code{treesit-defun-tactic}: if its value is
+@code{top-level}, this function returns the top-level defun, and if
+its value is @code{nested}, it returns the immediate enclosing defun.
+
+This function requires @code{treesit-defun-type-regexp} to work.  If
+it is @code{nil}, this function simply returns @code{nil}.
+@end defun
+
+@defun treesit-defun-name node
+This function returns the defun name of @var{node}.  It returns
+@code{nil} if there is no defun name for @var{node}, or if @var{node}
+is not a defun node, or if @var{node} is @code{nil}.
+
+Depending on the language and major mode, the defun names are names
+like function name, class name, struct name, etc.
+
+If @code{treesit-defun-name-function} is @code{nil}, this function
+always returns @code{nil}.
+@end defun
+
+@defvar treesit-defun-name-function
+If non-@code{nil}, this variable's value should be a function that is
+called with a node as its argument, and returns the defun name of the
+node.  The function should have the same semantic as
+@code{treesit-defun-name}: if the node is not a defun node, or the
+node is a defun node but doesn't have a name, or the node is
+@code{nil}, it should return @code{nil}.
+@end defvar
+
+@defvar treesit-defun-type-regexp
+This variable determines which nodes are considered defuns by Emacs.
+It can be a regexp that matches the type of defun nodes.
+
+Sometimes not all nodes matched by the regexp are valid defuns.
+Therefore, this variable can also be a cons cell of the form
+@w{(@var{regexp} . @var{pred})}, where @var{pred} should be a function
+that takes a node as its argument, and returns @code{t} if the node is
+valid defun, or @code{nil} if it is not valid.
+@end defvar
+
 @node Tree-sitter C API
 @section Tree-sitter C API Correspondence
 
@@ -1759,7 +1832,7 @@ Using (row, column) coordinates as position.
 Updating a node with changes.  (In Emacs, retrieve a new node instead
 of updating the existing one.)
 @item
-Querying statics of a language definition.
+Querying statics of a language grammar.
 @end itemize
 
 In addition, Emacs makes some changes to the C API to make the API more
diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi
index 7acf2d052a8..f3824436246 100644
--- a/doc/lispref/positions.texi
+++ b/doc/lispref/positions.texi
@@ -1,6 +1,6 @@
 @c -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1990--1995, 1998--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Positions
 @chapter Positions
@@ -848,25 +848,14 @@ The value of this variable is a regexp matching the node 
type of defun
 nodes.  (For ``node'' and ``node type'', @pxref{Parsing Program Source}.)
 
 For example, @code{python-mode} sets this variable to a regexp that
-matches either @code{function_definition} or @code{class_definition}.
+matches either @code{"function_definition"} or @code{"class_definition"}.
 @end defvar
 
-@defvar treesit-defun-prefer-top-level
-If this variable is non-@code{nil}, Emacs skips nested defuns, when it
-looks for beginning and end of a defun, and prefers to go to the
-top-level defun instead.
-
-In some languages, a defun could be nested in another one.  By default,
-Emacs stops at the first defun it encounters.  But if this variable's
-value is @code{t}, whenever Emacs finds a defun node, it tries to go
-up the parse tree until it finds the top-level defun.
-
-This variable can also be a list of cons cells of the form
-@w{@code{(@var{from} . @var{to}))}}, where @var{from} and @var{to} are
-regexps matching tree-sitter node types.  When Emacs finds a defun
-node whose type matches any of the @var{from} regexps in the list, it
-then tries to go up the parse tree until it finds a higher-level node
-matching the corresponding @var{to} regexp.
+@defvar treesit-defun-tactic
+This variable determines how Emacs treats nested defuns.  If the
+value is @code{top-level}, navigation functions only move across
+top-level defuns, if the value is @code{nested}, navigation functions
+recognize nested defuns.
 @end defvar
 
 @node Skipping Characters
diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi
index adc6909aca6..50e67475d8e 100644
--- a/doc/lispref/processes.texi
+++ b/doc/lispref/processes.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Processes
diff --git a/doc/lispref/records.texi b/doc/lispref/records.texi
index 14084851006..26c6f30a6b5 100644
--- a/doc/lispref/records.texi
+++ b/doc/lispref/records.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 2017--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2017--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Records
 @chapter Records
diff --git a/doc/lispref/searching.texi b/doc/lispref/searching.texi
index ad7f2856de8..06b3556c855 100644
--- a/doc/lispref/searching.texi
+++ b/doc/lispref/searching.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Searching and Matching
diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi
index 58f2703c8b5..7011b5c72af 100644
--- a/doc/lispref/sequences.texi
+++ b/doc/lispref/sequences.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Sequences Arrays Vectors
diff --git a/doc/lispref/streams.texi b/doc/lispref/streams.texi
index bba1dc2eee9..89046a68249 100644
--- a/doc/lispref/streams.texi
+++ b/doc/lispref/streams.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1994, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1994, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Read and Print
diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi
index 2f277ea73ae..ca18f0a9cc1 100644
--- a/doc/lispref/strings.texi
+++ b/doc/lispref/strings.texi
@@ -1,6 +1,6 @@
 @c -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Strings and Characters
diff --git a/doc/lispref/symbols.texi b/doc/lispref/symbols.texi
index 2ef4f8c2912..183367c0cda 100644
--- a/doc/lispref/symbols.texi
+++ b/doc/lispref/symbols.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Symbols
diff --git a/doc/lispref/syntax.texi b/doc/lispref/syntax.texi
index e84b901eaa9..2a4bd6f1585 100644
--- a/doc/lispref/syntax.texi
+++ b/doc/lispref/syntax.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Syntax Tables
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index ef938e88ecf..326c111cac5 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1990--1995, 1998--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Text
 @chapter Text
@@ -5351,7 +5351,7 @@ called @var{gif}, you have to mark it specially to let
 
 @end defun
 
-@defun sqlite-select db query &optional values result-type
+@defun sqlite-select db query &optional values return-type
 Select some data from @var{db} and return them.  For instance:
 
 @lisp
diff --git a/doc/lispref/threads.texi b/doc/lispref/threads.texi
index 35513f7262d..43cf0da3508 100644
--- a/doc/lispref/threads.texi
+++ b/doc/lispref/threads.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 2012--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2012--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Threads
 @chapter Threads
diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi
index 3a1f6de12b2..f594d684338 100644
--- a/doc/lispref/tips.texi
+++ b/doc/lispref/tips.texi
@@ -1,6 +1,6 @@
 @c -*- mode: texinfo; coding: utf-8 -*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1993, 1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1993, 1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Tips
@@ -689,6 +689,10 @@ line.  This looks nice in the source code, but looks 
bizarre when users
 view the documentation.  Remember that the indentation before the
 starting double-quote is not part of the string!
 
+@cindex quoting apostrophe and grave accent in doc strings
+@cindex apostrophe, quoting in documentation strings
+@cindex grave accent, quoting in documentation strings
+@cindex escaping apostrophe and grave accent in doc strings
 @item
 When documentation should display an ASCII apostrophe or grave accent,
 use @samp{\\='} or @samp{\\=`} in the documentation string literal so
@@ -804,7 +808,7 @@ Finally, to create a hyperlink to URLs, write the 
single-quoted URL,
 preceded by @samp{URL}.  For example,
 
 @smallexample
-The GNU project wesite has more information (see URL
+The GNU project website has more information (see URL
 `https://www.gnu.org/').
 @end smallexample
 
diff --git a/doc/lispref/two-volume-cross-refs.txt 
b/doc/lispref/two-volume-cross-refs.txt
index e7bd4706c60..741efe3baf8 100644
--- a/doc/lispref/two-volume-cross-refs.txt
+++ b/doc/lispref/two-volume-cross-refs.txt
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 See end for copying conditions.
 
 Two Volume Cross References
diff --git a/doc/lispref/two-volume.make b/doc/lispref/two-volume.make
index f401d4a1f2a..c412820748c 100644
--- a/doc/lispref/two-volume.make
+++ b/doc/lispref/two-volume.make
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2022 Free Software Foundation, Inc.
+# Copyright (C) 2007-2023 Free Software Foundation, Inc.
 # See end for copying conditions.
 
 # although it would be nice to use tex rather than pdftex to avoid
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index 12dd58c85b3..39d0906f6c4 100644
--- a/doc/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1990--1995, 1998--2023 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Variables
 @chapter Variables
diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi
index 5b50d5f296c..441e7f1b16d 100644
--- a/doc/lispref/windows.texi
+++ b/doc/lispref/windows.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2023 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Windows
diff --git a/doc/man/ChangeLog.1 b/doc/man/ChangeLog.1
index ff675d89474..ccc53810547 100644
--- a/doc/man/ChangeLog.1
+++ b/doc/man/ChangeLog.1
@@ -176,7 +176,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2007-2022 Free Software Foundation, Inc.
+  Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/man/ebrowse.1 b/doc/man/ebrowse.1
index 7bacdbd93e1..4ce96a44852 100644
--- a/doc/man/ebrowse.1
+++ b/doc/man/ebrowse.1
@@ -82,7 +82,7 @@ should give you access to the complete manual.
 was written by Gerd Moellmann.
 .
 .SH COPYING
-Copyright 2008-2022 Free Software Foundation, Inc.
+Copyright 2008-2023 Free Software Foundation, Inc.
 .PP
 Permission is granted to make and distribute verbatim copies of this
 document provided the copyright notice and this permission notice are
diff --git a/doc/man/emacs.1.in b/doc/man/emacs.1.in
index 7b2b5539795..66b0741c0f9 100644
--- a/doc/man/emacs.1.in
+++ b/doc/man/emacs.1.in
@@ -664,7 +664,7 @@ For detailed credits and acknowledgments, see the GNU Emacs 
manual.
 .
 .
 .SH COPYING
-Copyright 1995, 1999-2022 Free Software Foundation, Inc.
+Copyright 1995, 1999-2023 Free Software Foundation, Inc.
 .PP
 Permission is granted to make and distribute verbatim copies of this
 document provided the copyright notice and this permission notice are
diff --git a/doc/man/etags.1 b/doc/man/etags.1
index d3d58b82123..27870b67d70 100644
--- a/doc/man/etags.1
+++ b/doc/man/etags.1
@@ -290,7 +290,7 @@ Stallman.
 .BR vi ( 1 ).
 
 .SH COPYING
-Copyright 1992, 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright 1992, 1999, 2001-2023 Free Software Foundation, Inc.
 .PP
 Permission is granted to make and distribute verbatim copies of this
 document provided the copyright notice and this permission notice are
diff --git a/doc/misc/ChangeLog.1 b/doc/misc/ChangeLog.1
index 1c5e7c1e2fd..2cd3c3f6b54 100644
--- a/doc/misc/ChangeLog.1
+++ b/doc/misc/ChangeLog.1
@@ -6012,7 +6012,7 @@
        (Built-in table editor): Document M-e and M-a navigate
        inside table field.
        (Stuck projects): Docment that projects identified as
-       un-stuck will still be searchd for stuck sub-projects.
+       un-stuck will still be searched for stuck sub-projects.
        (Paragraphs): Document centering.
        (Creating timestamps, Agenda commands): Document new
        behavior when changing time stamps.
@@ -12111,7 +12111,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in
index 60b14172c37..1831bbbb73f 100644
--- a/doc/misc/Makefile.in
+++ b/doc/misc/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1994, 1996-2022 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1996-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi
index 83728be0a54..03484950e01 100644
--- a/doc/misc/auth.texi
+++ b/doc/misc/auth.texi
@@ -9,7 +9,7 @@
 @copying
 This file describes the Emacs auth-source library.
 
-Copyright @copyright{} 2008--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2008--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/autotype.texi b/doc/misc/autotype.texi
index 93c65692d01..4110b60a774 100644
--- a/doc/misc/autotype.texi
+++ b/doc/misc/autotype.texi
@@ -11,7 +11,7 @@
 @c  @cindex autotypist
 
 @copying
-Copyright @copyright{} 1994--1995, 1999, 2001--2022 Free Software
+Copyright @copyright{} 1994--1995, 1999, 2001--2023 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/bovine.texi b/doc/misc/bovine.texi
index 9d9aa48488a..10b1a1fc654 100644
--- a/doc/misc/bovine.texi
+++ b/doc/misc/bovine.texi
@@ -24,7 +24,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 1999--2004, 2012--2022 Free Software Foundation,
+Copyright @copyright{} 1999--2004, 2012--2023 Free Software Foundation,
 Inc.
 
 @quotation
diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi
index 89a340e7343..5424995534e 100644
--- a/doc/misc/calc.texi
+++ b/doc/misc/calc.texi
@@ -95,7 +95,7 @@ This file documents Calc, the GNU Emacs calculator, included 
with
 GNU Emacs @value{EMACSVER}.
 @end ifnotinfo
 
-Copyright @copyright{} 1990--1991, 2001--2022 Free Software Foundation,
+Copyright @copyright{} 1990--1991, 2001--2023 Free Software Foundation,
 Inc.
 
 @quotation
@@ -11040,7 +11040,8 @@ the year even for older dates.   The customizable 
variable
 have Calc's date forms switch from the Julian to Gregorian calendar at
 any specified date.
 
-Today's timekeepers introduce an occasional ``leap second''.
+A few platforms support leap seconds, such as the time stamp
+1972-06-30 23:59:60 UTC, an extra second appended to June 1972.
 These do not occur regularly and Calc does not take these minor
 effects into account.  (If it did, it would have to report a
 non-integer number of days between, say,
@@ -17340,8 +17341,12 @@ it can be a variable which is a time zone name in 
upper- or lower-case.
 For example @samp{tzone(PST) = tzone(8)} and @samp{tzone(pdt) = tzone(7)}
 (for Pacific standard and daylight saving times, respectively).
 
-North American and European time zone names are defined as follows;
-note that for each time zone there is one name for standard time,
+North American and European time zone names are defined as follows.
+These names are obsolescent and new code should not rely on them:
+the @samp{YST}-related names have disagreed with time in Yukon since 1973,
+and other names could well become confusing or wrong in the future
+as countries change their time zone rules.
+For each time zone there is one name for standard time,
 another for daylight saving time, and a third for ``generalized'' time
 in which the daylight saving adjustment is computed from context.
 
@@ -17363,7 +17368,7 @@ To define time zone names that do not appear in the 
above table,
 you must modify the Lisp variable @code{math-tzone-names}.  This
 is a list of lists describing the different time zone names; its
 structure is best explained by an example.  The three entries for
-Pacific Time look like this:
+circa-2022 US Pacific Time look like this:
 
 @smallexample
 @group
diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi
index a8f5248c4c8..3a808619868 100644
--- a/doc/misc/cc-mode.texi
+++ b/doc/misc/cc-mode.texi
@@ -167,7 +167,7 @@ CC Mode
 @copying
 This manual is for CC Mode in Emacs.
 
-Copyright @copyright{} 1995--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1995--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -7149,7 +7149,7 @@ If you add more directives to this variable, or remove 
directives from
 it, whilst ``indent to body'' is active, you need to re-enable the
 feature by calling @code{c-toggle-cpp-indent-to-body} for these
 changes to take effect@footnote{Note that the removal of directives
-doesn't work satisfactorally on XEmacs or on very old versions of
+doesn't work satisfactorily on XEmacs or on very old versions of
 Emacs}.
 @end defopt
 
diff --git a/doc/misc/cl.texi b/doc/misc/cl.texi
index 41499d19535..0284554ed9e 100644
--- a/doc/misc/cl.texi
+++ b/doc/misc/cl.texi
@@ -7,7 +7,7 @@
 @copying
 This file documents the GNU Emacs Common Lisp emulation package.
 
-Copyright @copyright{} 1993, 2001--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1993, 2001--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/dbus.texi b/doc/misc/dbus.texi
index bb97446d127..97a0f39ea13 100644
--- a/doc/misc/dbus.texi
+++ b/doc/misc/dbus.texi
@@ -10,7 +10,7 @@
 @syncodeindex fn cp
 
 @copying
-Copyright @copyright{} 2007--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/dired-x.texi b/doc/misc/dired-x.texi
index 002164ed91f..baddf7abc45 100644
--- a/doc/misc/dired-x.texi
+++ b/doc/misc/dired-x.texi
@@ -20,7 +20,7 @@
 @comment %**end of header (This is for running Texinfo on a region.)
 
 @copying
-Copyright @copyright{} 1994--1995, 1999, 2001--2022 Free Software
+Copyright @copyright{} 1994--1995, 1999, 2001--2023 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/ebrowse.texi b/doc/misc/ebrowse.texi
index a2be0aedbc5..b6c9d3dabe4 100644
--- a/doc/misc/ebrowse.texi
+++ b/doc/misc/ebrowse.texi
@@ -11,7 +11,7 @@
 @copying
 This file documents Ebrowse, a C++ class browser for GNU Emacs.
 
-Copyright @copyright{} 2000--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2000--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/ede.texi b/doc/misc/ede.texi
index 0463d068c22..e4ec72af5cd 100644
--- a/doc/misc/ede.texi
+++ b/doc/misc/ede.texi
@@ -6,7 +6,7 @@
 @copying
 This file describes EDE, the Emacs Development Environment.
 
-Copyright @copyright{} 1998--2001, 2004--2005, 2008--2022 Free Software
+Copyright @copyright{} 1998--2001, 2004--2005, 2008--2023 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/ediff.texi b/doc/misc/ediff.texi
index 23334479b0c..ce6cb8c9bd6 100644
--- a/doc/misc/ediff.texi
+++ b/doc/misc/ediff.texi
@@ -26,7 +26,7 @@
 This file documents Ediff, a comprehensive visual interface to Unix diff
 and patch utilities.
 
-Copyright @copyright{} 1995--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1995--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/edt.texi b/doc/misc/edt.texi
index d6f9c9faf9b..9146ebdb6d8 100644
--- a/doc/misc/edt.texi
+++ b/doc/misc/edt.texi
@@ -6,7 +6,7 @@
 @copying
 This file documents the EDT emulation package for Emacs.
 
-Copyright @copyright{} 1986, 1992, 1994--1995, 1999--2022 Free Software
+Copyright @copyright{} 1986, 1992, 1994--1995, 1999--2023 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi
index bc3f545b2bb..71d4b4e1fc2 100644
--- a/doc/misc/efaq-w32.texi
+++ b/doc/misc/efaq-w32.texi
@@ -15,7 +15,7 @@ Answers to Frequently asked Questions about using Emacs on 
Microsoft Windows.
 @include emacsver.texi
 
 @copying
-Copyright @copyright{} 2008, 2010--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2008, 2010--2023 Free Software Foundation, Inc.
 
 @quotation
 This list of frequently asked questions about GNU Emacs on MS Windows
diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index 3f5c2bc1a73..396a4753842 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -8,7 +8,7 @@
 @include emacsver.texi
 
 @copying
-Copyright @copyright{} 2001--2022 Free Software Foundation, Inc.@*
+Copyright @copyright{} 2001--2023 Free Software Foundation, Inc.@*
 Copyright @copyright{} 1994--2000 Reuven M. Lerner@*
 Copyright @copyright{} 1992--1993 Steven Byrnes@*
 Copyright @copyright{} 1990--1992 Joseph Brian Wells@*
diff --git a/doc/misc/eglot.texi b/doc/misc/eglot.texi
index 2aff038b9ab..253bf169ccb 100644
--- a/doc/misc/eglot.texi
+++ b/doc/misc/eglot.texi
@@ -10,7 +10,7 @@
 @copying
 This manual is for Eglot, the Emacs LSP client.
 
-Copyright @copyright{} 2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2022--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/eieio.texi b/doc/misc/eieio.texi
index b1ec5c0dce7..8838de38f86 100644
--- a/doc/misc/eieio.texi
+++ b/doc/misc/eieio.texi
@@ -12,7 +12,7 @@
 @copying
 This manual documents EIEIO, an object framework for Emacs Lisp.
 
-Copyright @copyright{} 2007--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/emacs-gnutls.texi b/doc/misc/emacs-gnutls.texi
index 8c8a6f3154a..fafb4c11594 100644
--- a/doc/misc/emacs-gnutls.texi
+++ b/doc/misc/emacs-gnutls.texi
@@ -9,7 +9,7 @@
 @copying
 This file describes the Emacs GnuTLS integration.
 
-Copyright @copyright{} 2012--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2012--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/emacs-mime.texi b/doc/misc/emacs-mime.texi
index 5f4e1a639be..19ff415bdaf 100644
--- a/doc/misc/emacs-mime.texi
+++ b/doc/misc/emacs-mime.texi
@@ -10,7 +10,7 @@
 @copying
 This file documents the Emacs MIME interface functionality.
 
-Copyright @copyright{} 1998--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1998--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/epa.texi b/doc/misc/epa.texi
index 70bfc0462b7..6f63a3d7ba0 100644
--- a/doc/misc/epa.texi
+++ b/doc/misc/epa.texi
@@ -10,7 +10,7 @@
 @copying
 This file describes EasyPG Assistant @value{VERSION}.
 
-Copyright @copyright{} 2007--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/erc.texi b/doc/misc/erc.texi
index 2ab2e908940..23cdcbff575 100644
--- a/doc/misc/erc.texi
+++ b/doc/misc/erc.texi
@@ -12,7 +12,7 @@
 @copying
 This manual is for ERC @value{ERCVER} @value{ERCDIST}.
 
-Copyright @copyright{} 2005--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2005--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -529,6 +529,16 @@ Translate morse code in messages
 
 @end table
 
+@anchor{Required Modules}
+@subheading Required Modules
+@cindex required modules
+
+Note that some modules are essential to core IRC operations and thus
+not listed above.  You can nevertheless still remove these, but doing
+so demands special precautions to avoid degrading the user experience.
+At present, the only such module is @code{networks}, whose library ERC
+always loads anyway.
+
 @subheading Local Modules
 @cindex local modules
 
@@ -1290,7 +1300,7 @@ When preparing entries for your backend, it may help to 
get a feel for
 how ERC and its modules conduct searches, especially when exploring a
 new context, such as channel keys.  (Hint: in such situations, try
 temporarily setting the variable @code{auth-source-debug} to @code{t}
-and checking @samp{*Messages*} periodically for insights into how
+and checking @file{*Messages*} periodically for insights into how
 auth-source is operating.)  Overall, though, ERC tries to be
 consistent in performing queries across various authentication
 contexts.  Here's what to expect with respect to the @samp{host}
diff --git a/doc/misc/ert.texi b/doc/misc/ert.texi
index 1b7f38daadf..fd96fcf8b8c 100644
--- a/doc/misc/ert.texi
+++ b/doc/misc/ert.texi
@@ -15,7 +15,7 @@
 @end direntry
 
 @copying
-Copyright @copyright{} 2008, 2010--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2008, 2010--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi
index f9796d69a9a..fc7d52eb711 100644
--- a/doc/misc/eshell.texi
+++ b/doc/misc/eshell.texi
@@ -10,7 +10,7 @@
 @copying
 This manual is for Eshell, the Emacs shell.
 
-Copyright @copyright{} 1999--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -2162,11 +2162,6 @@ So that @kbd{M-@key{DEL}} acts in a predictable manner, 
etc.
 
 @item Allow all Eshell buffers to share the same history and list-dir
 
-@item There is a problem with script commands that output to @file{/dev/null}
-
-If a script file, somewhere in the middle, uses @samp{> /dev/null},
-output from all subsequent commands is swallowed.
-
 @item Split up parsing of text after @samp{$} in @file{esh-var.el}
 
 Make it similar to the way that @file{esh-arg.el} is structured.
diff --git a/doc/misc/eudc.texi b/doc/misc/eudc.texi
index 0e1ff67c1fd..743d7da946b 100644
--- a/doc/misc/eudc.texi
+++ b/doc/misc/eudc.texi
@@ -14,7 +14,7 @@ This file documents EUDC version 1.40.0.
 EUDC is the Emacs Unified Directory Client, a common interface to
 directory servers and contact information.
 
-Copyright @copyright{} 1998, 2000--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1998, 2000--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi
index 7b32f04aa84..bc556ed88e2 100644
--- a/doc/misc/eww.texi
+++ b/doc/misc/eww.texi
@@ -8,7 +8,7 @@
 @copying
 This file documents the GNU Emacs Web Wowser (EWW) package.
 
-Copyright @copyright{} 2014--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2014--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi
index 80e1bceb8ec..03d296a1d42 100644
--- a/doc/misc/flymake.texi
+++ b/doc/misc/flymake.texi
@@ -13,7 +13,7 @@
 @copying
 This manual is for GNU Flymake (version @value{VERSION}, @value{UPDATED}).
 
-Copyright @copyright{} 2004--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2004--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/forms.texi b/doc/misc/forms.texi
index 8c814b9c859..a7bc49c7dfd 100644
--- a/doc/misc/forms.texi
+++ b/doc/misc/forms.texi
@@ -20,7 +20,7 @@
 @copying
 This file documents Forms mode, a form-editing major mode for GNU Emacs.
 
-Copyright @copyright{} 1989, 1997, 2001--2022 Free Software Foundation,
+Copyright @copyright{} 1989, 1997, 2001--2023 Free Software Foundation,
 Inc.
 
 @quotation
diff --git a/doc/misc/gnus-faq.texi b/doc/misc/gnus-faq.texi
index 49022ac3415..f7d528511a0 100644
--- a/doc/misc/gnus-faq.texi
+++ b/doc/misc/gnus-faq.texi
@@ -1,7 +1,7 @@
 @c \input texinfo @c -*-texinfo-*-
 @c Uncomment 1st line before texing this file alone.
 @c %**start of header
-@c Copyright (C) 1995--2022 Free Software Foundation, Inc.
+@c Copyright (C) 1995--2023 Free Software Foundation, Inc.
 @c
 @c @setfilename gnus-faq.info
 @c @settitle Frequently Asked Questions
diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index 94c75ed30c3..3289d66f017 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -8,7 +8,7 @@
 @syncodeindex pg cp
 
 @copying
-Copyright @copyright{} 1995--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1995--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/htmlfontify.texi b/doc/misc/htmlfontify.texi
index dabe2e36ff4..2c96002fb16 100644
--- a/doc/misc/htmlfontify.texi
+++ b/doc/misc/htmlfontify.texi
@@ -10,7 +10,7 @@
 This manual documents Htmlfontify, a source code -> crosslinked +
 formatted + syntax colorized html transformer.
 
-Copyright @copyright{} 2002--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2002--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/idlwave.texi b/doc/misc/idlwave.texi
index 0c59fdf7385..3ec07fb4a50 100644
--- a/doc/misc/idlwave.texi
+++ b/doc/misc/idlwave.texi
@@ -23,7 +23,7 @@ Emacs, and interacting with an IDL shell run as a subprocess.
 This is edition @value{EDITION} of the IDLWAVE User Manual for IDLWAVE
 @value{VERSION}.
 
-Copyright @copyright{} 1999--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/ido.texi b/doc/misc/ido.texi
index c8f9762b553..dca92f00069 100644
--- a/doc/misc/ido.texi
+++ b/doc/misc/ido.texi
@@ -7,7 +7,7 @@
 @copying
 This file documents the Ido package for GNU Emacs.
 
-Copyright @copyright{} 2013--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2013--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/info.texi b/doc/misc/info.texi
index 4db35ebf0fc..ba00dbcf2bd 100644
--- a/doc/misc/info.texi
+++ b/doc/misc/info.texi
@@ -15,7 +15,7 @@
 This file describes how to use Info, the menu-driven GNU
 documentation system.
 
-Copyright @copyright{} 1989, 1992, 1996--2022 Free Software Foundation,
+Copyright @copyright{} 1989, 1992, 1996--2023 Free Software Foundation,
 Inc.
 
 @quotation
@@ -1098,9 +1098,8 @@ name, and @key{RET}.  Thus, @kbd{gTop@key{RET}} would go 
to the node
 called @samp{Top} in this file.  (This is equivalent to @kbd{t}, see
 @ref{Help-Int}.)  @kbd{gGo to node@key{RET}} would come back here.
 
-  Unlike @kbd{m}, @kbd{g} does not allow the use of abbreviations.
-But it does allow completion, so you can type @key{TAB} to complete a
-partial node name.
+  Like @kbd{m}, @kbd{g} allows the use of abbreviations.  It also allows
+completion, so you can type @key{TAB} to complete a partial node name.
 
 @cindex go to another Info file
   To go to a node in another file, you can include the file name in the
diff --git a/doc/misc/mairix-el.texi b/doc/misc/mairix-el.texi
index 28b86c43aca..12016bee387 100644
--- a/doc/misc/mairix-el.texi
+++ b/doc/misc/mairix-el.texi
@@ -5,7 +5,7 @@
 @include docstyle.texi
 
 @copying
-Copyright @copyright{} 2008--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2008--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/message.texi b/doc/misc/message.texi
index fb6e97f0d3d..c3ad8dd6942 100644
--- a/doc/misc/message.texi
+++ b/doc/misc/message.texi
@@ -9,7 +9,7 @@
 @copying
 This file documents Message, the Emacs message composition mode.
 
-Copyright @copyright{} 1996--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1996--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/mh-e.texi b/doc/misc/mh-e.texi
index 1a80c62edba..caee0ed2c70 100644
--- a/doc/misc/mh-e.texi
+++ b/doc/misc/mh-e.texi
@@ -25,7 +25,7 @@
 This is version @value{VERSION}@value{EDITION} of @cite{The MH-E
 Manual}, last updated @value{UPDATED}.
 
-Copyright @copyright{} 1995, 2001--2003, 2005--2022 Free Software
+Copyright @copyright{} 1995, 2001--2003, 2005--2023 Free Software
 Foundation, Inc.
 
 @c This dual license has been agreed upon by the FSF.
@@ -793,7 +793,7 @@ You should see the scan line for your message, and perhaps 
others. Use
 
 @cartouche
 @smallexample
-  3 t08/24 root       received fax files on Wed Aug 24 11:00:13 PDT 1
+  3 t08/24 root       received fax files on Wed Aug 24 11:00:13 -0700 1
 # 4+t08/24 To:wohler  Test<<This is a test message to get the wheels
 
 -:%%  @{+inbox/select@} 4 msgs (1-4)   Bot L4     (MH-Folder Show)---------
diff --git a/doc/misc/modus-themes.org b/doc/misc/modus-themes.org
index db92dfb4817..1273fd8a3ad 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 num:t
 #+startup:               content
-#+macro:                 stable-version 3.0.0
-#+macro:                 release-date 2022-10-28
-#+macro:                 development-version 3.1.0-dev
+#+macro:                 stable-version 4.0.0
+#+macro:                 release-date 2023-01-01
+#+macro:                 development-version 4.1.0-dev
 #+macro:                 file @@texinfo:@file{@@$1@@texinfo:}@@
 #+macro:                 space @@texinfo:@: @@
 #+macro:                 kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
@@ -21,20 +21,27 @@
 
 #+texinfo: @insertcopying
 
-This manual, written by Protesilaos Stavrou, describes the customization
-options for the ~modus-operandi~ and ~modus-vivendi~ themes, and provides
-every other piece of information pertinent to them.
+This manual, written by Protesilaos Stavrou, describes the
+customization options for the Modus themes, and provides every other
+piece of information pertinent to them.
 
 The documentation furnished herein corresponds to stable version
-{{{stable-version}}}, released on {{{release-date}}}.  Any reference to a newer
-feature which does not yet form part of the latest tagged commit, is
-explicitly marked as such.
+{{{stable-version}}}, released on {{{release-date}}}.  Any reference
+to a newer feature which does not yet form part of the latest tagged
+commit, is explicitly marked as such.
 
 Current development target is {{{development-version}}}.
 
-+ Homepage: https://protesilaos.com/emacs/modus-themes.
-+ Git repository: https://git.sr.ht/~protesilaos/modus-themes.
-+ Mailing list: https://lists.sr.ht/~protesilaos/modus-themes.
++ Package name (GNU ELPA): ~modus-themes~
++ Official manual: <https://protesilaos.com/emacs/modus-themes>
++ Change log: <https://protesilaos.com/emacs/modus-themes-changelog>
++ Color palette: <https://protesilaos.com/emacs/modus-themes-colors>
++ Sample pictures: <https://protesilaos.com/emacs/modus-themes-pictures>
++ Git repo on SourceHut: <https://git.sr.ht/~protesilaos/modus-themes>
+  - Mirrors:
+    + GitHub: <https://github.com/protesilaos/modus-themes>
+    + GitLab: <https://gitlab.com/protesilaos/modus-themes>
++ Mailing list: <https://lists.sr.ht/~protesilaos/modus-themes>
 + Backronym: My Old Display Unexpectedly Sharpened ... themes
 
 #+toc: headlines 8 insert TOC here, with eight headline levels
@@ -45,7 +52,7 @@ Current development target is {{{development-version}}}.
 :custom_id: h:b14c3fcb-13dd-4144-9d92-2c58b3ed16d3
 :end:
 
-Copyright (C) 2020-2022  Free Software Foundation, Inc.
+Copyright (C) 2020-2023  Free Software Foundation, Inc.
 
 #+begin_quote
 Permission is granted to copy, distribute and/or modify this document
@@ -64,44 +71,46 @@ modify this GNU manual.”
 :custom_id: h:f0f3dbcb-602d-40cf-b918-8f929c441baf
 :end:
 
-The Modus themes are designed for accessible readability.  They conform
-with the highest standard for color contrast between any given
-combination of background and foreground values.  This corresponds to
-the WCAG AAA standard, which specifies a minimum rate of distance in
-relative luminance of 7:1.
+The Modus themes are designed for accessible readability.  They
+conform with the highest standard for color contrast between
+combinations of background and foreground values.  For small sized
+text, this corresponds to the WCAG AAA standard, which specifies a
+minimum rate of distance in relative luminance of 7:1.
+
+The Modus themes consist of six themes, divided into three subgroups.
+
+- Main themes :: ~modus-operandi~ is the project's main light theme,
+  while ~modus-vivendi~ is its dark counterpart.  These two themes are
+  part of the project since its inception.  They are designed to cover
+  a broad range of needs and are, in the opinion of the author, the
+  reference for what a highly legible "default" theme should look
+  like.
+
+- Tinted themes :: ~modus-operandi-tinted~ and ~modus-vivendi-tinted~
+  are variants of the two main themes.  They slightly tone down the
+  intensity of the background and provide a bit more color variety.
+  ~modus-operandi-tinted~ has a set of base tones that are shades of
+  light ochre (earthly colors), while ~modus-vivendi-tinted~ gives a
+  night sky impression.
+
+- Deuteranopia themes :: ~modus-operandi-deuteranopia~ and its
+  companion ~modus-vivendi-deuteranopia~ are optimized for users with
+  red-green color deficiency.  This means that they do not use red and
+  green hues for color-coding purposes, such as for diff removed and
+  added lines.  Instead, they implement colors that are discernible by
+  users with deueteranopia or deuteranomaly (mostly yellow and blue
+  hues).
 
-Modus Operandi (~modus-operandi~) is a light theme, while Modus Vivendi
-(~modus-vivendi~) is dark.  Each theme's color palette is designed to meet
-the needs of the numerous interfaces that are possible in the Emacs
-computing environment.
+To ensure that users have a consistently accessible experience, the
+themes strive to achieve as close to full face coverage as possible,
+while still targeting a curated list of well-maintained packages
+([[#h:a9c8f29d-7f72-4b54-b74b-ddefe15d6a19][Face coverage]]).
 
 The overarching objective of this project is to always offer accessible
 color combinations.  There shall never be a compromise on this
 principle.  If there arises an inescapable trade-off between readability
 and stylistic considerations, we will always opt for the former.
 
-To ensure that users have a consistently accessible experience, the
-themes strive to achieve as close to full face coverage as possible
-([[#h:a9c8f29d-7f72-4b54-b74b-ddefe15d6a19][Face coverage]]).
-
-Furthermore, the themes are designed to empower users with red-green
-color deficiency (deuteranopia).  This is achieved in three ways:
-
-1. The conformance with the highest legibility standard means that text
-   is always readable no matter the perception of its hue.
-
-2. Most contexts use colors on the blue-cyan-magenta-purple side of the
-   spectrum.  Put differently, green and/or red are seldom used, thus
-   minimizing the potential for confusion.
-
-   [[#h:0b26cb47-9733-4cb1-87d9-50850cb0386e][Why are colors mostly variants 
of blue, magenta, cyan?]].
-
-3. In contexts where a red/green color-coding is unavoidable, we provide
-   a universal toggle to customize the themes so that a red/blue scheme
-   is used instead.
-
-   [[#h:3ed03a48-20d8-4ce7-b214-0eb7e4c79abe][Option for red-green color 
deficiency or deuteranopia]].
-
 Starting with version 0.12.0 and onwards, the themes are built into GNU
 Emacs.
 
@@ -111,12 +120,8 @@ Emacs.
 :end:
 #+cindex: Screenshots
 
-Check the web page with 
[[https://protesilaos.com/emacs/modus-themes-pictures/][the screen shots]].  
There are lots of scenarios
-on display that draw attention to details and important aspects in the
-design of the themes.  They also showcase the numerous customization
-options.
-
-[[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization options]].
+Check the web page with 
[[https://protesilaos.com/emacs/modus-themes-pictures/][the screen shots]].  
Note that the themes are
+highly customizable ([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization 
options]]).
 
 ** Learn about the latest changes
 :properties:
@@ -137,6 +142,13 @@ On older versions of Emacs, they can be installed using 
Emacs' package
 manager or manually from their code repository.  There also exist
 packages for distributions of GNU/Linux.
 
+Emacs 28 ships with ~modus-themes~ version =1.6.0=.  Emacs 29 includes
+version =3.0.0=.  Emacs 30 provides a newer, refactored version that
+thoroughly refashions how the themes are implemented and customized.
+Such major versions are not backward-compatible due to the limited
+resources at the maintainer's disposal to support multiple versions of
+Emacs and of the themes across the years.
+
 ** Install manually from source
 :properties:
 :custom_id: h:da3414b7-1426-46b8-8e76-47b845b76fd0
@@ -245,102 +257,82 @@ wrong.
 :properties:
 :custom_id: h:3f3c3728-1b34-437d-9d0c-b110f5b161a9
 :end:
-#+findex: modus-themes-load-themes
 #+findex: modus-themes-toggle
-#+findex: modus-themes-load-operandi
-#+findex: modus-themes-load-vivendi
-#+cindex: Essential configuration
+#+findex: modus-themes-load-theme
 #+vindex: modus-themes-after-load-theme-hook
+#+cindex: Essential configuration
+
+NOTE that Emacs can load multiple themes, which typically produces
+undesirable results and undoes the work of the designer.  Use the
+~disable-theme~ command if you are trying other themes beside the
+Modus collection.
 
 Users of the built-in themes cannot ~require~ the package as usual
-because there is no package to speak of.  Instead, things are simpler as
-all one needs is to load the theme of their preference by adding either
-form to their init file:
+because there is no package to speak of.  Instead, things are simpler
+as built-in themes are considered safe.  All one needs is to load the
+theme of their preference by adding either form to their init file:
 
 #+begin_src emacs-lisp
 (load-theme 'modus-operandi)            ; Light theme
 (load-theme 'modus-vivendi)             ; Dark theme
 #+end_src
 
+Remember that the Modus themes are six themes 
([[#h:f0f3dbcb-602d-40cf-b918-8f929c441baf][Overview]]).  Adapt the
+above snippet accordingly.
+
 Users of packaged variants of the themes must add a few more lines to
 ensure that everything works as intended.  First, one has to require the
-main library before loading either theme:
+main library before loading one of the themes:
 
 #+begin_src emacs-lisp
 (require 'modus-themes)
 #+end_src
 
-Then it is recommended to load the individual theme files with the
-helper function ~modus-themes-load-themes~:
-
-#+begin_src emacs-lisp
-;; Load the theme files before enabling a theme (else you get an error).
-(modus-themes-load-themes)
-#+end_src
-
-Once the libraries that define the themes are enabled, one can activate
-a theme with either of the following expressions:
+One can activate a theme with something like the following expression,
+replacing ~modus-operandi~ with their preferred Modus theme:
 
 #+begin_src emacs-lisp
-(modus-themes-load-operandi)            ; Light theme
-;; OR
-(modus-themes-load-vivendi)             ; Dark theme
+(load-theme 'modus-operandi :no-confim)
 #+end_src
 
 Changes to the available customization options must always be evaluated
-before loading a theme 
([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization Options]]).  An 
exception to this
-norm is when using the various Custom interfaces or with commands like
-{{{kbd(M-x customize-set-variable)}}}, which can optionally
-automatically reload the theme 
([[#h:9001527a-4e2c-43e0-98e8-3ef72d770639][Option for inhibiting theme 
reload]]).
+before loading a theme 
([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization Options]]).  Reload a 
theme for
+new changes to take effect.
 
 This is how a basic setup could look like:
 
 #+begin_src emacs-lisp
-;;; For the built-in themes which cannot use `require':
-;; Add all your customizations prior to loading the themes
+;;; For the built-in themes which cannot use `require'.
+
+;; Add all your customizations prior to loading the themes.
 (setq modus-themes-italic-constructs t
-      modus-themes-bold-constructs nil
-      modus-themes-region '(bg-only no-extend))
+      modus-themes-bold-constructs nil)
 
-;; Load the theme of your choice:
-(load-theme 'modus-operandi) ;; OR (load-theme 'modus-vivendi)
+;; Load the theme of your choice.
+(load-theme 'modus-operandi)
 
+;; Optionally define a key to switch between Modus themes.  Also check
+;; the user option `modus-themes-to-toggle'.
 (define-key global-map (kbd "<f5>") #'modus-themes-toggle)
 
 
 
-;;; For packaged versions which must use `require':
+;;; For packaged versions which must use `require'.
+
 (require 'modus-themes)
 
 ;; Add all your customizations prior to loading the themes
 (setq modus-themes-italic-constructs t
-      modus-themes-bold-constructs nil
-      modus-themes-region '(bg-only no-extend))
-
-;; Load the theme files before enabling a theme
-(modus-themes-load-themes)
+      modus-themes-bold-constructs nil)
 
-;; Load the theme of your choice:
-(modus-themes-load-operandi) ;; OR (modus-themes-load-vivendi)
+;; Load the theme of your choice.
+(load-theme 'modus-operandi :no-confim)
 
 (define-key global-map (kbd "<f5>") #'modus-themes-toggle)
 #+end_src
 
 [[#h:e979734c-a9e1-4373-9365-0f2cd36107b8][Sample configuration with and 
without use-package]].
 
-With those granted, bear in mind a couple of technical points on
-~modus-themes-load-operandi~ and ~modus-themes-load-vivendi~, as well as
-~modus-themes-toggle~ which relies on them:
-
-1. Those functions call ~load-theme~.  Some users prefer to opt for
-   ~enable-theme~ instead 
([[#h:e68560b3-7fb0-42bc-a151-e015948f8a35][Differences between loading and 
enabling]]).
-
-2. The functions will run the ~modus-themes-after-load-theme-hook~ as
-   their final step.  This can be employed for bespoke configurations
-   ([[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]]).  
Experienced users may not wish to rely on
-   such a hook and the functions that run it: they may prefer a custom
-   solution ([[#h:86f6906b-f090-46cc-9816-1fe8aeb38776][A theme-agnostic hook 
for theme loading]]).
-
 ** Sample configuration with and without use-package
 :properties:
 :custom_id: h:e979734c-a9e1-4373-9365-0f2cd36107b8
@@ -348,38 +340,36 @@ With those granted, bear in mind a couple of technical 
points on
 #+cindex: use-package configuration
 #+cindex: sample configuration
 
+What follows is a variant of what we demonstrate in the previous
+section ([[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]]).
+
 It is common for Emacs users to rely on ~use-package~ for declaring
 package configurations in their setup.  We use this as an example:
 
 #+begin_src emacs-lisp
-;;; For the built-in themes which cannot use `require':
+;;; For the built-in themes which cannot use `require'.
 (use-package emacs
   :init
   ;; Add all your customizations prior to loading the themes
   (setq modus-themes-italic-constructs t
-        modus-themes-bold-constructs nil
-        modus-themes-region '(bg-only no-extend))
+        modus-themes-bold-constructs nil)
   :config
-  ;; Load the theme of your choice:
-  (load-theme 'modus-operandi) ;; OR (load-theme 'modus-vivendi)
+  ;; Load the theme of your choice.
+  (load-theme 'modus-operandi)
   :bind ("<f5>" . modus-themes-toggle))
 
 
 
-;;; For packaged versions which must use `require':
+;;; For packaged versions which must use `require'.
 (use-package modus-themes
   :ensure
   :init
   ;; Add all your customizations prior to loading the themes
   (setq modus-themes-italic-constructs t
-        modus-themes-bold-constructs nil
-        modus-themes-region '(bg-only no-extend))
-
-  ;; Load the theme files before enabling a theme
-  (modus-themes-load-themes)
+        modus-themes-bold-constructs nil)
   :config
-  ;; Load the theme of your choice:
-  (modus-themes-load-operandi) ;; OR (modus-themes-load-vivendi)
+  ;; Load the theme of your choice.
+  (load-theme 'modus-operandi :no-confim)
   :bind ("<f5>" . modus-themes-toggle))
 #+end_src
 
@@ -389,8 +379,7 @@ The same without ~use-package~:
 ;;; For the built-in themes which cannot use `require':
 ;; Add all your customizations prior to loading the themes
 (setq modus-themes-italic-constructs t
-      modus-themes-bold-constructs nil
-      modus-themes-region '(bg-only no-extend))
+      modus-themes-bold-constructs nil)
 
 ;; Load the theme of your choice:
 (load-theme 'modus-operandi) ;; OR (load-theme 'modus-vivendi)
@@ -404,14 +393,10 @@ The same without ~use-package~:
 
 ;; Add all your customizations prior to loading the themes
 (setq modus-themes-italic-constructs t
-      modus-themes-bold-constructs nil
-      modus-themes-region '(bg-only no-extend))
-
-;; Load the theme files before enabling a theme
-(modus-themes-load-themes)
+      modus-themes-bold-constructs nil)
 
 ;; Load the theme of your choice:
-(modus-themes-load-operandi) ;; OR (modus-themes-load-vivendi)
+(load-theme 'modus-operandi :no-confim) ;; OR (load-theme 'modus-vivendi 
:no-confim)
 
 (define-key global-map (kbd "<f5>") #'modus-themes-toggle)
 #+end_src
@@ -433,8 +418,8 @@ package declaration of the themes.
 The reason we recommend ~load-theme~ instead of the other option of
 ~enable-theme~ is that the former does a kind of "reset" on the face
 specs.  It quite literally loads (or reloads) the theme.  Whereas the
-latter simply puts an already loaded theme at the top of the list of
-enabled items, re-using whatever state was last loaded.
+~enable-theme~ function simply puts an already loaded theme to the top
+of the list of enabled items, re-using whatever state was last loaded.
 
 As such, ~load-theme~ reads all customizations that may happen during
 any given Emacs session: even after the initial setup of a theme.
@@ -453,10 +438,13 @@ session, are better off using something like this:
 
 #+begin_src emacs-lisp
 (require 'modus-themes)
+
+;; Activate your desired themes here
 (load-theme 'modus-operandi t t)
 (load-theme 'modus-vivendi t t)
 
-(enable-theme 'modus-operandi) ;; OR (enable-theme 'modus-vivendi)
+;; Enable the preferred one
+(enable-theme 'modus-operandi)
 #+end_src
 
 [[#h:b40aca50-a3b2-4c43-be58-2c26fcd14237][Toggle themes without reloading 
them]].
@@ -467,198 +455,95 @@ With the above granted, other sections of the manual 
discuss how to
 configure custom faces, where ~load-theme~ is expected, though
 ~enable-theme~ could still apply in stable setups:
 
-[[#h:1487c631-f4fe-490d-8d58-d72ffa3bd474][Case-by-case face specs using the 
themes' palette]].
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with 
modus-themes-with-colors]].
 
-[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the 
themes' palette]].
-
-* Customization Options
+* Customization options
 :properties:
 :custom_id: h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f
 :end:
 
 The Modus themes are highly configurable, though they should work well
-without any further tweaks.  By default, all customization options are
-set to nil, unless otherwise noted in this manual.
+without any further tweaks.  We provide a variety of user options.
+The following code block provides an overview.  In addition to those
+variables, the themes support a comprehensive system of overrides: it
+can be used to make thoroughgoing changes to the looks of the themes
+([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]).  
We document everything at length in
+the pages of this manual and also provide ready-to-use code samples.
 
 Remember that all customization options must be evaluated before loading
 a theme ([[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]]).  If 
the theme is already active, it must be
-reloaded for changes in user options to come into force.
-
-Below is a summary of what you will learn in the subsequent sections of
-this manual.
+reloaded for changes to take effect.
 
 #+begin_src emacs-lisp
+;; In all of the following, WEIGHT is a symbol such as `semibold',
+;; `light', `bold', or anything mentioned in `modus-themes-weights'.
 (setq modus-themes-italic-constructs t
       modus-themes-bold-constructs nil
-      modus-themes-mixed-fonts nil
-      modus-themes-subtle-line-numbers nil
-      modus-themes-intense-mouseovers nil
-      modus-themes-deuteranopia t
-      modus-themes-tabs-accented t
+      modus-themes-mixed-fonts t
       modus-themes-variable-pitch-ui nil
-      modus-themes-inhibit-reload t ; only applies to `customize-set-variable' 
and related
-
-      modus-themes-fringes nil ; {nil,'subtle,'intense}
-
-      ;; Options for `modus-themes-lang-checkers' are either nil (the
-      ;; default), or a list of properties that may include any of those
-      ;; symbols: `straight-underline', `text-also', `background',
-      ;; `intense' OR `faint'.
-      modus-themes-lang-checkers nil
-
-      ;; Options for `modus-themes-mode-line' are either nil, or a list
-      ;; that can combine any of `3d' OR `moody', `borderless',
-      ;; `accented', a natural number for extra padding (or a cons cell
-      ;; of padding and NATNUM), and a floating point for the height of
-      ;; the text relative to the base font size (or a cons cell of
-      ;; height and FLOAT)
-      modus-themes-mode-line '(accented borderless (padding . 4) (height . 
0.9))
-
-      ;; Same as above:
-      ;; modus-themes-mode-line '(accented borderless 4 0.9)
-
-      ;; Options for `modus-themes-markup' are either nil, or a list
-      ;; that can combine any of `bold', `italic', `background',
-      ;; `intense'.
-      modus-themes-markup '(background italic)
-
-      ;; Options for `modus-themes-syntax' are either nil (the default),
-      ;; or a list of properties that may include any of those symbols:
-      ;; `faint', `yellow-comments', `green-strings', `alt-syntax'
-      modus-themes-syntax nil
-
-      ;; Options for `modus-themes-hl-line' are either nil (the default),
-      ;; or a list of properties that may include any of those symbols:
-      ;; `accented', `underline', `intense'
-      modus-themes-hl-line '(underline accented)
-
-      ;; Options for `modus-themes-paren-match' are either nil (the
-      ;; default), or a list of properties that may include any of those
-      ;; symbols: `bold', `intense', `underline'
-      modus-themes-paren-match '(bold intense)
-
-      ;; Options for `modus-themes-links' are either nil (the default),
-      ;; or a list of properties that may include any of those symbols:
-      ;; `neutral-underline' OR `no-underline', `faint' OR `no-color',
-      ;; `bold', `italic', `background'
-      modus-themes-links '(neutral-underline background)
-
-      ;; Options for `modus-themes-box-buttons' are either nil (the
-      ;; default), or a list that can combine any of `flat', `accented',
-      ;; `faint', `variable-pitch', `underline', `all-buttons', the
-      ;; symbol of any font weight as listed in `modus-themes-weights',
-      ;; and a floating point number (e.g. 0.9) for the height of the
-      ;; button's text.
-      modus-themes-box-buttons '(variable-pitch flat faint 0.9)
+      modus-themes-custom-auto-reload t
 
       ;; Options for `modus-themes-prompts' are either nil (the
       ;; default), or a list of properties that may include any of those
-      ;; symbols: `background', `bold', `gray', `intense', `italic'
-      modus-themes-prompts '(intense bold)
+      ;; symbols: `italic', `WEIGHT'
+      modus-themes-prompts '(italic bold)
 
-      ;; The `modus-themes-completions' is an alist that reads three
-      ;; keys: `matches', `selection', `popup'.  Each accepts a nil
-      ;; value (or empty list) or a list of properties that can include
-      ;; any of the following (for WEIGHT read further below):
+      ;; The `modus-themes-completions' is an alist that reads two
+      ;; keys: `matches', `selection'.  Each accepts a nil value (or
+      ;; empty list) or a list of properties that can include any of
+      ;; the following (for WEIGHT read further below):
       ;;
-      ;; `matches' - `background', `intense', `underline', `italic', WEIGHT
-      ;; `selection' - `accented', `intense', `underline', `italic', 
`text-also' WEIGHT
-      ;; `popup' - same as `selected'
-      ;; `t' - applies to any key not explicitly referenced (check docs)
-      ;;
-      ;; WEIGHT is a symbol such as `semibold', `light', or anything
-      ;; covered in `modus-themes-weights'.  Bold is used in the absence
-      ;; of an explicit WEIGHT.
-      modus-themes-completions '((matches . (extrabold))
-                                 (selection . (semibold accented))
-                                 (popup . (accented intense)))
-
-      modus-themes-mail-citations nil ; {nil,'intense,'faint,'monochrome}
-
-      ;; Options for `modus-themes-region' are either nil (the default),
-      ;; or a list of properties that may include any of those symbols:
-      ;; `no-extend', `bg-only', `accented'
-      modus-themes-region '(bg-only no-extend)
-
-      ;; Options for `modus-themes-diffs': nil, 'desaturated, 'bg-only
-      modus-themes-diffs 'desaturated
+      ;; `matches'   :: `underline', `italic', `WEIGHT'
+      ;; `selection' :: `underline', `italic', `WEIGHT'
+      modus-themes-completions
+      '((matches . (extrabold))
+        (selection . (semibold italic text-also)))
 
       modus-themes-org-blocks 'gray-background ; 
{nil,'gray-background,'tinted-background}
 
-      modus-themes-org-agenda ; this is an alist: read the manual or its doc 
string
-      '((header-block . (variable-pitch 1.3))
-        (header-date . (grayscale workaholic bold-today 1.1))
-        (event . (accented varied))
-        (scheduled . uniform)
-        (habit . traffic-light))
-
-      modus-themes-headings ; this is an alist: read the manual or its doc 
string
-      '((1 . (overline background variable-pitch 1.3))
-        (2 . (rainbow overline 1.1))
-        (t . (semibold))))
+      ;; The `modus-themes-headings' is an alist: read the manual's
+      ;; node about it or its doc string.  Basically, it supports
+      ;; per-level configurations for the optional use of
+      ;; `variable-pitch' typography, a height value as a multiple of
+      ;; the base font size (e.g. 1.5), and a `WEIGHT'.
+      modus-themes-headings
+      '((1 . (variable-pitch 1.5))
+        (2 . (1.3))
+        (agenda-date . (1.3))
+        (agenda-structure . (variable-pitch light 1.8))
+        (t . (1.1))))
+
+;; Remember that more (MUCH MORE) can be done with overrides, which we
+;; document extensively in this manual.
 #+end_src
 
-** Option for inhibiting theme reload
+** Option for reloading the theme on custom change
 :properties:
 :alt_title: Custom reload theme
 :description: Toggle auto-reload of the theme when setting custom variables
 :custom_id: h:9001527a-4e2c-43e0-98e8-3ef72d770639
 :end:
-#+vindex: modus-themes-inhibit-reload
+#+vindex: modus-themes-custom-auto-reload
 
 Brief: Toggle reloading of the active theme when an option is changed
-through the Customize UI.
+through the Custom UI.
 
-Symbol: ~modus-themes-inhibit-reload~ (=boolean= type)
+Symbol: ~modus-themes-custom-auto-reload~ (=boolean= type)
 
 Possible values:
 
 1. ~nil~
 2. ~t~ (default)
 
-By default, customizing a theme-related user option through the Custom
-interfaces or with {{{kbd(M-x customize-set-variable)}}} will not reload the
-currently active Modus theme.
-
-Enable this behavior by setting this variable to ~nil~.
-
-Regardless of this option, the active theme must be reloaded for changes
-to user options to take effect 
([[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]]).
-
-** Option for red-green color deficiency or deuteranopia
-:properties:
-:alt_title: Deuteranopia style
-:description: Toggle red/blue color-coding instead of red/green
-:custom_id: h:3ed03a48-20d8-4ce7-b214-0eb7e4c79abe
-:end:
-#+vindex: modus-themes-deuteranopia
-
-Brief: When non-~nil~ use red/blue color-coding instead of red/green,
-where appropriate.
-
-Symbol: ~modus-themes-deuteranopia~ (=boolean= type)
-
-Possible values:
-
-1. ~nil~ (default)
-2. ~t~
-
-This is to account for red-green color deficiency, also know as
-deuteranopia and variants.  It applies to all contexts where there can
-be a color-coded distinction between failure or success, a to-do or done
-state, a mark for deletion versus a mark for selection (e.g. in Dired),
-current and lazily highlighted search matches, removed lines in diffs as
-opposed to added ones, and so on.
+All theme user options take effect when a theme is loaded.  Any
+subsequent changes require the theme to be reloaded.
 
-Note that this does not change all colors throughout the active theme,
-but only applies to cases that have color-coding significance.  For
-example, regular code syntax highlighting is not affected.  There is no
-such need because of the themes' overarching commitment to the highest
-legibility standard, which ensures that text is readable regardless of
-hue, as well as the predominance of colors on the
-blue-cyan-magenta-purple side of the spectrum.
+When this variable has a non-nil value, any change made via the Custom
+UI or related functions such as ~customize-set-variable~ and ~setopt~
+(Emacs 29), will trigger a reload automatically.
 
-[[#h:0b26cb47-9733-4cb1-87d9-50850cb0386e][Why are colors mostly variants of 
blue, magenta, cyan?]].
+With a nil value, changes to user options have no further consequences:
+the user must manually reload the theme 
([[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]]).
 
 ** Option for more bold constructs
 :properties:
@@ -680,9 +565,9 @@ Possible values:
 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
-weight.  This concerns keywords and other important aspects of code
-syntax.  It also affects certain mode line indicators and command-line
+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
 prompts.
 
 Advanced users may also want to configure the exact attributes of the
@@ -718,70 +603,6 @@ Advanced users may also want to configure the exact 
attributes of the
 
 [[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
 
-** Option for syntax highlighting
-:properties:
-:alt_title: Syntax styles
-:description: Choose the overall aesthetic of code syntax
-:custom_id: h:c119d7b2-fcd4-4e44-890e-5e25733d5e52
-:end:
-#+vindex: modus-themes-syntax
-
-Brief: Set the overall style of code syntax highlighting.
-
-Symbol: ~modus-themes-syntax~ (=choice= type, list of properties)
-
-Possible values are expressed as a list of properties (default is ~nil~ or
-an empty list).  The list can include any of the following symbols:
-
-+ ~faint~
-+ ~yellow-comments~
-+ ~green-strings~
-+ ~alt-syntax~
-
-The default (a ~nil~ value or an empty list) is to use a balanced
-combination of colors on the cyan-blue-magenta side of the spectrum.
-There is little to no use of greens, yellows, and reds.  Comments are
-gray, strings are blue colored, doc strings are a shade of cyan, while
-color combinations are designed to avoid exaggerations.
-
-The property ~faint~ fades the saturation of all applicable colors, where
-that is possible or appropriate.
-
-The property ~yellow-comments~ applies a yellow color to comments.
-
-The property ~green-strings~ applies a green color to strings and a green
-tint to doc strings.
-
-The property ~alt-syntax~ changes the combination of colors beyond strings
-and comments, so that the effective palette is broadened to provide
-greater variety relative to the default.
-
-Combinations of any of those properties are expressed as a list, like in
-these examples:
-
-#+begin_src emacs-lisp
-(faint)
-(green-strings yellow-comments)
-(alt-syntax green-strings yellow-comments)
-(faint alt-syntax green-strings yellow-comments)
-#+end_src
-
-The order in which the properties are set is not significant.
-
-In user configuration files the form may look like this:
-
-#+begin_src emacs-lisp
-(setq modus-themes-syntax '(faint alt-syntax))
-#+end_src
-
-Independent of this variable, users may also control the use of a bold
-weight or italic text: ~modus-themes-bold-constructs~ and
-~modus-themes-italic-constructs~.
-
-[[#h:b25714f6-0fbe-41f6-89b5-6912d304091e][Option for more bold constructs]].
-
-[[#h:977c900d-0d6d-4dbb-82d9-c2aae69543d6][Option for more italic constructs]].
-
 ** Option for font mixing
 :properties:
 :alt_title: Mixed fonts
@@ -805,111 +626,31 @@ tables and code blocks to always inherit from the 
~fixed-pitch~ face.
 This is to ensure that certain constructs like code blocks and tables
 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.
+the layout can appear broken, due to how spacing is done.
 
 For a consistent experience, user may need to specify the font family of
 the ~fixed-pitch~ face.
 
 [[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and 
others]].
 
-Furthermore, 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~.
-
-** Option for links
+** Option for command prompt styles
 :properties:
-:alt_title: Link styles
-:description: Choose among several styles, with or without underline
-:custom_id: h:5808be52-361a-4d18-88fd-90129d206f9b
+:alt_title: Command prompts
+:description: Control the style of command prompts
+:custom_id: h:db5a9a7c-2928-4a28-b0f0-6f2b9bd52ba1
 :end:
-#+vindex: modus-themes-links
+#+vindex: modus-themes-prompts
 
-Brief: Control the style of links to web pages, files, buffers...
+Brief: Control the style of command prompts (e.g. minibuffer, shell, IRC
+clients).
 
-Symbol: ~modus-themes-links~ (=choice= type, list of properties)
+Symbol: ~modus-themes-prompts~ (=choice= type, list of properties)
 
 Possible values are expressed as a list of properties (default is ~nil~ or
 an empty list).  The list can include any of the following symbols:
 
-+ Underline style:
-  - ~neutral-underline~
-  - ~no-underline~
-+ Text coloration:
-  - ~faint~
-  - ~no-color~
-+ ~bold~
 + ~italic~
-+ ~background~
-
-The default (a ~nil~ value or an empty list) is a prominent text color,
-typically blue, with an underline of the same color.
-
-For the style of the underline, a ~neutral-underline~ property turns the
-color of the line into a subtle gray, while the ~no-underline~ property
-removes the line altogether.  If both of those are set, the latter takes
-precedence.
-
-For text coloration, a ~faint~ property desaturates the color of the text
-and the underline, unless the underline is affected by the
-aforementioned properties.  While a ~no-color~ property removes the color
-from the text.  If both of those are set, the latter takes precedence.
-
-A ~bold~ property applies a heavy typographic weight to the text of the
-link.
-
-An ~italic~ property adds a slant to the link's text (italic or oblique
-forms, depending on the typeface).
-
-A ~background~ property applies a subtle tinted background color.
-
-In case both ~no-underline~ and ~no-color~ are set, then a subtle gray
-background is applied to all links.  This can still be combined with the
-~bold~ and ~italic~ properties.
-
-Combinations of any of those properties are expressed as a list,
-like in these examples:
-
-#+begin_src emacs-lisp
-(faint)
-(no-underline faint)
-(no-color no-underline bold)
-(italic bold background no-color no-underline)
-#+end_src
-
-The order in which the properties are set is not significant.
-
-In user configuration files the form may look like this:
-
-#+begin_src emacs-lisp
-(setq modus-themes-links '(neutral-underline background))
-#+end_src
-
-The placement of the underline, meaning its proximity to the text, is
-controlled by ~x-use-underline-position-properties~,
-~x-underline-at-descent-line~, ~underline-minimum-offset~.  Please refer to
-their documentation strings.
-
-** Option for box buttons
-:properties:
-:alt_title: Box buttons
-:description: Choose among several styles for buttons
-:custom_id: h:8b85f711-ff40-45b0-b7fc-4727503cd2ec
-:end:
-#+vindex: modus-themes-box-buttons
-
-Brief: Control the style of buttons in the Custom UI and related.
-
-Symbol: ~modus-themes-box-buttons~ (=choice= type, list of properties)
-
-Possible values are expressed as a list of properties (default is ~nil~ or
-an empty list).  The list can include any of the following symbols:
-
-+ ~flat~
-+ ~accented~
-+ ~faint~
-+ ~variable-pitch~
-+ ~underline~
++ ~italic~
 + A font weight, which must be supported by the underlying typeface:
   - ~thin~
   - ~ultralight~
@@ -923,213 +664,24 @@ an empty list).  The list can include any of the 
following symbols:
   - ~heavy~
   - ~extrabold~
   - ~ultrabold~
-+ A floating point as a height multiple of the default or a cons cell in
-  the form of =(height . FLOAT)=
-+ ~all-buttons~
-
-The default (a ~nil~ value or an empty list) is a gray background
-combined with a pseudo three-dimensional effect.
-
-The ~flat~ property makes the button two dimensional.
-
-The ~accented~ property changes the background from gray to an accent
-color.
-
-The ~faint~ property reduces the overall coloration.
-
-The ~variable-pitch~ property applies a proportionately spaced typeface
-to the button~s text.
-
-[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and 
others]].
-
-The ~underline~ property draws a line below the affected text and
-removes whatever box effect.  This is optimal when Emacs runs inside a
-terminal emulator ([[#h:fbb5e254-afd6-4313-bb05-93b3b4f67358][More accurate 
colors in terminal emulators]]).  If
-~flat~ and ~underline~ are defined together, the latter takes
-precedence.
-
-The symbol of a weight attribute adjusts the font of the button
-accordingly, such as ~light~, ~semibold~, etc.  Valid symbols are
-defined in the variable ~modus-themes-weights~.
-
-[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
-
-A number, expressed as a floating point (e.g. =0.9=), adjusts the height
-of the button's text to that many times the base font size.  The default
-height is the same as =1.0=, though it need not be explicitly stated.
-Instead of a floating point, an acceptable value can be in the form of a
-cons cell like =(height . FLOAT)= or =(height FLOAT)=, where FLOAT is
-the given number.
-
-The ~all-buttons~ property extends the box button effect (or the
-aforementioned properties) to the faces of the generic widget library.
-By default, those do not look like the buttons of the Custom UI as they
-are ordinary text wrapped in square brackets.
-
-Combinations of any of those properties are expressed as a list,
-like in these examples:
-
-#+begin_src emacs-lisp
-(flat)
-(variable-pitch flat)
-(variable-pitch flat semibold 0.9)
-(variable-pitch flat semibold (height 0.9)) ; same as above
-(variable-pitch flat semibold (height . 0.9)) ; same as above
-#+end_src
-
-The order in which the properties are set is not significant.
-
-In user configuration files the form may look like this:
-
-#+begin_src emacs-lisp
-(setq modus-themes-box-buttons '(variable-pitch flat 0.9))
-#+end_src
-
-** Option for command prompt styles
-:properties:
-:alt_title: Command prompts
-:description: Choose among plain, subtle, or intense prompts
-:custom_id: h:db5a9a7c-2928-4a28-b0f0-6f2b9bd52ba1
-:end:
-#+vindex: modus-themes-prompts
-
-Brief: Control the style of command prompts (e.g. minibuffer, shell, IRC
-clients).
-
-Symbol: ~modus-themes-prompts~ (=choice= type, list of properties)
-
-Possible values are expressed as a list of properties (default is ~nil~ or
-an empty list).  The list can include any of the following symbols:
-
-+ ~background~
-+ ~bold~
-+ ~gray~
-+ ~intense~
-+ ~italic~
 
 The default (a ~nil~ value or an empty list) means to only use a subtle
-accented foreground color.
-
-The property ~background~ applies a background color to the prompt's text.
-By default, this is a subtle accented value.
-
-The property ~intense~ makes the foreground color more prominent.  If the
-~background~ property is also set, it amplifies the value of the
-background as well.
-
-The property ~gray~ changes the prompt's colors to grayscale.  This
-affects the foreground and, if the ~background~ property is also set, the
-background.  Its effect is subtle, unless it is combined with the
-~intense~ property.
-
-The property ~bold~ makes the text use a bold typographic weight.
-Similarly, ~italic~ adds a slant to the font's forms (italic or oblique
-forms, depending on the typeface).
-
-Combinations of any of those properties are expressed as a list, like in
-these examples:
-
-#+begin_src emacs-lisp
-(intense)
-(bold intense)
-(intense bold gray)
-(intense background gray bold)
-#+end_src
-
-The order in which the properties are set is not significant.
-
-In user configuration files the form may look like this:
+colored foreground color.
 
-#+begin_src emacs-lisp
-(setq modus-themes-prompts '(background gray))
-#+end_src
+The ~italic~ property adds a slant to the font's forms (italic or
+oblique forms, depending on the typeface).
 
-** Option for mode line presentation
-:properties:
-:alt_title: Mode line
-:description: Choose among several styles, with or without borders
-:custom_id: h:27943af6-d950-42d0-bc23-106e43f50a24
-:end:
-#+vindex: modus-themes-mode-line
-
-Brief: Control the style of the mode lines.
-
-Symbol: ~modus-themes-mode-line~ (=choice= type, list of properties)
-
-Possible values, which can be expressed as a list of combinations of box
-effect, color, and border visibility:
-
-+ Overall style:
-  - ~3d~
-  - ~moody~
-+ ~accented~
-+ ~borderless~
-+ A natural number > 1 for extra padding or a cons cell in the form of
-  ~(padding . NATNUM)~.
-+ A floating point to set the height of the mode line's text.  It can
-  also be a cons cell in the form of ~(height . FLOAT)~.
-
-The default (a ~nil~ value or an empty list) is a two-dimensional
-rectangle with a border around it.  The active and the inactive mode
-lines use different shades of grayscale values for the background,
-foreground, border.
-
-The ~3d~ property applies a three-dimensional effect to the active mode
-line.  The inactive mode lines remain two-dimensional and are toned down
-a bit, relative to the default style.
-
-The ~moody~ property optimizes the mode line for use with the library of
-the same name (hereinafter referred to as 'Moody').  In practice, it
-removes the box effect and replaces it with underline and overline
-properties.  It also tones down the inactive mode lines.  Despite its
-intended purpose, this option can also be used without the Moody library
-(please consult the themes' manual on this point for more details).  If
-both ~3d~ and ~moody~ properties are set, the latter takes precedence.
-
-The ~borderless~ property removes the color of the borders.  It does not
-actually remove the borders, but only makes their color the same as the
-background, effectively creating some padding.
-
-The ~accented~ property ensures that the active mode line uses a colored
-background instead of the standard shade of gray.
-
-A positive integer (natural number or natnum) applies a padding effect
-of NATNUM pixels at the boundaries of the mode lines.  The default value
-is 1 and does not need to be specified explicitly.  The padding has no
-effect when the ~moody~ property is also used, because Moody already
-applies its own tweaks.  To ensure that the underline is placed at the
-bottom of the mode line, set ~x-underline-at-descent-line~ to non-~nil~
-(this is not needed when the ~borderless~ property is also set).  For
-users on Emacs 29, the ~x-use-underline-position-properties~ variable must
-also be set to nil.
-
-The padding can also be expressed as a cons cell in the form of
-=(padding . NATNUM)= or =(padding NATNUM)= where the key is constant and
-NATNUM is the desired natural number.
-
-A floating point applies an adjusted height to the mode line's text as a
-multiple of the main font size.  The default rate is 1.0 and does not
-need to be specified.  Apart from a floating point, the height may also
-be expressed as a cons cell in the form of =(height . FLOAT)= or
-=(height FLOAT)= where the key is constant and the FLOAT is the desired
-number.
+The symbol of a font weight attribute such as ~light~, ~semibold~, et
+cetera, adds the given weight to links.  Valid symbols are defined in
+the variable ~modus-themes-weights~.  The absence of a weight means
+that the one of the underlying text will be used.
 
 Combinations of any of those properties are expressed as a list, like in
 these examples:
 
 #+begin_src emacs-lisp
-(accented)
-(borderless 3d)
-(moody accented borderless)
-#+end_src
-
-Same as above, using the padding and height as an example (these
-all yield the same result):
-
-#+begin_src emacs-lisp
-(accented borderless 4 0.9)
-(accented borderless (padding . 4) (height . 0.9))
-(accented borderless (padding 4) (height 0.9))
+(bold italic)
+(italic semibold)
 #+end_src
 
 The order in which the properties are set is not significant.
@@ -1137,57 +689,10 @@ The order in which the properties are set is not 
significant.
 In user configuration files the form may look like this:
 
 #+begin_src emacs-lisp
-(setq modus-themes-mode-line '(borderless accented))
+(setq modus-themes-prompts '(extrabold italic))
 #+end_src
 
-Note that Moody does not expose any faces that the themes could style
-directly.  Instead it re-purposes existing ones to render its tabs and
-ribbons.  As such, there may be cases where the contrast ratio falls
-below the 7:1 target that the themes conform with (WCAG AAA).  To hedge
-against this, we configure a fallback foreground for the ~moody~ property,
-which will come into effect when the background of the mode line changes
-to something less accessible, such as Moody ribbons (read the doc string
-of ~set-face-attribute~, specifically ~:distant-foreground~).  This fallback
-is activated when Emacs determines that the background and foreground of
-the given construct are too close to each other in terms of color
-distance.  In practice, users will need to experiment with the variable
-~face-near-same-color-threshold~ to trigger the effect.  We find that a
-value of =45000= shall suffice, contrary to the default =30000=.  Though for
-the combinations that involve the ~accented~ and ~moody~ properties, as
-mentioned above, that should be raised up to =70000=.  Do not set it too
-high, because it has the adverse effect of always overriding the default
-colors (which have been carefully designed to be highly accessible).
-
-Furthermore, because Moody expects an underline and overline instead of
-a box style, it is strongly advised to set ~x-underline-at-descent-line~
-to a non-~nil~ value.
-
-Finally, note that various packages which heavily modify the mode line,
-such as =doom-modeline=, =nano-modeline=, =powerline=, =spaceline= may not look
-as intended with all possible combinations of this user option.
-
-** Option for accented background in tab interfaces
-:properties:
-:alt_title: Tab style
-:description: Toggle accented background for tabs
-:custom_id: h:27cef8f5-dc4e-4c93-ba41-b899e650d936
-:end:
-#+vindex: modus-themes-tabs-accented
-
-Brief: Toggle accent colors for tabbed interfaces.
-
-Symbol: ~modus-themes-tabs-accented~ (=boolean= type)
-
-Possible values:
-
-+ ~nil~ (default)
-+ ~t~
-
-By default, all tab interfaces use backgrounds which are shades of gray.
-When this option is set to non-~nil~, the backgrounds become colorful.
-
-This affects the built-in ~tab-bar-mode~ and ~tab-line-mode~, as well as the
-Centaur tabs package.
+[[#h:bd75b43a-0bf1-45e7-b8b4-20944ca8b7f8][Make prompts more or less 
colorful]].
 
 ** Option for completion framework aesthetics
 :properties:
@@ -1201,204 +706,194 @@ Brief: Set the overall style of completion framework 
interfaces.
 
 Symbol: ~modus-themes-completions~ (=alist= type properties)
 
-This affects Company, Corfu, Flx, Helm, Icomplete/Fido, Ido, Ivy,
-Orderless, Selectrum, Vertico.  The value is an alist that takes the
-form of a =(KEY . PROPERTIES)= combination.  =KEY= is a symbol, while
+This affects Company, Corfu, Flx, Icomplete/Fido, Ido, Ivy, Orderless,
+Vertico.  The value is an alist of expressions, each of which takes
+the form of =(KEY . LIST-OF-PROPERTIES)=.  =KEY= is a symbol, while
 =PROPERTIES= is a list.  Here is a sample, followed by a description
 of the particularities:
 
 #+begin_src emacs-lisp
 (setq modus-themes-completions
-      '((matches . (extrabold background intense))
-        (selection . (semibold accented intense))
-        (popup . (accented))))
+      '((matches . (extrabold background))
+        (selection . (semibold italic))))
 #+end_src
 
 The ~matches~ key refers to the highlighted characters that correspond
-to the user's input.  When its properties are ~nil~ or an empty list,
+to the user's input.  When its properties are nil or an empty list,
 matching characters in the user interface will have a bold weight and
 a colored foreground.  The list of properties may include any of the
 following symbols regardless of the order they may appear in:
 
-- ~background~ to add a background color;
-
-- ~intense~ to increase the overall coloration (also amplifies
-  the ~background~, if present);
-
 - ~underline~ to draw a line below the characters;
 
 - ~italic~ to use a slanted font (italic or oblique forms);
 
-- The symbol of a font weight attribute such as ~light~, ~semibold~, et
-  cetera.  Valid symbols are defined in the ~modus-themes-weights~
-  variable.  The absence of a weight means that bold will be used.
+- The symbol of a font weight attribute such as ~light~,
+  ~semibold~, et cetera.  Valid symbols are defined in the
+  variable ~modus-themes-weights~.  The absence of a weight means
+  that bold will be used.
 
 The ~selection~ key applies to the current line or currently matched
 candidate, depending on the specifics of the user interface.  When its
-properties are ~nil~ or an empty list, it has a subtle gray background,
+properties are nil or an empty list, it has a subtle gray background,
 a bold weight, and the base foreground value for the text.  The list
 of properties it accepts is as follows (order is not significant):
 
-- ~accented~ to make the background colorful instead of gray;
-
-- ~text-also~ to apply extra color to the text of the selected line;
-
-- ~intense~ to increase the overall coloration;
-
 - ~underline~ to draw a line below the characters;
 
 - ~italic~ to use a slanted font (italic or oblique forms);
 
-- The symbol of a font weight attribute such as ~light~, ~semibold~, et
-  cetera.  Valid symbols are defined in the ~modus-themes-weights~
-  variable.  The absence of a weight means that bold will be used.
+- The symbol of a font weight attribute such as ~light~,
+  ~semibold~, et cetera.  Valid symbols are defined in the
+  variable ~modus-themes-weights~.  The absence of a weight means
+  that bold will be used.
 
-The ~popup~ key takes the same values as ~selection~.  The only
-difference is that it applies specifically to user interfaces that
-display an inline popup and thus have slightly different styling
-requirements than the minibuffer.  The two prominent packages are
-=company= and =corfu=.
-
-Apart from specifying each key separately, a fallback list is accepted.
-This is only useful when the desired aesthetic is the same across all
-keys that are not explicitly referenced.  For example, this:
+Apart from specifying each key separately, a catch-all list is
+accepted.  This is only useful when the desired aesthetic is the same
+across all keys that are not explicitly referenced.  For example,
+this:
 
 #+begin_src emacs-lisp
 (setq modus-themes-completions
-      '((t . (extrabold intense))))
+      '((t . (extrabold underline))))
 #+end_src
 
 Is the same as:
 
 #+begin_src emacs-lisp
 (setq modus-themes-completions
-      '((matches . (extrabold intense))
-        (selection . (extrabold intense))
-        (popup . (extrabold intense))))
+      '((matches . (extrabold underline))
+        (selection . (extrabold underline))))
 #+end_src
 
-In the case of the fallback, any property that does not apply to the
-corresponding key is simply ignored (~matches~ does not have ~accented~
-and ~text-also~, while ~selection~ and ~popup~ do not have
-~background~).
-
-[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
-
-Also refer to the documentation of the ~orderless~ package for its
-intersection with ~company~ (if you choose to use those in tandem).
+[[#h:d959f789-0517-4636-8780-18123f936f91][Make completion matches more or 
less colorful]].
 
-** Option for mail citations
+** Option for org-mode block styles
 :properties:
-:alt_title: Mail citations
-:description: Choose among colorful, desaturated, monochrome citations
-:custom_id: h:5a12765d-0ba0-4a75-ab11-e35d3bbb317d
+:alt_title: Org mode blocks
+:description: Choose among plain, gray, or tinted backgrounds
+:custom_id: h:b7e328c0-3034-4db7-9cdf-d5ba12081ca2
 :end:
-#+vindex: modus-themes-mail-citations
+#+vindex: modus-themes-org-blocks
 
-Brief: Set the overall style of citations/quotes when composing
-emails.
+Brief: Set the overall style of Org code blocks, quotes, and the like.
 
-Symbol: ~modus-themes-mail-citations~ (=choice= type)
+Symbol: ~modus-themes-org-blocks~ (=choice= type)
 
 Possible values:
 
 1. ~nil~ (default)
-2. ~intense~
-3. ~faint~
-4. ~monochrome~
-
-By default (a ~nil~ value) citations are styled with contrasting hues to
-denote their depth.  Colors are easy to tell apart because they
-complement each other, but they otherwise are not very prominent.
+2. ~gray-background~
+3. ~tinted-background~
 
-Option ~intense~ is similar to the default in terms of using contrasting
-and complementary hues, but applies more saturated colors.
-
-Option ~faint~ maintains the same color-based distinction between citation
-levels though the colors it uses have subtle differences between them.
+Nil (the default) means that the block has no background of its own:
+it uses the one that applies to the rest of the buffer.  In this case,
+the delimiter lines have a gray color for their text, making them look
+exactly like all other Org properties.
 
-Option ~monochrome~ turns all quotes into a shade of gray.
+Option ~gray-background~ applies a subtle gray background to the
+block's contents.  It also affects the begin and end lines of the
+block as they get another shade of gray as their background, which
+differentiates them from the contents of the block.  All background
+colors extend to the edge of the window, giving the area a
+rectangular, "blocky" presentation.  If the begin/end lines do not
+extend in this way, check the value of the Org user option
+~org-fontify-whole-block-delimiter-line~.
+
+Option ~tinted-background~ uses a colored background for the contents
+of the block.  The exact color value will depend on the programming
+language and is controlled by the variable ~org-src-block-faces~
+(refer to the theme's source code for the current association list).
+For this to take effect, the Org buffer needs to be restarted with
+~org-mode-restart~.
+
+Code blocks use their major mode's fontification (syntax highlighting)
+only when the variable ~org-src-fontify-natively~ is non-nil.  While
+quote/verse blocks require setting
+~org-fontify-quote-and-verse-blocks~ to a non-nil value.
 
-Whatever the value assigned to this variable, citations in emails are
-controlled by typographic elements or indentation, which the themes do
-not touch.
+[[#h:f44cc6e3-b0f1-4a5e-8a90-9e48fa557b50][Update Org block delimiter 
fontification]].
 
-** Option for fringe visibility
+** Option for the headings' overall style
 :properties:
-:alt_title: Fringes
-:description: Choose among invisible, subtle, or intense fringe styles
-:custom_id: h:1983c3fc-74f6-44f3-b917-967c403bebae
+:alt_title: Heading styles
+:description: Choose among several styles, also per heading level
+:custom_id: h:271eff19-97aa-4090-9415-a6463c2f9ae1
 :end:
-#+vindex: modus-themes-fringes
-
-Brief: Control the overall coloration of the fringes.
-
-Symbol: ~modus-themes-fringes~ (=choice= type)
-
-Possible values:
-
-1. ~nil~
-2. ~subtle~
-3. ~intense~
+#+vindex: modus-themes-headings
 
-When the value is nil, do not apply a distinct background color.
+Brief: Heading styles with optional list of values per heading level.
 
-With a value of ~subtle~ use a gray background color that is
-visible yet close to the main background color.
+Symbol: ~modus-themes-headings~ (=alist= type, multiple properties)
 
-With ~intense~ use a more pronounced gray background color.
+This is an alist that accepts a =(KEY . LIST-OF-VALUES)= combination.
+The =KEY= is either a number, representing the heading's level (0
+through 8) or ~t~, which pertains to the fallback style.  The named
+keys =agenda-date= and =agenda-structure= apply to the Org agenda.
 
-** Option for language checkers
-:properties:
-:alt_title: Language checkers
-:description: Control the style of language checkers/linters
-:custom_id: h:4b13743a-8ebf-4d2c-a043-cceba10b1eb4
-:end:
-#+vindex: modus-themes-lang-checkers
+Level 0 is a special heading: it is used for what counts as a document
+title or equivalent, such as the =#+title= construct we find in Org
+files.  Levels 1-8 are regular headings.
 
-Brief: Control the style of in-buffer warnings and errors produced by
-spell checkers, code linters, and the like.
+The =LIST-OF-VALUES= covers symbols that refer to properties, as
+described below.  Here is a complete sample with various stylistic
+combinations, followed by a presentation of all available properties:
 
-Symbol: ~modus-themes-lang-checkers~ (=choice= type, list of properties)
+#+begin_src emacs-lisp
+(setq modus-themes-headings
+      '((1 . (variable-pitch 1.5))
+        (2 . (1.3))
+        (agenda-date . (1.3))
+        (agenda-structure . (variable-pitch light 1.8))
+        (t . (1.1))))
+#+end_src
 
-Possible values are expressed as a list of properties (default is ~nil~ or
-an empty list).  The list can include any of the following symbols:
+Properties:
 
-+ ~straight-underline~
-+ ~text-also~
-+ ~background~
-+ Overall coloration:
-  - ~intense~
-  - ~faint~
-
-The default (a ~nil~ value or an empty list) applies a color-coded
-underline to the affected text, while it leaves the original foreground
-intact.  If the display spec of Emacs has support for it, the
-underline's style is that of a wave, otherwise it is a straight line.
++ A font weight, which must be supported by the underlying typeface:
+  - ~thin~
+  - ~ultralight~
+  - ~extralight~
+  - ~light~
+  - ~semilight~
+  - ~regular~
+  - ~medium~
+  - ~semibold~
+  - ~bold~ (default)
+  - ~heavy~
+  - ~extrabold~
+  - ~ultrabold~
++ A floating point as a height multiple of the default or a cons cell in
+  the form of =(height . FLOAT)=.
 
-The property ~straight-underline~ ensures that the underline under the
-affected text is always drawn as a straight line.
+By default (a ~nil~ value for this variable), all headings have a bold
+typographic weight and use a desaturated text color.
 
-The property ~text-also~ applies the same color of the underline to the
-affected text.
+A ~variable-pitch~ property changes the font family of the heading to that
+of the ~variable-pitch~ face (normally a proportionately spaced typeface).
 
-The property ~background~ adds a color-coded background.
+The symbol of a weight attribute adjusts the font of the heading
+accordingly, such as ~light~, ~semibold~, etc.  Valid symbols are
+defined in the variable ~modus-themes-weights~.  The absence of a weight
+means that bold will be used by virtue of inheriting the ~bold~ face.
 
-The property ~intense~ amplifies the applicable colors if ~background~
-and/or ~text-also~ are set.  If ~intense~ is set on its own, then it implies
-~text-also~.
+[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
 
-The property ~faint~ uses nuanced colors for the underline and for the
-foreground when ~text-also~ is included.  If both ~faint~ and ~intense~ are
-specified, the former takes precedence.
+A number, expressed as a floating point (e.g. 1.5), adjusts the height
+of the heading to that many times the base font size.  The default
+height is the same as 1.0, though it need not be explicitly stated.
+Instead of a floating point, an acceptable value can be in the form of a
+cons cell like =(height . FLOAT)= or =(height FLOAT)=, where FLOAT is
+the given number.
 
-Combinations of any of those properties can be expressed in a list, as
-in those examples:
+Combinations of any of those properties are expressed as a list, like in
+these examples:
 
 #+begin_src emacs-lisp
-(background)
-(straight-underline intense)
-(background text-also straight-underline)
+(semibold)
+(variable-pitch semibold 1.3)
+(variable-pitch semibold (height 1.3)) ; same as above
+(variable-pitch semibold (height . 1.3)) ; same as above
 #+end_src
 
 The order in which the properties are set is not significant.
@@ -1406,752 +901,1230 @@ The order in which the properties are set is not 
significant.
 In user configuration files the form may look like this:
 
 #+begin_src emacs-lisp
-(setq modus-themes-lang-checkers '(text-also background))
+(setq modus-themes-headings
+      '((1 . (variable-pitch 1.5))
+        (2 . (1.3))
+        (agenda-date . (1.3))
+        (agenda-structure . (variable-pitch light 1.8))
+        (t . (1.1))))
 #+end_src
 
-NOTE: The placement of the straight underline, though not the wave
-style, is controlled by the built-in variables ~underline-minimum-offset~,
-~x-underline-at-descent-line~, ~x-use-underline-position-properties~.
-
-To disable fringe indicators for Flymake or Flycheck, refer to variables
-~flymake-fringe-indicator-position~ and ~flycheck-indication-mode~,
-respectively.
-
-** Option for line highlighting
-:properties:
-:alt_title: Line highlighting
-:description: Choose style of current line (hl-line-mode)
-:custom_id: h:1dba1cfe-d079-4c13-a810-f768e8789177
-:end:
-#+vindex: modus-themes-hl-line
-
-Brief: Control the style of the current line of ~hl-line-mode~.
-
-Symbol: ~modus-themes-hl-line~ (=choice= type, list of properties)
-
-The value is a list of properties, each designated by a symbol.  With
-a ~nil~ value, or an empty list, the style is a subtle gray background
-color.
-
-Possible properties are the following symbols:
-
-+ ~accented~
-+ ~intense~
-+ ~underline~
-
-The property ~accented~ changes the background to a colored variant.
-
-An ~underline~ property draws a line below the highlighted area.  Its
-color is similar to the background, so gray by default or an accent
-color when ~accented~ is also set.
-
-An ~intense~ property amplifies the colors in use, which may be both the
-background and the underline.
-
-Combinations of any of those properties are expressed as a list, like in
-these examples:
+When defining the styles per heading level, it is possible to pass a
+non-~nil~ value (~t~) instead of a list of properties.  This will retain the
+original aesthetic for that level.  For example:
 
 #+begin_src emacs-lisp
-(intense)
-(underline intense)
-(accented intense underline)
-#+end_src
-
-The order in which the properties are set is not significant.
-
-In user configuration files the form may look like this:
+(setq modus-themes-headings
+      '((1 . t)           ; keep the default style
+        (2 . (semibold 1.2))
+        (t . (rainbow)))) ; style for all other headings
 
-#+begin_src emacs-lisp
-(setq modus-themes-hl-line '(underline accented))
+(setq modus-themes-headings
+      '((1 . (variable-pitch 1.5))
+        (2 . (semibold))
+        (t . t))) ; default style for all other levels
 #+end_src
 
-Set ~x-underline-at-descent-line~ to a non-~nil~ value so that the
-placement of the underline coincides with the lower boundary of the
-colored background.
+Note that the text color of headings, of their background, and
+overline can all be set via the overrides.  It is possible to have any
+color combination for any heading level (something that could not be
+done in older versions of the themes).
 
-This style affects several packages that enable ~hl-line-mode~, such as
-=elfeed=, =notmuch=, and =mu4e=.
+[[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]].
 
-[ Also check the =lin= package on GNU ELPA (by the author of the
-  modus-themes) for a stylistic enhancement to ~hl-line-mode~. ]
+[[#h:11297984-85ea-4678-abe9-a73aeab4676a][Make headings more or less 
colorful]].
 
-** Option for line numbers
+** Option for variable-pitch font in UI elements
 :properties:
-:alt_title: Line numbers
-:description: Toggle subtle style for line numbers
-:custom_id: h:8c4a6230-2e43-4aa2-a631-3b7179392e09
+:alt_title: UI typeface
+:description: Toggle the use of variable-pitch across the User Interface
+:custom_id: h:16cf666c-5e65-424c-a855-7ea8a4a1fcac
 :end:
-#+vindex: modus-themes-subtle-line-numbers
+#+vindex: modus-themes-variable-pitch-ui
 
-Brief: Toggle subtle line numbers.
+Brief: Toggle the use of proportionately spaced (~variable-pitch~) fonts
+in the User Interface.
 
-Symbol: ~modus-themes-subtle-line-numbers~ (=boolean= type)
+Symbol: ~modus-themes-variable-pitch-ui~ (=boolean= type)
 
-Possible value:
+Possible values:
 
 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
-line has a more pronounced background and foreground combination to
-bring more attention to itself.
+This option concerns User Interface elements that are under the direct
+control of Emacs.  In particular: the mode line, header line, tab bar,
+and tab line.
 
-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.
+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
+is done by assigning the ~variable-pitch~ face to the relevant items.
 
-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.
+[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and 
others]].
 
-** Option for mouseover effects
+** Option for palette overrides
 :properties:
-:alt_title: Mouse hover effects
-:description: Toggle intense style for mouseover highlights
-:custom_id: h:9b869620-fcc5-4b5f-9ab8-225d73b7f22f
+:alt_title: Palette overrides
+:description: Refashion color values and/or semantic color mappings
+:custom_id: h:34c7a691-19bb-4037-8d2f-67a07edab150
 :end:
-#+vindex: modus-themes-intense-mouseovers
 
-Brief: Toggle intense mouse hover effects.
+This section describes palette overrides in detail.  For a simpler
+alternative, use the presets we provide 
([[#h:b0bc811c-227e-42ec-bf67-15e1f41eb7bc][Palette override presets]]).
 
-Symbol: ~modus-themes-intense-mouseovers~ (=boolean= type)
+Each Modus theme specifies a color palette that declares named color
+values and semantic color mappings:
 
-Possible value:
++ Named colors consist of a symbol and a string that specifies a
+  hexadecimal RGB value.  For example: =(blue-warmer "#354fcf")=.
 
-1. ~nil~ (default)
-2. ~t~
++ The semantic color mappings associate an abstract construct with a
+  given named color from the palette, like =(heading-2 yellow-faint)=.
+  Both elements of the list are symbols, though the ~cadr~ (value) can
+  be a string that specifies a color, such as =(heading-2 "#354fcf")=.
+  Semantic color mappings cannot be recursive: their value must be
+  either a named color or a hexadecimal RGB value.
 
-By default all mouseover effects apply a highlight with a subtle colored
-background.  When non-~nil~, these have a more pronounced effect.
+#+vindex: modus-themes-common-palette-overrides
+Both of those subsets can be overridden, thus refashioning the theme.
+Overrides are either shared, by being stored in the user option
+~modus-themes-common-palette-overrides~, or they are specific to the
+theme they name.  In the latter case, the naming scheme of each
+palette variable is =THEME-NAME-palette-overrides=, thus yielding:
 
-Note that this affects the generic ~highlight~ which, strictly speaking,
-is not limited to mouse usage.
+#+vindex: modus-operandi-palette-overrides
++ ~modus-operandi-palette-overrides~
 
-** Option for markup style in Org and others
-:properties:
-:alt_title: Markup
-:description: Choose style for markup in Org and others
-:custom_id: h:9d9a4e64-99ac-4018-8f66-3051b9c43fd7
-:end:
-#+vindex: modus-themes-markup
+#+vindex: modus-operandi-deuteranopia-palette-overrides
++ ~modus-operandi-deuteranopia-palette-overrides~
 
-Brief: Choose style of markup in Org, Markdown, and others (affects
-constructs such as Org's ==verbatim== and =~code~=).
+#+vindex: modus-operandi-tinted-palette-overrides
++ ~modus-operandi-tinted-palette-overrides~
 
-Symbol: ~modus-themes-markup~ (=boolean= type)
+#+vindex: modus-vivendi-palette-overrides
++ ~modus-vivendi-palette-overrides~
 
-Possible values are expressed as a list of properties (default is ~nil~ or
-an empty list).  The list can include any of the following symbols:
+#+vindex: modus-vivendi-deuteranopia-palette-overrides
++ ~modus-vivendi-deuteranopia-palette-overrides~
 
-1. ~bold~
-2. ~italic~
-3. ~background~
-4. ~intense~
+#+vindex: modus-vivendi-tinted-palette-overrides
++ ~modus-vivendi-tinted-palette-overrides~
 
-The ~italic~ property applies a typographic slant (italics).
+Theme-specific overrides take precedence over the shared ones.  It is
+strongly advised that shared overrides do NOT alter color values, as
+those will not be appropriate for both dark and light themes.  Common
+overrides are best limited to the semantic color mappings as those use
+the color value that corresponds to the active theme (e.g. make the
+cursor =blue-warmer= in all themes, whatever the value of
+=blue-warmer= is in each theme).
 
-The ~bold~ property applies a heavier typographic weight.
+The value of any overrides' variable must mirror a theme's palette.
+Palette variables are named after their theme as =THEME-NAME-palette=.
+For example, the ~modus-operandi-palette~ is like this:
 
-[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
+#+begin_src emacs-lisp
+(defconst modus-operandi-palette
+    '(
+;;; Basic values
 
-The ~background~ property adds a background color.  The background is a
-shade of gray, unless the ~intense~ property is also set.
+      (bg-main     "#ffffff")
+      (bg-dim      "#f0f0f0")
+      (fg-main     "#000000")
 
-The ~intense~ property amplifies the existing coloration.  When
-~background~ is used, the background color is enhanced as well and
-becomes tinted instead of being gray.
+      ;; ...
 
-Combinations of any of those properties are expressed as a list,
-like in these examples:
+      (red         "#a60000")
+      (red-warmer  "#972500")
+      (red-cooler  "#a0132f")
+      (red-faint   "#7f0000")
+      (red-intense "#d00000")
 
-#+begin_src emacs-lisp
-(bold)
-(bold italic)
-(bold italic intense)
-(bold italic intense background)
-#+end_src
+      ;; ...
 
-The order in which the properties are set is not significant.
+;;;; Mappings
 
-In user configuration files the form may look like this:
+      ;; ...
 
-#+begin_src emacs-lisp
-(setq modus-themes-markup '(bold italic))
+      (cursor fg-main)
+      (builtin magenta-warmer)
+      (comment fg-dim)
+      (constant blue-cooler)
+      (docstring green-faint)
+      (fnname magenta)
+      (keyword magenta-cooler)
+
+      ;; ...
+      ))
 #+end_src
 
-Also check the variables ~org-hide-emphasis-markers~,
-~org-hide-macro-markers~.
+The ~modus-operandi-palette-overrides~ targets the entries that need
+to be changed.  For example, to make the main foreground colour a dark
+gray instead of pure black, use a shade of red for comments, and apply
+a cyan hue to keywords:
 
-** Option for parenthesis matching
-:properties:
-:alt_title: Matching parentheses
-:description: Choose between various styles for matching delimiters/parentheses
-:custom_id: h:e66a7e4d-a512-4bc7-9f86-fbbb5923bf37
-:end:
-#+vindex: modus-themes-paren-match
+#+begin_src emacs-lisp
+(setq modus-operandi-palette-overrides
+      '((fg-main "#333333")
+        (comment red-faint)
+        (keyword cyan-cooler)))
+#+end_src
 
-Brief: Control the style of matching delimiters produced by
-~show-paren-mode~.
+Changes take effect upon theme reload 
([[#h:9001527a-4e2c-43e0-98e8-3ef72d770639][Custom reload theme]]).
+Overrides are removed by setting their variable to a ~nil~ value.
 
-Symbol: ~modus-themes-paren-match~ (=choice= type, list of properties)
+The common accented foregrounds in each palette follow a predictable
+naming scheme: =HUE{,-warmer,-cooler,-faint,-intense}=.  =HUE= is one
+of the six basic colors: red, green, blue, yellow, magenta, cyan.
 
-Possible values are expressed as a list of properties (default is ~nil~ or
-an empty list).  The list can include any of the following symbols:
+Named colors that are meant to be used as backgrounds contain =bg= in
+their name, such as =bg-red-intense=.  While special purpose
+foregrounds that are meant to be combined with such backgrounds,
+contain =fg= in their name, such as =fg-removed= which complements
+=bg-removed=.
 
-+ ~bold~
-+ ~intense~
-+ ~underline~
+Named colors can be previewed, such as with the command
+~modus-themes-list-colors~ ([[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Preview 
theme colors]]).
 
-The default (a ~nil~ value or an empty list) is a subtle background color.
+For a video tutorial that users of all skill levels can approach,
+watch: https://protesilaos.com/codelog/2022-12-17-modus-themes-v4-demo/.
 
-The ~bold~ property adds a bold weight to the characters of the matching
-delimiters.
-
-The ~intense~ property applies a more prominent background color to the
-delimiters.
+*** Palette override presets
+:PROPERTIES:
+:CUSTOM_ID: h:b0bc811c-227e-42ec-bf67-15e1f41eb7bc
+:END:
 
-The ~underline~ property draws a straight line under the affected text.
+This section shows how to refashion the themes by opting in to the
+stylistic presets we provide.  Those presets override the default
+color mappings to amplify or tone down the overall coloration of the
+them.
 
-Combinations of any of those properties are expressed as a list, like in
-these examples:
+To make almost all aspects of the themes less intense, use this:
 
 #+begin_src emacs-lisp
-(bold)
-(underline intense)
-(bold intense underline)
+;; Always remember to reload the theme for changes to take effect!
+(setq modus-themes-common-palette-overrides 
modus-themes-preset-overrides-faint)
 #+end_src
 
-The order in which the properties are set is not significant.
+#+vindex: modus-themes-preset-overrides-faint
+With ~modus-themes-preset-overrides-faint~ the grays are toned down,
+gray backgrounds are removed from some contexts, and almost all accent
+colors are desaturated.  It makes the themes less attention-grabbing.
 
-In user configuration files the form may look like this:
+On the opposite end of the stylistic spectrum, we have this
 
 #+begin_src emacs-lisp
-(setq modus-themes-paren-match '(bold intense))
+;; Always remember to reload the theme for changes to take effect!
+(setq modus-themes-common-palette-overrides 
modus-themes-preset-overrides-intense)
 #+end_src
 
-This customization variable affects the built-in ~show-paren-mode~ and the
-=smartparens= package.
-
-** Option for active region
-:properties:
-:alt_title: Active region
-:description: Choose between various styles for the active region
-:custom_id: h:60798063-b4ad-45ea-b9a7-ff7b5c0ab74c
-:end:
-#+vindex: modus-themes-region
+#+vindex: modus-themes-preset-overrides-intense
+The ~modus-themes-preset-overrides-intense~ makes many background
+colors accented instead of gray and increases coloration in a number
+of places.  Colors stand out more and are made easier to spot.
 
-Brief: Control the style of the region.
+Note that the user is not limited to those presets.  The system of
+overrides we provide makes it possible to tweak the value of each
+individual named color and to change how values are assigned to
+semantic color mappings ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for 
palette overrides]]).  Subsequent
+sections provide examples 
([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette 
overrides]]).
 
-Symbol: ~modus-themes-region~ (=choice= type, list of properties)
+It is also possible to use those presets as a basis and, for example,
+add to them code from the subsequent sections of this manual.  This is
+the general idea (extra space for didactic purposes):
 
-Possible values are expressed as a list of properties (default is ~nil~ or
-an empty list).  The list can include any of the following symbols:
-
-+ ~no-extend~
-+ ~bg-only~
-+ ~accented~
+#+begin_src emacs-lisp
+(setq modus-themes-common-palette-overrides
+      `(
+        ;; From the section "Make the mode line borderless"
+        (border-mode-line-active unspecified)
+        (border-mode-line-inactive unspecified)
 
-The default (a ~nil~ value or an empty list) is a prominent gray
-background that overrides all foreground colors in the area it
-encompasses.  Its reach extends to the edge of the window.
+        ;; From the section "Make matching parenthesis more or less intense"
+        (bg-paren-match bg-magenta-intense)
+        (underline-paren-match fg-main)
 
-The ~no-extend~ property limits the region to the end of the line, so that
-it does not reach the edge of the window.
+        ;; And expand the preset here.  Note that the ,@ works because
+        ;; we use the backtick for this list, instead of a straight
+        ;; quote.
+        ,@modus-themes-preset-overrides-intense))
+#+end_src
 
-The ~bg-only~ property makes the region's background color more subtle to
-allow the underlying text to retain its foreground colors.
+*** Stylistic variants using palette overrides
+:PROPERTIES:
+:CUSTOM_ID: h:df1199d8-eaba-47db-805d-6b568a577bf3
+:END:
 
-The ~accented~ property applies a more colorful background to the region.
+This section contains practical examples of overriding the palette of
+the themes ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette 
overrides]]).  Users can copy the code to
+their init file, evaluate it, and then re-load the theme for changes
+to take effect.  To apply overrides at startup simply define them
+before the call that loads the theme.  Remember that we also provide
+presets that are easier to apply 
([[#h:b0bc811c-227e-42ec-bf67-15e1f41eb7bc][Palette override presets]]).
 
-Combinations of any of those properties are expressed as a list, like in
-these examples:
+**** Make the mode line borderless
+:PROPERTIES:
+:CUSTOM_ID: h:80ddba52-e188-411f-8cc0-480ebd75befe
+:END:
 
-#+begin_src emacs-lisp
-(no-extend)
-(bg-only accented)
-(accented bg-only no-extend)
-#+end_src
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).  To
+hide the border around the active and inactive mode lines, we need to
+set their color to that of the underlying background.
 
-The order in which the properties are set is not significant.
+[[#h:e8d781be-eefc-4a81-ac4e-5ed156190df7][Make the active mode line 
colorful]].
 
-In user configuration files the form may look like this:
+[[#h:5a0c58cc-f97f-429c-be08-927b9fbb0a9c][Add padding to mode line]].
 
 #+begin_src emacs-lisp
-(setq modus-themes-region '(bg-only no-extend))
-#+end_src
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
 
-** Option for diff buffer looks
-:properties:
-:alt_title: Diffs
-:description: Choose among intense, desaturated, or background-only diffs
-:custom_id: h:ea7ac54f-5827-49bd-b09f-62424b3b6427
-:end:
-#+vindex: modus-themes-diffs
-
-Brief: Set the overall style of diffs.
+(setq modus-themes-common-palette-overrides
+      '((border-mode-line-active unspecified)
+        (border-mode-line-inactive unspecified)))
+#+end_src
 
-Symbol: ~modus-themes-diffs~ (=choice= type)
+**** Make the active mode line colorful
+:PROPERTIES:
+:CUSTOM_ID: h:e8d781be-eefc-4a81-ac4e-5ed156190df7
+:END:
 
-Possible values:
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).
+Here we show some snippets that apply different stylistic variants.
+Of course, it is possible to use theme-specific overrides to, say,
+have a blue mode line for ~modus-operandi~ and a red one for
+~modus-vivendi~.
 
-1. ~nil~ (default)
-2. ~desaturated~
-3. ~bg-only~
+[[#h:80ddba52-e188-411f-8cc0-480ebd75befe][Make the mode line borderless]].
 
-The default (~nil~) uses fairly intense color combinations for diffs, by
-applying prominently colored backgrounds, with appropriately tinted
-foregrounds.
+[[#h:5a0c58cc-f97f-429c-be08-927b9fbb0a9c][Add padding to mode line]].
 
-Option ~desaturated~ follows the same principles as with the default
-(~nil~), though it tones down all relevant colors.
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
 
-Option ~bg-only~ applies a background but does not override the text's
-foreground.  This makes it suitable for a non-~nil~ value passed to
-~diff-font-lock-syntax~ (note: Magit does not support syntax highlighting
-in diffs---last checked on 2021-12-02).
+;; Blue background, neutral foreground, intense blue border
+(setq modus-themes-common-palette-overrides
+      '((bg-mode-line-active bg-blue)
+        (fg-mode-line-active fg-main)
+        (border-mode-line-active blue-intense)))
 
-When the user option ~modus-themes-deuteranopia~ is non-~nil~, all diffs
-will use a red/blue color-coding system instead of the standard
-red/green.  Other stylistic changes are made in the interest of
-optimizing for such a use-case.
+;; Subtle blue background, neutral foreground, intense blue border
+(setq modus-themes-common-palette-overrides
+      '((bg-mode-line-active bg-blue-subtle)
+        (fg-mode-line-active fg-main)
+        (border-mode-line-active blue-intense)))
 
-[[#h:3ed03a48-20d8-4ce7-b214-0eb7e4c79abe][Option for red-green color 
deficiency or deuteranopia]].
+;; Subtle red background, red foreground, invisible border
+(setq modus-themes-common-palette-overrides
+      '((bg-mode-line-active bg-red-subtle)
+        (fg-mode-line-active red-warmer)
+        (border-mode-line-active bg-red-subtle)))
+#+end_src
 
-In versions before =2.0.0= there was an option for foreground-only diffs.
-This is no longer supported at the theme level because there are cases
-where the perceived contrast and overall contextuality were not good
-enough although the applied colors were technically above the 7:1
-contrast threshold.
+**** Make the fringe invisible or another color
+:PROPERTIES:
+:CUSTOM_ID: h:c312dcac-36b6-4a1f-b1f5-ab1c9abe27b0
+:END:
 
-[[#h:e2aed9eb-5e1e-45ec-bbd7-bc4faeab3236][Diffs with only the foreground]].
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).
+Here we show how to make the fringe invisible or how to assign to it a
+different color.  The "fringe" is a small area to the right and left
+side of the Emacs window which shows indicators such as for truncation
+or continuation lines.
 
-[[#h:b0b31802-0216-427e-b071-1a47adcfe608][Ediff without diff color-coding]].
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
 
-** Option for org-mode block styles
-:properties:
-:alt_title: Org mode blocks
-:description: Choose among plain, gray, or tinted backgrounds
-:custom_id: h:b7e328c0-3034-4db7-9cdf-d5ba12081ca2
-:end:
-#+vindex: modus-themes-org-blocks
+;; Make the fringe invisible
+(setq modus-themes-common-palette-overrides
+      '((fringe unspecified)))
 
-Brief: Set the overall style of Org code blocks, quotes, and the like.
+;; Make the fringe more intense
+(setq modus-themes-common-palette-overrides
+      '((fringe bg-active)))
 
-Symbol: ~modus-themes-org-blocks~ (=choice= type)
+;; Make the fringe colorful, but nuanced
+(setq modus-themes-common-palette-overrides
+      '((fringe bg-blue-nuanced)))
+#+end_src
 
-Possible values:
+**** Make links use subtle or no underlines
+:PROPERTIES:
+:CUSTOM_ID: h:6c1d1dea-5cbf-4d92-b7bb-570a7a23ffe9
+:END:
 
-1. ~nil~ (default)
-2. ~gray-background~ (value ~grayscale~ exists for backward compatibility)
-3. ~tinted-background~ (value ~rainbow~ exists for backward compatibility)
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).  In
+this example, we showcase the special use of the ~unspecified~ symbol
+that underline mappings can read correctly.
 
-Nil (the default) means that the block has no background of its own: it
-uses the one that applies to the rest of the buffer.  In this case, the
-delimiter lines have a gray color for their text, making them look
-exactly like all other Org properties.
+#+begin_src emacs-lisp
+;; Subtle underlines
+(setq modus-themes-common-palette-overrides
+      '((underline-link border)
+        (underline-link-visited border)
+        (underline-link-symbolic border)))
 
-Option ~gray-background~ applies a subtle gray background to the block's
-contents.  It also affects the begin and end lines of the block as they
-get another shade of gray as their background, which differentiates them
-from the contents of the block.  All background colors extend to the
-edge of the window, giving the area a rectangular, "blocky"
-presentation.
-
-Option ~tinted-background~ uses a slightly colored background for the
-contents of the block.  The exact color will depend on the programming
-language and is controlled by the variable ~org-src-block-faces~ (refer to
-the theme's source code for the current association list).  For this to
-take effect, the Org buffer needs to be restarted with ~org-mode-restart~.
-In this scenario, it may be better to inhibit the extension of the
-delimiter lines' background to the edge of the window because Org does
-not provide a mechanism to update their colors depending on the contents
-of the block.  Disable the extension of such backgrounds by setting
-~org-fontify-whole-block-delimiter-line~ to nil.
-
-Code blocks use their major mode's colors only when the variable
-~org-src-fontify-natively~ is non-~nil~.  While quote/verse blocks require
-setting ~org-fontify-quote-and-verse-blocks~ to a non-~nil~ value.
+;; No underlines
+(setq modus-themes-common-palette-overrides
+      '((underline-link unspecified)
+        (underline-link-visited unspecified)
+        (underline-link-symbolic unspecified)))
+#+end_src
 
-[[#h:f44cc6e3-b0f1-4a5e-8a90-9e48fa557b50][Update Org block delimiter 
fontification]].
+**** Make prompts more or less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:bd75b43a-0bf1-45e7-b8b4-20944ca8b7f8
+:END:
 
-Older versions of the themes provided options ~grayscale~ (or ~greyscale~)
-and ~rainbow~.  Those will continue to work as they are aliases for
-~gray-background~ and ~tinted-background~, respectively.
+This section contains practical examples of overriding the palette of
+the themes ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette 
overrides]]).  In the following code
+block we show how to add or remove color from prompts.
 
-** Option for Org agenda constructs
-:properties:
-:alt_title: Org agenda
-:description: Control each element in the presentation of the agenda
-:custom_id: h:68f481bc-5904-4725-a3e6-d7ecfa7c3dbc
-:end:
-#+vindex: modus-themes-org-agenda
+[[#h:db5a9a7c-2928-4a28-b0f0-6f2b9bd52ba1][Option for command prompt styles]].
 
-Brief: Control the style of the Org agenda.  Multiple parameters are
-available, each with its own options.
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
 
-Symbol: ~modus-themes-org-agenda~ (=alist= type, multiple styles)
+;; Keep the background unspecified (like the default), but use a faint
+;; foreground color.
+(setq modus-themes-common-palette-overrides
+      '((fg-prompt cyan-faint)
+        (bg-prompt unspecified)))
 
-This is an alist that accepts a =(key . value)= combination.  Some values
-are specified as a list.  Here is a sample, followed by a description of
-all possible combinations:
+;; Add a nuanced background to prompts that complements their foreground.
+(setq modus-themes-common-palette-overrides
+      '((fg-prompt cyan)
+        (bg-prompt bg-cyan-nuanced)))
 
-#+begin_src emacs-lisp
-(setq modus-themes-org-agenda
-      '((header-block . (variable-pitch 1.5))
-        (header-date . (grayscale workaholic bold-today 1.2))
-        (event . (accented italic varied))
-        (scheduled . uniform)
-        (habit . traffic-light)))
+;; Add a yellow background and adjust the foreground accordingly.
+(setq modus-themes-common-palette-overrides
+      '((fg-prompt fg-main)
+        (bg-prompt bg-yellow-subtle))) ; try to replace "subtle" with "intense"
 #+end_src
 
-A ~header-block~ key applies to elements that concern the headings which
-demarcate blocks in the structure of the agenda.  By default (a ~nil~
-value) those are rendered in a bold typographic weight, plus a height
-that is slightly taller than the default font size.  Acceptable values
-come in the form of a list that can include either or both of those
-properties:
+**** Make completion matches more or less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:d959f789-0517-4636-8780-18123f936f91
+:END:
 
-- ~variable-pitch~ to use a proportionately spaced typeface;
+This section contains practical examples of overriding the palette of
+the themes ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette 
overrides]]).   Here we demonstrate how
+to activate background coloration for completion matches.  We show
+three different degrees of intensity.
+
+[[#h:f1c20c02-7b34-4c35-9c65-99170efb2882][Option for completion framework 
aesthetics]].
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+;; Add a nuanced background color to completion matches, while keeping
+;; their foreground intact.
+(setq modus-themes-common-palette-overrides
+      '((fg-completion-match-0 blue)
+        (fg-completion-match-1 magenta-warmer)
+        (fg-completion-match-2 cyan)
+        (fg-completion-match-3 red)
+        (bg-completion-match-0 bg-blue-nuanced)
+        (bg-completion-match-1 bg-magenta-nuanced)
+        (bg-completion-match-2 bg-cyan-nuanced)
+        (bg-completion-match-3 bg-red-nuanced)))
+
+;; Add intense background colors to completion matches and adjust the
+;; foregrounds accordingly.
+(setq modus-themes-common-palette-overrides
+      '((fg-completion-match-0 fg-main)
+        (fg-completion-match-1 fg-main)
+        (fg-completion-match-2 fg-main)
+        (fg-completion-match-3 fg-main)
+        (bg-completion-match-0 bg-blue-intense)
+        (bg-completion-match-1 bg-yellow-intense)
+        (bg-completion-match-2 bg-cyan-intense)
+        (bg-completion-match-3 bg-red-intense)))
+
+;; Like the above, but with subtle backgrounds.
+(setq modus-themes-common-palette-overrides
+      '((fg-completion-match-0 fg-main)
+        (fg-completion-match-1 fg-main)
+        (fg-completion-match-2 fg-main)
+        (fg-completion-match-3 fg-main)
+        (bg-completion-match-0 bg-blue-subtle)
+        (bg-completion-match-1 bg-yellow-subtle)
+        (bg-completion-match-2 bg-cyan-subtle)
+        (bg-completion-match-3 bg-red-subtle)))
+#+end_src
+
+Adding to the above, it is possible to, say, reduce the number of
+colors to two:
+
+#+begin_src emacs-lisp
+;; No backgrounds (like the default) and just use two colors.
+(setq modus-themes-common-palette-overrides
+      '((fg-completion-match-0 blue)
+        (fg-completion-match-1 yellow)
+        (fg-completion-match-2 blue)
+        (fg-completion-match-3 yellow)
+        (bg-completion-match-0 unspecified)
+        (bg-completion-match-1 unspecified)
+        (bg-completion-match-2 unspecified)
+        (bg-completion-match-3 unspecified)))
+
+;; Again, a two-color style but this time with backgrounds
+(setq modus-themes-common-palette-overrides
+      '((fg-completion-match-0 blue)
+        (fg-completion-match-1 yellow)
+        (fg-completion-match-2 blue)
+        (fg-completion-match-3 yellow)
+        (bg-completion-match-0 bg-blue-nuanced)
+        (bg-completion-match-1 bg-yellow-nuanced)
+        (bg-completion-match-2 bg-blue-nuanced)
+        (bg-completion-match-3 bg-yellow-nuanced)))
+#+end_src
+
+The user can mix and match to their liking.
+
+**** Make comments yellow and strings green
+:PROPERTIES:
+:CUSTOM_ID: h:26f53daa-0065-48dc-88ab-6a718d16cd95
+:END:
 
-- A number as a floating point (e.g. 1.5) to set the height of the text
-  to that many times the default font height.  A float of 1.0 or the
-  symbol ~no-scale~ have the same effect of making the font the same
-  height as the rest of the buffer.  When neither a number nor
-  `no-scale' are present, the default is a small increase in height (a
-  value of 1.15).
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).  In
+previous versions of the themes, we provided an option for yellow-ish
+comments and green-ish strings.  For some users, those were still not
+good enough, as the exact values were hardcoded.  Here we show how to
+reproduce the effect, but also how to tweak it to one's liking.
 
-  Instead of a floating point, an acceptable value can be in the form of
-  a cons cell like =(height . FLOAT)= or =(height FLOAT)=, where FLOAT
-  is the given number.
+[[#h:c8767172-bf11-4c96-81dc-e736c464fc9c][Make code syntax use the old 
alt-syntax style]].
 
-- The symbol of a weight attribute adjusts the font of the heading
-  accordingly, such as ~light~, ~semibold~, etc.  Valid symbols are
-  defined in the variable ~modus-themes-weights~.  The absence of a
-  weight means that bold will be used by virtue of inheriting the ~bold~
-  face.
+[[#h:943063da-7b27-4ba4-9afe-f8fe77652fd1][Make use of alternative styles for 
code syntax]].
 
-[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
 
-In case both a number and ~no-scale~ are in the list, the latter takes
-precedence.  If two numbers are specified, the first one is applied.
+;; Yellow comments and green strings like older versions of the Modus
+;; themes
+(setq modus-themes-common-palette-overrides
+      '((comment yellow-cooler)
+        (string green-cooler)))
 
-Example usage:
+;; Faint yellow comments and a different shade of green for strings
+(setq modus-themes-common-palette-overrides
+      '((comment yellow-faint)
+        (string green-warmer)))
 
-#+begin_src emacs-lisp
-(header-block . nil)
-(header-block . (1.5))
-(header-block . (no-scale))
-(header-block . (variable-pitch 1.5))
-(header-block . (variable-pitch 1.5 semibold))
+;; Green comments and yellow strings, because now the user has the
+;; freedom to do it
+(setq modus-themes-common-palette-overrides
+      '((comment green)
+        (string yellow-cooler)))
 #+end_src
 
-A ~header-date~ key covers date headings.  Dates use only a foreground
-color by default (a ~nil~ value), with weekdays and weekends having a
-slight difference in hueness.  The current date has an added gray
-background.  This key accepts a list of values that can include any of
-the following properties:
-
-- ~grayscale~ to make weekdays use the main foreground color and
-  weekends a more subtle gray;
-
-- ~workaholic~ to make weekdays and weekends look the same in
-  terms of color;
+**** Make code syntax use the old alt-syntax style
+:PROPERTIES:
+:CUSTOM_ID: h:c8767172-bf11-4c96-81dc-e736c464fc9c
+:END:
 
-- ~bold-today~ to apply a bold typographic weight to the current
-  date;
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).  In
+this section we show how to reproduce what previous versions of the
+Modus themes provided as a stylistic alternative for code syntax.  The
+upside of using overrides for this purpose is that we can tweak the
+style to our liking, but first let's start with its recreation:
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; The old "alt-syntax"
+(setq modus-themes-common-palette-overrides
+      '((builtin magenta)
+        (comment fg-dim)
+        (constant magenta-cooler)
+        (docstring magenta-faint)
+        (docmarkup green-faint)
+        (fnname magenta-warmer)
+        (keyword cyan)
+        (preprocessor cyan-cooler)
+        (string red-cooler)
+        (type magenta-cooler)
+        (variable blue-warmer)
+        (rx-construct magenta-warmer)
+        (rx-backslash blue-cooler)))
+#+end_src
+
+The "alt-syntax" could optionally use green strings and yellow
+comments ([[#h:26f53daa-0065-48dc-88ab-6a718d16cd95][Make comments yellow and 
strings green]]):
+
+#+begin_src emacs-lisp
+;; Same as above, but with yellow comments and green strings
+(setq modus-themes-common-palette-overrides
+      '((builtin magenta)
+        (comment yellow-faint)
+        (constant magenta-cooler)
+        (docstring green-faint)
+        (docmarkup magenta-faint)
+        (fnname magenta-warmer)
+        (keyword cyan)
+        (preprocessor cyan-cooler)
+        (string green-cooler)
+        (type magenta-cooler)
+        (variable blue-warmer)
+        (rx-construct magenta-warmer)
+        (rx-backslash blue-cooler)))
+#+end_src
+
+The standard "alt-syntax" has red strings.  As such, it is interesting
+to experiment with faintly red colored comments:
+
+#+begin_src emacs-lisp
+;; Like the old "alt-syntax" but with faint red comments
+(setq modus-themes-common-palette-overrides
+      '((builtin magenta)
+        (comment red-faint)
+        (constant magenta-cooler)
+        (docstring magenta-faint)
+        (docmarkup green-faint)
+        (fnname magenta-warmer)
+        (keyword cyan)
+        (preprocessor cyan-cooler)
+        (string red-cooler)
+        (type magenta-cooler)
+        (variable blue-warmer)
+        (rx-construct magenta-warmer)
+        (rx-backslash blue-cooler)))
+#+end_src
+
+The user can always mix and match styles to their liking.
+
+[[#h:943063da-7b27-4ba4-9afe-f8fe77652fd1][Make use of alternative styles for 
code syntax]].
+
+**** Make use of alternative styles for code syntax
+:PROPERTIES:
+:CUSTOM_ID: h:943063da-7b27-4ba4-9afe-f8fe77652fd1
+:END:
 
-- ~bold-all~ to render all date headings in a bold weight;
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).  The
+idea here is to change how named colors are mapped to code syntax.
+Each of the following snippets give the ~modus-themes~ a different
+feel while editing code.
+
+Note that my ~modus-themes~ and ~ef-themes~ do not use the same
+palettes, so some things are different.  If you copy from the latter
+to the former, double-check that the entries exist in the given Modus
+theme palette.
+
+[[#h:26f53daa-0065-48dc-88ab-6a718d16cd95][Make comments yellow and strings 
green]].
+
+[[*Make code syntax use the old alt-syntax style][Make code syntax use the old 
alt-syntax style]].
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; Mimic `ef-night' theme (from my `ef-themes') for code syntax
+;; highlighting, while still using the Modus colors (and other
+;; mappings).
+(setq modus-themes-common-palette-overrides
+      '((builtin green-cooler)
+        (comment yellow-faint)
+        (constant magenta-cooler)
+        (fnname cyan-cooler)
+        (keyword blue-warmer)
+        (preprocessor red-warmer)
+        (docstring cyan-faint)
+        (string blue-cooler)
+        (type magenta-cooler)
+        (variable cyan)))
+
+;; Mimic `ef-summer' theme (from my `ef-themes') for code syntax
+;; highlighting, while still using the Modus colors (and other
+;; mappings).
+(setq modus-themes-common-palette-overrides
+      '((builtin magenta)
+        (comment yellow-faint)
+        (constant red-cooler)
+        (fnname magenta-warmer)
+        (keyword magenta-cooler)
+        (preprocessor green-warmer)
+        (docstring cyan-faint)
+        (string yellow-warmer)
+        (type cyan-warmer)
+        (variable blue-warmer)))
+
+;; Mimic `ef-bio' theme (from my `ef-themes') for code syntax
+;; highlighting, while still using the Modus colors (and other
+;; mappings).
+(setq modus-themes-common-palette-overrides
+      '((builtin green)
+        (comment yellow-faint)
+        (constant blue)
+        (fnname green-warmer)
+        (keyword green-cooler)
+        (preprocessor green)
+        (docstring green-faint)
+        (string magenta-cooler)
+        (type cyan-warmer)
+        (variable blue-warmer)))
+
+;; Mimic `ef-trio-light' theme (from my `ef-themes') for code syntax
+;; highlighting, while still using the Modus colors (and other
+;; mappings).
+(setq modus-themes-common-palette-overrides
+      '((builtin magenta-cooler)
+        (comment yellow-faint)
+        (constant magenta-warmer)
+        (fnname blue-warmer)
+        (keyword magenta)
+        (preprocessor red-cooler)
+        (docstring magenta-faint)
+        (string green-cooler)
+        (type cyan-cooler)
+        (variable cyan-warmer)))
+#+end_src
+
+**** Make matching parenthesis more or less intense
+:PROPERTIES:
+:CUSTOM_ID: h:259cf8f5-48ec-4b13-8a69-5d6387094468
+:END:
 
-- ~underline-today~ applies an underline to the current date while
-  removing the background it has by default;
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).  In
+this code block we show how to change the background of matching
+delimiters when ~show-paren-mode~ is enabled.  We also demonstrate how
+to enable underlines for those highlights.
 
-- A number as a floating point (e.g. 1.2) to set the height of the text
-  to that many times the default font height.  The default is the same
-  as the base font height (the equivalent of 1.0).  Instead of a
-  floating point, an acceptable value can be in the form of a cons cell
-  like =(height . FLOAT)= or =(height FLOAT)=, where FLOAT is the given
-  number.
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
 
-For example:
+;; Change the background to a shade of magenta
+(setq modus-themes-common-palette-overrides
+      '((bg-paren-match bg-magenta-intense)))
 
-#+begin_src emacs-lisp
-(header-date . nil)
-(header-date . (workaholic))
-(header-date . (grayscale bold-all))
-(header-date . (grayscale workaholic))
-(header-date . (grayscale workaholic bold-today))
-(header-date . (grayscale workaholic bold-today scale-heading))
+;; Enable underlines by applying a color to them
+(setq modus-themes-common-palette-overrides
+      '((bg-paren-match bg-magenta-intense)
+        (underline-paren-match fg-main)))
 #+end_src
 
-An ~event~ key covers (i) headings with a plain time stamp that are
-shown on the agenda, also known as events, (ii) entries imported from
-the diary, and (iii) other items that derive from a symbolic expression
-or sexp (phases of the moon, holidays, etc.).  By default all those look
-the same and have a subtle foreground color (the default is a ~nil~ value
-or an empty list).  This key accepts a list of properties.  Those are:
-
-- ~accented~ applies an accent value to the event's foreground,
-  replacing the original gray.  It makes all entries stand out more.
-- ~italic~ adds a slant to the font's forms (italic or oblique forms,
-  depending on the typeface).
-- ~varied~ differentiates between events with a plain time stamp and
-  entries that are generated from either the diary or a symbolic
-  expression.  It generally puts more emphasis on events.  When ~varied~
-  is combined with ~accented~, it makes only events use an accent color,
-  while diary/sexp entries retain their original subtle foreground.
-  When ~varied~ is used in tandem with ~italic~, it applies a slant only
-  to diary and sexp entries, not events.  And when ~varied~ is the sole
-  property passed to the ~event~ key, it has the same meaning as the
-  list (italic varied).  The combination of ~varied~, ~accented~,
-  ~italic~ covers all of the aforementioned cases.
+**** Make box buttons more or less gray
+:PROPERTIES:
+:CUSTOM_ID: h:4f6b6ca3-f5bb-4830-8312-baa232305360
+:END:
 
-For example:
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).  By
+default, the boxed buttons that appear in {{{kbd(M-x customize)}}} and
+related are distinct shades of gray.  The following set of overrides
+removes the gray from the active buttons and amplifies it for the
+inactive ones.
 
 #+begin_src emacs-lisp
-(event . nil)
-(event . (italic))
-(event . (accented italic))
-(event . (accented italic varied))
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+(setq modus-themes-common-palette-overrides
+      '((bg-button-active bg-main)
+        (fg-button-active fg-main)
+        (bg-button-inactive bg-inactive)
+        (fg-button-inactive "gray50")))
 #+end_src
 
-A ~scheduled~ key applies to tasks with a scheduled date.  By default (a
-~nil~ value), those use varying shades of yellow to denote (i) a past or
-current date and (ii) a future date.  Valid values are symbols:
+**** Make TODO and DONE more or less intense
+:PROPERTIES:
+:CUSTOM_ID: h:b57bb50b-a863-4ea8-bb38-6de2275fa868
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).
+Here we show how to affect just the =TODO= and =DONE= keywords that we
+encounter in Org buffers.  The idea is to make those pop out more or
+to subdue them.
 
-- ~nil~ (default);
-- ~uniform~ to make all scheduled dates the same color;
-- ~rainbow~ to use contrasting colors for past, present, future
-  scheduled dates.
+[[#h:11297984-85ea-4678-abe9-a73aeab4676a][Make headings more or less 
colorful]].
 
-For example:
+[[#h:bb5b396f-5532-4d52-ab13-149ca24854f1][Make inline code in prose use 
alternative styles]].
 
 #+begin_src emacs-lisp
-(scheduled . nil)
-(scheduled . uniform)
-(scheduled . rainbow)
-#+end_src
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
 
-A ~habit~ key applies to the ~org-habit~ graph.  All possible value are
-passed as a symbol.  Those are:
-
-- The default (~nil~) is meant to conform with the original aesthetic of
-  ~org-habit~.  It employs all four color codes that correspond to the
-  org-habit states---clear, ready, alert, and overdue---while
-  distinguishing between their present and future variants.  This
-  results in a total of eight colors in use: red, yellow, green, blue,
-  in tinted and shaded versions.  They cover the full set of information
-  provided by the ~org-habit~ consistency graph.
-- ~simplified~ is like the default except that it removes the dichotomy
-  between current and future variants by applying uniform color-coded
-  values.  It applies a total of four colors: red, yellow, green, blue.
-  They produce a simplified consistency graph that is more legible (or
-  less busy) than the default.  The intent is to shift focus towards the
-  distinction between the four states of a habit task, rather than each
-  state's present/future outlook.
-- ~traffic-light~ further reduces the available colors to red, yellow, and
-  green.  As in ~simplified~, present and future variants appear
-  uniformly, but differently from it, the ~clear~ state is rendered in a
-  green hue, instead of the original blue.  This is meant to capture the
-  use-case where a habit task being too early is less important than it
-  being too late.  The difference between ready and clear states is
-  attenuated by painting both of them using shades of green.  This
-  option thus highlights the alert and overdue states.
-- When ~modus-themes-deuteranopia~ is non-~nil~ the exact style of the habit
-  graph adapts to the needs of users with red-green color deficiency by
-  substituting every instance of green with blue or cyan (depending on
-  the specifics).
-
-[[#h:3ed03a48-20d8-4ce7-b214-0eb7e4c79abe][Option for red-green color 
deficiency or deuteranopia]].
+;; Increase intensity
+(setq modus-themes-common-palette-overrides
+      '((prose-done green-intense)
+        (prose-todo red-intense)))
 
-For example:
+;; Tone down intensity
+(setq modus-themes-common-palette-overrides
+      '((prose-done green-faint)   ; OR replace `green-faint' with `olive'
+        (prose-todo red-faint)))   ; OR replace `red-faint' with `rust'
 
-#+begin_src emacs-lisp
-(habit . nil)
-(habit . simplified)
-(habit . traffic-light)
+;; Keep TODO at its default (so no override for it), but make DONE
+;; gray.
+(setq modus-themes-common-palette-overrides
+      '((prose-done fg-dim)))
 #+end_src
 
-Putting it all together, the alist can look like this:
-
-#+begin_src emacs-lisp
-'((header-block . (1.5 variable-pitch))
-  (header-date . (grayscale workaholic bold-today))
-  (event . (accented varied))
-  (scheduled . uniform)
-  (habit . traffic-light))
-
-;; Or else:
-(setq modus-themes-org-agenda
-      '((header-block . (1.5 variable-pitch))
-        (header-date . (grayscale workaholic bold-today))
-        (event . (accented varied))
-        (scheduled . uniform)
-        (habit . traffic-light)))
-#+end_src
+**** Make headings more or less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:11297984-85ea-4678-abe9-a73aeab4676a
+:END:
 
-** Option for the headings' overall style
-:properties:
-:alt_title: Heading styles
-:description: Choose among several styles, also per heading level
-:custom_id: h:271eff19-97aa-4090-9415-a6463c2f9ae1
-:end:
-#+vindex: modus-themes-headings
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).
+Here we show how to alter the looks of headings, such as in Org mode.
+Using overrides here offers far more flexibility than what we could
+achieve with previous versions of the themes: the user can mix and
+match styles at will.
+
+[[#h:b57bb50b-a863-4ea8-bb38-6de2275fa868][Make TODO and DONE more intense]].
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; Apply more colorful foreground to some headings (headings 0-8).
+;; Level 0 is for Org #+title and related.
+(setq modus-themes-common-palette-overrides
+      '((fg-heading-1 blue-warmer)
+        (fg-heading-2 yellow-cooler)
+        (fg-heading-3 cyan-cooler)))
+
+;; Like the above, but with gradient colors
+(setq modus-themes-common-palette-overrides
+      '((fg-heading-1 blue)
+        (fg-heading-2 cyan)
+        (fg-heading-3 green)))
+
+;; Add color to level 1 heading, but use the main foreground for
+;; others
+(setq modus-themes-common-palette-overrides
+      '((fg-heading-1 blue)
+        (fg-heading-2 fg-main)
+        (fg-heading-3 fg-main)))
+
+;; Apply colorful foreground, background, and overline (headings 0-8)
+(setq modus-themes-common-palette-overrides
+      '((fg-heading-1 blue-warmer)
+        (bg-heading-1 bg-blue-nuanced)
+        (overline-heading-1 blue)))
+
+;; Apply gray scale foreground, background, and overline (headings 0-8)
+(setq modus-themes-common-palette-overrides
+      '((fg-heading-1 fg-main)
+        (bg-heading-1 bg-dim)
+        (overline-heading-1 border)))
+#+end_src
+
+**** Make Org agenda more or less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:a5af0452-a50f-481d-bf60-d8143f98105f
+:END:
 
-Brief: Heading styles with optional list of values for levels 0-8.
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).
+Here we provide three distinct code blocks.  The first adds
+alternative and more varied colors to the Org agenda (and related).
+The second uses faint coloration.  The third makes the agenda use
+various shades of blue.  Mix and match at will, while also combining
+these styles with what we show in the other chapters with practical
+stylistic variants.
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+;; Make the Org agenda use alternative and varied colors.
+(setq modus-themes-common-palette-overrides
+      '((date-common cyan)   ; default value (for timestamps and more)
+        (date-deadline red-warmer)
+        (date-event magenta-warmer)
+        (date-holiday blue) ; for M-x calendar
+        (date-now yellow-warmer)
+        (date-scheduled magenta-cooler)
+        (date-weekday cyan-cooler)
+        (date-weekend blue-faint)))
+#+end_src
+
+An example with faint coloration:
+
+#+begin_src emacs-lisp
+;; Make the Org agenda use faint colors.
+(setq modus-themes-common-palette-overrides
+      '((date-common cyan-faint) ; for timestamps and more
+        (date-deadline red-faint)
+        (date-event fg-alt) ; default
+        (date-holiday magenta) ; default (for M-x calendar)
+        (date-now fg-main) ; default
+        (date-scheduled yellow-faint)
+        (date-weekday fg-dim)
+        (date-weekend fg-dim)))
+#+end_src
+
+A third example that makes the agenda more blue:
+
+#+begin_src emacs-lisp
+;; Make the Org agenda use more blue instead of yellow and red.
+(setq modus-themes-common-palette-overrides
+      '((date-common cyan) ; default value (for timestamps and more)
+        (date-deadline blue-cooler)
+        (date-event blue-faint)
+        (date-holiday blue) ; for M-x calendar
+        (date-now blue-faint)
+        (date-scheduled blue)
+        (date-weekday fg-main)
+        (date-weekend fg-dim)))
+#+end_src
+
+**** Make inline code in prose use alternative styles
+:PROPERTIES:
+:CUSTOM_ID: h:bb5b396f-5532-4d52-ab13-149ca24854f1
+:END:
 
-Symbol: ~modus-themes-headings~ (=alist= type, multiple properties)
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).  In
+the following code block we show how to affect constructs such as
+Org's verbatim, code, and macro entries.  We also provide mappings for
+tables, property drawers, tags, and code block delimiters, though we
+do not show every possible permutation.
+
+[[#h:b57bb50b-a863-4ea8-bb38-6de2275fa868][Make TODO and DONE more or less 
intense]].
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; These are all the mappings at their default values for didactic
+;; purposes
+(setq modus-themes-common-palette-overrides
+      '((prose-block fg-dim)
+        (prose-code green-cooler)
+        (prose-done green)
+        (prose-macro magenta-cooler)
+        (prose-metadata fg-dim)
+        (prose-metadata-value fg-alt)
+        (prose-table fg-alt)
+        (prose-tag magenta-faint)
+        (prose-todo red)
+        (prose-verbatim magenta-warmer)))
+
+;; Make code block delimiters use a shade of red, tone down
+;; =verbatim=, ~code~, and {{{macro}}}, and amplify the style of
+;; property drawers
+(setq modus-themes-common-palette-overrides
+      '((prose-block red-faint)
+        (prose-code fg-dim)
+        (prose-macro magenta-faint)
+        (prose-metadata cyan)
+        (prose-metadata-value green-warmer)
+        (prose-verbatim fg-dim)))
+
+;; Like the above but with more color variety for the inline code
+;; elements
+(setq modus-themes-common-palette-overrides
+      '((prose-block red-faint)
+        (prose-code blue-cooler)
+        (prose-macro yellow-warmer)
+        (prose-metadata cyan)
+        (prose-metadata-value green-warmer)
+        (prose-verbatim red-warmer)))
+#+end_src
+
+**** Make mail citations and headers more or less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:7da7a4ad-5d3a-4f11-9796-5a1abed0f0c4
+:END:
 
-This is an alist that accepts a =(key . list-of-values)= combination.
-The key is either a number, representing the heading's level (0-8) or t,
-which pertains to the fallback style.
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).  In
+this section we show how to change the coloration of email message
+headers and citations.  Before we show the code, this is the anatomy
+of a message:
+
+#+begin_example message
+From: Protesilaos <info@protesilaos.com>
+To: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+Subject: Test subject
+--- Headers above this line; message and citations below ---
+This is some sample text
+
+> > Older quote
+> Newer quote
+#+end_example
 
-Level 0 is a special heading: it is used for what counts as a document
-title or equivalent, such as the =#+title= construct we find in Org
-files.  Levels 1-8 are regular headings.
+We thus have the following:
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; Reduce the intensity of mail citations and headers
+(setq modus-themes-common-palette-overrides
+      '((mail-cite-0 cyan-faint)
+        (mail-cite-1 yellow-faint)
+        (mail-cite-2 green-faint)
+        (mail-cite-3 red-faint)
+        (mail-part olive)
+        (mail-recipient indigo)
+        (mail-subject maroon)
+        (mail-other slate)))
+
+;; Make mail citations more intense; adjust the headers accordingly
+(setq modus-themes-common-palette-overrides
+      '((mail-cite-0 blue)
+        (mail-cite-1 yellow)
+        (mail-cite-2 green)
+        (mail-cite-3 magenta)
+        (mail-part magenta-cooler)
+        (mail-recipient cyan)
+        (mail-subject red-warmer)
+        (mail-other cyan-cooler)))
+
+;; Make all citations faint and neutral; make most headers green but
+;; use red for the subject lie so that it stands out
+(setq modus-themes-common-palette-overrides
+      '((mail-cite-0 fg-dim)
+        (mail-cite-1 fg-alt)
+        (mail-cite-2 fg-dim)
+        (mail-cite-3 fg-alt)
+        (mail-part yellow-cooler)
+        (mail-recipient green-cooler)
+        (mail-subject red-cooler)
+        (mail-other green)))
+#+end_src
+
+**** Make the region preserve text colors, plus other styles
+:PROPERTIES:
+:CUSTOM_ID: h:c8605d37-66e1-42aa-986e-d7514c3af6fe
+:END:
 
-The list of values covers symbols that refer to properties, as described
-below.  Here is a complete sample, followed by a presentation of all
-available properties:
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).
+Here we show how to make the region respect the underlying text colors
+or how to make the background more/less intense while combining it
+with an appropriate foreground value.
 
 #+begin_src emacs-lisp
-(setq modus-themes-headings
-      '((1 . (background overline variable-pitch 1.5))
-        (2 . (overline rainbow 1.3))
-        (3 . (overline 1.1))
-        (t . (monochrome))))
-#+end_src
-
-Properties:
-
-+ ~rainbow~
-+ ~overline~
-+ ~background~
-+ ~monochrome~
-+ A font weight, which must be supported by the underlying typeface:
-  - ~thin~
-  - ~ultralight~
-  - ~extralight~
-  - ~light~
-  - ~semilight~
-  - ~regular~
-  - ~medium~
-  - ~semibold~
-  - ~bold~
-  - ~heavy~
-  - ~extrabold~
-  - ~ultrabold~
-+ ~no-bold~ (deprecated alias of a ~regular~ weight)
-+ A floating point as a height multiple of the default or a cons cell in
-  the form of =(height . FLOAT)=.
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
 
-By default (a ~nil~ value for this variable), all headings have a bold
-typographic weight and use a desaturated text color.
 
-A ~rainbow~ property makes the text color more saturated.
+;; A background with no specific foreground (use foreground of
+;; underlying text)
+(setq modus-themes-common-palette-overrides
+      '((bg-region bg-ochre) ; try to replace `bg-ochre' with `bg-lavender', 
`bg-sage'
+        (fg-region unspecified)))
 
-An ~overline~ property draws a line above the area of the heading.
+;; Subtle gray with a prominent blue foreground
+(setq modus-themes-common-palette-overrides
+      '((bg-region bg-dim)
+        (fg-region blue-cooler)))
 
-A ~background~ property adds a subtle tinted color to the background of
-the heading.
+;; Intense magenta background combined with the main foreground
+(setq modus-themes-common-palette-overrides
+      '((bg-region bg-magenta-intense)
+        (fg-region fg-main)))
+#+end_src
 
-A ~monochrome~ property makes the heading the same as the base color,
-which is that of the ~default~ face's foreground.  When ~background~ is also
-set, ~monochrome~ changes its color to gray.  If both ~monochrome~ and
-~rainbow~ are set, the former takes precedence.
+**** Make mouse highlights more or less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:b5cab69d-d7cb-451c-8ff9-1f545ceb6caf
+:END:
 
-A ~variable-pitch~ property changes the font family of the heading to that
-of the ~variable-pitch~ face (normally a proportionately spaced typeface).
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).  In
+the following code block we show how to affect the semantic color
+mapping that covers mouse hover effects and related highlights:
 
-The symbol of a weight attribute adjusts the font of the heading
-accordingly, such as ~light~, ~semibold~, etc.  Valid symbols are
-defined in the variable ~modus-themes-weights~.  The absence of a weight
-means that bold will be used by virtue of inheriting the ~bold~ face.
-For backward compatibility, the ~no-bold~ value is accepted, though
-users are encouraged to specify a ~regular~ weight instead.
-
-[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
 
-A number, expressed as a floating point (e.g. 1.5), adjusts the height
-of the heading to that many times the base font size.  The default
-height is the same as 1.0, though it need not be explicitly stated.
-Instead of a floating point, an acceptable value can be in the form of a
-cons cell like =(height . FLOAT)= or =(height FLOAT)=, where FLOAT is
-the given number.
 
-Combinations of any of those properties are expressed as a list, like in
-these examples:
+;; Make the background an intense yellow
+(setq modus-themes-common-palette-overrides
+      '((bg-hover bg-yellow-intense)))
 
-#+begin_src emacs-lisp
-(semibold)
-(rainbow background)
-(overline monochrome semibold 1.3)
-(overline monochrome semibold (height 1.3)) ; same as above
-(overline monochrome semibold (height . 1.3)) ; same as above
+;; Make the background subtle green
+(setq modus-themes-common-palette-overrides
+      '((bg-hover bg-green-subtle)))
 #+end_src
 
-The order in which the properties are set is not significant.
+**** Make language underlines less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:03dbd5af-6bae-475e-85a2-cec189f69598
+:END:
 
-In user configuration files the form may look like this:
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).
+Here we show how to affect the color of the underlines that are used
+by code linters and prose spell checkers.
 
 #+begin_src emacs-lisp
-(setq modus-themes-headings
-      '((1 . (background overline rainbow 1.5))
-        (2 . (background overline 1.3))
-        (t . (overline semibold))))
-#+end_src
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
 
-When defining the styles per heading level, it is possible to pass a
-non-~nil~ value (~t~) instead of a list of properties.  This will retain the
-original aesthetic for that level.  For example:
 
-#+begin_src emacs-lisp
-(setq modus-themes-headings
-      '((1 . t)           ; keep the default style
-        (2 . (background overline))
-        (t . (rainbow)))) ; style for all other headings
+;; Make the underlines less intense
+(setq modus-themes-common-palette-overrides
+      '((underline-err red-faint)
+        (underline-warning yellow-faint)
+        (underline-note cyan-faint)))
 
-(setq modus-themes-headings
-      '((1 . (background overline))
-        (2 . (rainbow semibold))
-        (t . t))) ; default style for all other levels
+;; Change the color-coding of the underlines
+(setq modus-themes-common-palette-overrides
+      '((underline-err yellow-intense)
+        (underline-warning magenta-intense)
+        (underline-note green-intense)))
 #+end_src
 
-For Org users, the extent of the heading depends on the variable
-~org-fontify-whole-heading-line~.  This affects the ~overline~ and
-~background~ properties.  Depending on the version of Org, there may be
-others, such as ~org-fontify-done-headline~.
-
-** Option for variable-pitch font in UI elements
-:properties:
-:alt_title: UI typeface
-:description: Toggle the use of variable-pitch across the User Interface
-:custom_id: h:16cf666c-5e65-424c-a855-7ea8a4a1fcac
-:end:
-#+vindex: modus-themes-variable-pitch-ui
-
-Brief: Toggle the use of proportionately spaced (~variable-pitch~) fonts
-in the User Interface.
-
-Symbol: ~modus-themes-variable-pitch-ui~ (=boolean= type)
+**** Make line numbers use alternative styles
+:PROPERTIES:
+:CUSTOM_ID: h:b6466f51-cb58-4007-9ebe-53a27af655c7
+:END:
 
-Possible values:
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic 
variants using palette overrides]]).  In
+this section we show how to affect the ~display-line-numbers-mode~.
 
-1. ~nil~ (default)
-2. ~t~
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes.  We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like.  The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
 
-This option concerns User Interface elements that are under the direct
-control of Emacs.  In particular: the mode line, header line, tab bar,
-and tab line.
 
-The default is to use the same font as the rest of Emacs, which usually
-is a monospaced family.
+;; Make line numbers less intense
+(setq modus-themes-common-palette-overrides
+      '((fg-line-number-inactive "gray50")
+        (fg-line-number-active fg-main)
+        (bg-line-number-inactive unspecified)
+        (bg-line-number-active unspecified)))
 
-With a non-~nil~ value (~t~) apply a proportionately spaced typeface.  This
-is done by assigning the ~variable-pitch~ face to the relevant items.
+;; Like the above, but use a shade of red for the current line number
+(setq modus-themes-common-palette-overrides
+      '((fg-line-number-inactive "gray50")
+        (fg-line-number-active red-cooler)
+        (bg-line-number-inactive unspecified)
+        (bg-line-number-active unspecified)))
 
-[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and 
others]].
+;; Make all numbers more intense, use a more pronounce gray
+;; background, and make the current line have a colored background
+(setq modus-themes-common-palette-overrides
+      '((fg-line-number-inactive fg-main)
+        (fg-line-number-active fg-main)
+        (bg-line-number-inactive bg-inactive)
+        (bg-line-number-active bg-cyan-intense)))
+#+end_src
 
 * Advanced customization
 :properties:
@@ -2220,7 +2193,7 @@ the background).  It thus falls back to the closest 
approximation, which
 seldom is appropriate for the purposes of the Modus themes.
 
 In such a case, the user is expected to update their terminal's color
-palette such as by adapting these resources:
+palette such as by adapting these resources 
([[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Preview theme colors]]):
 
 #+begin_src emacs-lisp
 ! Theme: modus-operandi
@@ -2268,27 +2241,43 @@ xterm*color14:    #6ae4b9
 xterm*color15:    #ffffff
 #+end_src
 
-** Visualize the active Modus theme's palette
+** Preview theme colors
 :properties:
 :custom_id: h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d
 :end:
+#+cindex: Preview named colors or semantic color mappings
+
 #+findex: modus-themes-list-colors
 #+findex: modus-themes-list-colors-current
-#+cindex: Preview color values
-
 The command ~modus-themes-list-colors~ prompts for a choice between
-=modus-operandi= and =modus-vivendi= to produce a help buffer that shows a
-preview of each variable in the given theme's color palette.  The
+=modus-operandi= and =modus-vivendi= to produce a help buffer that
+shows a preview of the named colors in the given theme's palette.  The
 command ~modus-themes-list-colors-current~ skips the prompt, using the
 current Modus theme.
 
+When called with a prefix argument (=C-u= with the default key
+bindings), these commands will show a preview of the palette's
+semantic color mappings instead of the named colors.
+
+In this context, "named colors" are entries that associate a symbol to
+a string color value, such as =(blue-warmer "#354fcf")=.  Whereas
+"semantic color mappings" associate a named color to a symbol, like
+=(string blue-warmer)=, thus making the theme render all string
+constructs in the =blue-warmer= color value 
([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]).
+
+#+findex: modus-themes-preview-colors
+#+findex: modus-themes-preview-colors-current
+Aliases for those commands are ~modus-themes-preview-colors~ and
+~modus-themes-preview-colors-current~.
+
 Each row shows a foreground and background coloration using the
 underlying value it references.  For example a line with =#a60000= (a
 shade of red) will show red text followed by a stripe with that same
 color as a backdrop.
 
-The name of the buffer describes the given Modus theme.  It is thus
-called =*modus-operandi-list-colors*= or =*modus-vivendi-list-colors*=.
+The name of the buffer describes the given Modus theme and what the
+contents are, such as =*modus-operandi-list-colors*= for named colors
+and ==*modus-operandi-list-mappings*= for the semantic color mappings.
 
 ** Per-theme customization settings
 :properties:
@@ -2306,12 +2295,12 @@ other).
 (defun my-demo-modus-operandi ()
   (interactive)
   (setq modus-themes-bold-constructs t) ; ENABLE bold
-  (modus-themes-load-operandi))
+  (modus-themes-load-theme 'modus-operandi))
 
 (defun my-demo-modus-vivendi ()
   (interactive)
   (setq modus-themes-bold-constructs nil) ; DISABLE bold
-  (modus-themes-load-vivendi))
+  (modus-themes-load-theme 'modus-vivendi))
 
 (defun my-demo-modus-themes-toggle ()
   (if (eq (car custom-enabled-themes) 'modus-operandi)
@@ -2325,232 +2314,104 @@ equivalent the themes provide.
 For a more elaborate design, it is better to inspect the source code of
 ~modus-themes-toggle~ and relevant functions.
 
-** Case-by-case face specs using the themes' palette
-:properties:
-:custom_id: h:1487c631-f4fe-490d-8d58-d72ffa3bd474
-:end:
-#+findex: modus-themes-color
-#+findex: modus-themes-color-alts
-#+cindex: Extracting individual colors
-
-This section is about tweaking individual faces.  If you plan to do
-things at scale, consult the next section: 
[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Set multiple faces]].
-
-We already covered in previous sections how to toggle between the themes
-and how to configure options prior to loading.  We also explained that
-some of the functions made available to users will fire up a hook that
-can be used to pass tweaks in the post-theme-load phase.
-
-Now assume you wish to change a single face, say, the ~cursor~.  And you
-would like to get the standard "blue" color value of the active Modus
-theme, whether it is Modus Operandi or Modus Vivendi.  To do that, you
-can use the ~modus-themes-color~ function.  It accepts a symbol that is
-associated with a color in ~modus-themes-operandi-colors~ and
-~modus-themes-vivendi-colors~.  Like this:
-
-#+begin_src emacs-lisp
-(modus-themes-color 'blue)
-#+end_src
-
-The function always extracts the color value of the active Modus theme.
-
-#+begin_src emacs-lisp
-(progn
-  (load-theme 'modus-operandi t)
-  (modus-themes-color 'blue))           ; "#0031a9" for `modus-operandi'
-
-(progn
-  (load-theme 'modus-vivendi t)
-  (modus-themes-color 'blue))           ; "#2fafff" for `modus-vivendi'
-#+end_src
-
-Do {{{kbd(C-h v)}}} on the aforementioned variables to check all the available
-symbols that can be passed to this function.  Or simply invoke the
-command ~modus-themes-list-colors~ to produce a buffer with a preview of
-each entry in the palette.
-
-[[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Visualize the active Modus theme's 
palette]].
-
-With that granted, let us expand the example to actually change the
-~cursor~ face's background property.  We employ the built-in function of
-~set-face-attribute~:
-
-#+begin_src emacs-lisp
-(set-face-attribute 'cursor nil :background (modus-themes-color 'blue))
-#+end_src
-
-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~
-attribute you had assigned to that face.
-
-For such changes to persist, we need to make them after loading the
-theme.  So we rely on ~modus-themes-after-load-theme-hook~, which gets
-called from ~modus-themes-load-operandi~, ~modus-themes-load-vivendi~, as
-well as the command ~modus-themes-toggle~.  Here is a sample function that
-tweaks two faces and then gets added to the hook:
-
-#+begin_src emacs-lisp
-(defun my-modus-themes-custom-faces ()
-  (set-face-attribute 'cursor nil :background (modus-themes-color 'blue))
-  (set-face-attribute 'font-lock-type-face nil :foreground (modus-themes-color 
'magenta-alt)))
-
-(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
-#+end_src
-
-[[#h:86f6906b-f090-46cc-9816-1fe8aeb38776][A theme-agnostic hook for theme 
loading]].
-
-Using this principle, it is possible to override the styles of faces
-without having to find color values for each case.
-
-Another application is to control the precise weight for bold
-constructs.  This is particularly useful if your typeface has several
-variants such as "heavy", "extrabold", "semibold".  All you have to do
-is edit the ~bold~ face.  For example:
-
-#+begin_src emacs-lisp
-(set-face-attribute 'bold nil :weight 'semibold)
-#+end_src
-
-Remember to use the custom function and hook combo we demonstrated
-above.  Because the themes do not hard-wire a specific weight, this
-simple form is enough to change the weight of all bold constructs
-throughout the interface.
-
-Finally, there are cases where you want to tweak colors though wish to
-apply different ones to each theme, say, a blue hue for Modus Operandi
-and a shade of red for Modus Vivendi.  To this end, we provide
-~modus-themes-color-alts~ as a convenience function to save you from the
-trouble of writing separate wrappers for each theme.  It still returns a
-single value by querying either of ~modus-themes-operandi-colors~ and
-~modus-themes-vivendi-colors~, only here you pass the two keys you want,
-first for ~modus-operandi~ then ~modus-vivendi~.
-
-Take the previous example with the ~cursor~ face:
-
-#+begin_src emacs-lisp
-;; Blue for `modus-operandi' and red for `modus-vivendi'
-(set-face-attribute 'cursor nil :background (modus-themes-color-alts 'blue 
'red))
-#+end_src
-
-** Face specs at scale using the themes' palette
+** Use theme colors in code with modus-themes-with-colors
 :properties:
 :custom_id: h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae
 :end:
-#+findex: modus-themes-with-colors
-#+cindex: Extracting colors en masse
-
-The examples here are for large scale operations.  For simple, one-off
-tweaks, you may prefer the approach documented in the previous section
-([[#h:1487c631-f4fe-490d-8d58-d72ffa3bd474][Case-by-case face specs using the 
themes' palette]]).
+#+cindex: Use colors from the palette anywhere
 
-The ~modus-themes-with-colors~ macro lets you retrieve multiple color
-values by employing the backquote/backtick and comma notation.  The
-values are stored in the alists ~modus-themes-operandi-colors~ and
-~modus-themes-vivendi-colors~, while the macro always queries that of the
-active Modus theme (preview the current palette with the command
-~modus-themes-list-colors~).
-
-[[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Visualize the active Modus theme's 
palette]].
+Note that users most probably do not need the following.  Just rely on
+the comprehensive overrides we provide 
([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]).
 
-Here is an abstract example that just returns a list of color values
-while ~modus-operandi~ is enabled:
+#+findex: modus-themes-with-colors
+Advanced users may want to apply colors from the palette of the active
+Modus theme in their custom code.  The ~modus-themes-with-colors~
+macro supplies those to any form called inside of it.  For example:
 
 #+begin_src emacs-lisp
 (modus-themes-with-colors
-  (list fg-main
-        blue-faint
-        magenta
-        magenta-alt-other
-        cyan-alt-other
-        fg-special-cold
-        blue-alt
-        magenta-faint
-        cyan
-        fg-main
-        green-faint
-        red-alt-faint
-        blue-alt-faint
-        fg-special-warm
-        cyan-alt
-        blue))
-;; =>
-;; ("#000000" "#002f88" "#721045" "#5317ac"
-;;  "#005a5f" "#093060" "#2544bb" "#752f50"
-;;  "#00538b" "#000000" "#104410" "#702f00"
-;;  "#003f78" "#5d3026" "#30517f" "#0031a9")
+  (list blue-warmer magenta-cooler fg-added warning variable fg-heading-4))
+;; => ("#354fcf" "#531ab6" "#005000" "#884900" "#005e8b" "#721045")
 #+end_src
 
-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
-like ~modus-operandi~ and ~modus-vivendi~.
-
-This is how it works:
+The above return value is for ~modus-operandi~ when that is the active
+theme.  Switching to another theme and evaluating this code anew will
+give us the relevant results for that theme (remember that since
+version 4, the Modus themes consist of six items 
([[#h:f0f3dbcb-602d-40cf-b918-8f929c441baf][Overview]])).  The
+same with ~modus-vivendi~ as the active theme:
 
 #+begin_src emacs-lisp
 (modus-themes-with-colors
-  (custom-set-faces
-   `(cursor ((,class :background ,blue)))
-   `(mode-line ((,class :background ,yellow-nuanced-bg
-                        :foreground ,yellow-nuanced-fg)))
-   `(mode-line-inactive ((,class :background ,blue-nuanced-bg
-                                 :foreground ,blue-nuanced-fg)))))
+  (list blue-warmer magenta-cooler fg-added warning variable fg-heading-4))
+;; => ("#79a8ff" "#b6a0ff" "#a0e0a0" "#fec43f" "#00d3d0" "#feacd0")
 #+end_src
 
-The above snippet will immediately refashion the faces it names once it
-is evaluated.  However, if you switch between the Modus themes, say,
-from ~modus-operandi~ to ~modus-vivendi~, the colors will not get updated to
-match those of the new theme.  To make things work across the themes, we
-need to employ the same technique we discussed in the previous section,
-namely, to pass our changes at the post-theme-load phase via a hook.
+The ~modus-themes-with-colors~ has access to the whole palette of the
+active theme, meaning that it can instantiate both (i) named colors
+like =blue-warmer= and (ii) semantic color mappings like =warning=.
+We provide commands to inspect those 
([[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Preview theme colors]]).
+
+Others sections in this manual show how to use the aforementioned
+macro ([[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]]).
+
+** Add padding to mode line
+:PROPERTIES:
+:CUSTOM_ID: h:5a0c58cc-f97f-429c-be08-927b9fbb0a9c
+:END:
+
+Emacs faces do not have a concept of "padding" for the space between
+the text and its box boundaries.  We can approximate the effect by
+adding a =:box= attribute, making its border several pixels thick, and
+using the mode line's background color for it.  This way the thick
+border will not stand out and will appear as a continuation of the
+mode line.
 
-The themes provide the ~modus-themes-after-load-theme-hook~, which gets
-called from ~modus-themes-load-operandi~, ~modus-themes-load-vivendi~, as
-well as the command ~modus-themes-toggle~.  With this knowledge, you can
-wrap the macro in a function and then assign that function to the hook.
-Thus:
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with 
modus-themes-with-colors]].
 
 #+begin_src emacs-lisp
 (defun my-modus-themes-custom-faces ()
   (modus-themes-with-colors
     (custom-set-faces
-     `(cursor ((,class :background ,blue)))
-     `(mode-line ((,class :background ,yellow-nuanced-bg
-                          :foreground ,yellow-nuanced-fg)))
-     `(mode-line-inactive ((,class :background ,blue-nuanced-bg
-                                   :foreground ,blue-nuanced-fg))))))
+     ;; Add "padding" to the mode lines
+     `(mode-line ((,c :box (:line-width 10 :color ,bg-mode-line-active))))
+     `(mode-line-inactive ((,c :box (:line-width 10 :color 
,bg-mode-line-inactive)))))))
 
 (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
 #+end_src
 
-[[#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
-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).
+The above has the effect of removing the border around the mode lines.
+In older versions of the themes, we provided the option for a padded
+mode line which could also have borders around it.  Those were not
+real border, however, but an underline and an overline.  Adjusting the
+above:
 
-Also bear in mind that these examples are meant to work with the Modus
-themes.  If you are cycling between multiple themes you may encounter
-unforeseen issues, such as the colors of the Modus themes being applied
-to a non-Modus item.
+#+begin_src emacs-lisp
+(defun my-modus-themes-custom-faces ()
+  (modus-themes-with-colors
+    (custom-set-faces
+     ;; Add "padding" to the mode lines
+     `(mode-line ((,c :underline ,border-mode-line-active
+                      :overline ,border-mode-line-active
+                      :box (:line-width 10 :color ,bg-mode-line-active))))
+     `(mode-line-inactive ((,c :underline ,border-mode-line-inactive
+                               :overline ,border-mode-line-inactive
+                               :box (:line-width 10 :color 
,bg-mode-line-inactive)))))))
 
-Finally, note that you can still use other functions where those make
-sense.  For example, the ~modus-themes-color-alts~ that was discussed in
-the previous section.  Adapt the above example like this:
+;; ESSENTIAL to make the underline move to the bottom of the box:
+(setq x-underline-at-descent-line t)
 
-#+begin_src emacs-lisp
-...
-(modus-themes-with-colors
-  (custom-set-faces
-   `(cursor ((,class :background ,(modus-themes-color-alts 'blue 'green))))
-   ...))
+(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
 #+end_src
 
+The reason we no longer provide this option is because it depends on a
+non-nil value for ~x-underline-at-descent-line~.  That variable
+affects ALL underlines, including those of links.  The effect is
+intrusive and looks awkard in prose.
+
+As such, the Modus themes no longer provide that option but instead
+offer this piece of documentation to make the user fully aware of the
+state of affairs.
+
 ** Remap face with local value
 :properties:
 :custom_id: h:7a93cb6f-4eca-4d56-a85c-9dcd813d6b0f
@@ -2564,7 +2425,7 @@ 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]].
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with 
modus-themes-with-colors]].
 
 In this example we will write a simple interactive function that adjusts
 the background color of the ~region~ face.  This is the sample code:
@@ -2572,12 +2433,12 @@ 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)))
+    `((red . ,bg-red-subtle)
+      (green . ,bg-green-subtle)
+      (yellow . ,bg-yellow-subtle)
+      (blue . ,bg-blue-subtle)
+      (magenta . ,bg-magenta-subtle)
+      (cyan . ,bg-cyan-subtle)))
   "Sample list of color values for `my-rainbow-region'.")
 
 (defun my-rainbow-region (color)
@@ -2613,768 +2474,6 @@ Perhaps you may wish to generalize those findings in to 
a set of
 functions that also accept an arbitrary face.  We shall leave the
 experimentation up to you.
 
-** Cycle through arbitrary colors
-:properties:
-:custom_id: h:77dc4a30-b96a-4849-85a8-fee3c2995305
-:end:
-#+cindex: Cycle colors
-
-Users may opt to customize individual faces of the themes to accommodate
-their particular needs.  One such case is with the color intensity of
-comments, specifically the foreground of ~font-lock-comment-face~.  The
-Modus themes set that to a readable value, in accordance with their
-accessibility objective, though users may prefer to lower the overall
-contrast on an on-demand basis.
-
-One way to achieve this is to design a command that cycles through three
-distinct levels of intensity, though the following can be adapted to any
-kind of cyclic behavior, such as to switch between red, green, and blue.
-
-In the following example, we employ the ~modus-themes-color~ function
-which reads a symbol that represents an entry in the active theme's
-color palette ([[#h:1487c631-f4fe-490d-8d58-d72ffa3bd474][Case-by-case face 
specs using the themes' palette]]).
-Those are stored in ~my-modus-themes-comment-colors~.
-
-#+begin_src emacs-lisp
-(defvar my-modus-themes-comment-colors
-  ;; We are abusing the palette here, as those colors have their own
-  ;; purpose in the palette, so please ignore the semantics of their
-  ;; names.
-  '((low . bg-region)
-    (medium . bg-tab-inactive-alt)
-    (high . fg-alt))
-  "Alist of levels of intensity mapped to color palette entries.
-The entries are found in `modus-themes-operandi-colors' or
-`modus-themes-vivendi-colors'.")
-
-(defvar my-modus-themes--adjust-comment-color-state nil
-  "The cyclic state of `my-modus-themes-adjust-comment-color'.
-For internal use.")
-
-(defun my-modus-themes--comment-foreground (degree state)
-  "Set `font-lock-comment-face' foreground.
-Use `my-modus-themes-comment-colors' to extract the color value
-for each level of intensity.
-
-This is complementary to `my-modus-themes-adjust-comment-color'."
-  (let ((palette-colors my-modus-themes-comment-colors))
-    (set-face-foreground
-     'font-lock-comment-face
-     (modus-themes-color (alist-get degree palette-colors)))
-    (setq my-modus-themes--adjust-comment-color-state state)
-    (message "Comments are set to %s contrast" degree)))
-
-(defun my-modus-themes-adjust-comment-color ()
-  "Cycle through levels of intensity for comments.
-The levels are determined by `my-modus-themes-comment-colors'."
-  (interactive)
-  (pcase my-modus-themes--adjust-comment-color-state
-    ('nil
-     (my-modus-themes--comment-foreground 'low 1))
-    (1
-     (my-modus-themes--comment-foreground 'medium 2))
-    (_
-     (my-modus-themes--comment-foreground 'high nil))))
-#+end_src
-
-With the above, {{{kbd(M-x my-modus-themes-adjust-comment-color)}}} will cycle
-through the three levels of intensity that have been specified.
-
-Another approach is to not read from the active theme's color palette
-and instead provide explicit color values, either in hexadecimal RGB
-notation (like =#123456=) or as the names that are displayed in the output
-of {{{kbd(M-x list-colors-display)}}}.  In this case, the alist with the
-colors will have to account for the active theme, so as to set the
-appropriate colors.  While this introduces a bit more complexity, it
-ultimately offers greater flexibility on the choice of colors for such a
-niche functionality (so there is no need to abuse the palette of the
-active Modus theme):
-
-#+begin_src emacs-lisp
-(defvar my-modus-themes-comment-colors
-  '((light . ((low . "gray75")
-              (medium . "gray50")
-              (high . "#505050")))      ; the default for `modus-operandi'
-
-    (dark . ((low . "gray25")
-             (medium . "gray50")
-             (high . "#a8a8a8"))))      ; the default for `modus-vivendi'
-  "Alist of levels of intensity mapped to color values.
-For such colors, consult the command `list-colors-display'.  Pass
-the name of a color or its hex value.")
-
-(defvar my-modus-themes--adjust-comment-color-state nil
-  "The cyclic state of `my-modus-themes-adjust-comment-color'.
-For internal use.")
-
-(defun my-modus-themes--comment-foreground (degree state)
-    "Set `font-lock-comment-face' foreground.
-Use `my-modus-themes-comment-colors' to extract the color value
-for each level of intensity.
-
-This is complementary to `my-modus-themes-adjust-comment-color'."
-  (let* ((colors my-modus-themes-comment-colors)
-         (levels (pcase (car custom-enabled-themes)
-                   ('modus-operandi (alist-get 'light colors))
-                   ('modus-vivendi (alist-get 'dark colors)))))
-    (set-face-foreground
-     'font-lock-comment-face
-     (alist-get degree levels))
-    (setq my-modus-themes--adjust-comment-color-state state)
-    (message "Comments are set to %s contrast" degree)))
-
-(defun my-modus-themes-adjust-comment-color ()
-  "Cycle through levels of intensity for comments.
-The levels are determined by `my-modus-themes-comment-colors'."
-  (interactive)
-  (pcase my-modus-themes--adjust-comment-color-state
-    ('nil
-     (my-modus-themes--comment-foreground 'low 1))
-    (1
-     (my-modus-themes--comment-foreground 'medium 2))
-    (_
-     (my-modus-themes--comment-foreground 'high nil))))
-#+end_src
-
-The effect of the above configurations on ~font-lock-comment-face~ is
-global.  To make it buffer-local, one must tweak the code to employ the
-function ~face-remap-add-relative~ 
([[#h:7a93cb6f-4eca-4d56-a85c-9dcd813d6b0f][Remap face with local value]]).
-
-So this form in ~my-modus-themes--comment-foreground~:
-
-#+begin_src emacs-lisp
-;; example 1
-(...
- (set-face-foreground
-  'font-lock-comment-face
-  (modus-themes-color (alist-get degree palette-colors)))
- ...)
-
-;; example 2
-(...
- (set-face-foreground
-  'font-lock-comment-face
-  (alist-get degree levels))
- ...)
-#+end_src
-
-Must become this:
-
-#+begin_src emacs-lisp
-;; example 1
-(...
- (face-remap-add-relative
-  'font-lock-comment-face
-  `(:foreground ,(modus-themes-color (alist-get degree palette-colors))))
- ...)
-
-;; example 2
-(...
- (face-remap-add-relative
-  'font-lock-comment-face
-  `(:foreground ,(alist-get degree levels)))
- ...)
-#+end_src
-
-** Override colors
-:properties:
-:custom_id: h:307d95dd-8dbd-4ece-a543-10ae86f155a6
-:end:
-#+vindex: modus-themes-operandi-color-overrides
-#+vindex: modus-themes-vivendi-color-overrides
-#+cindex: Change a theme's colors
-
-The themes provide a mechanism for overriding their color values.  This
-is controlled by the variables ~modus-themes-operandi-color-overrides~ and
-~modus-themes-vivendi-color-overrides~, which are alists that should
-mirror a subset of the associations in ~modus-themes-operandi-colors~ and
-~modus-themes-vivendi-colors~ respectively.  As with all customizations,
-overriding must be done before loading the affected theme.
-
-[[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Visualize the active Modus theme's 
palette]].
-
-Let us approach the present topic one step at a time.  Here is a
-simplified excerpt of the default palette for Modus Operandi with some
-basic background values that apply to buffers and the mode line
-(remember to inspect the actual value to find out all the associations
-that can be overridden):
-
-#+begin_src emacs-lisp
-(defconst modus-themes-operandi-colors
-  '((bg-main . "#ffffff")
-    (bg-dim . "#f8f8f8")
-    (bg-alt . "#f0f0f0")
-    (bg-active . "#d7d7d7")
-    (bg-inactive . "#efefef")))
-#+end_src
-
-As one can tell, we bind a key to a hexadecimal RGB color value.  Now
-say we wish to override those specific values and have our changes
-propagate to all faces that use those keys.  We could write something
-like this, which adds a subtle ochre tint:
-
-#+begin_src emacs-lisp
-(setq modus-themes-operandi-color-overrides
-      '((bg-main . "#fefcf4")
-        (bg-dim . "#faf6ef")
-        (bg-alt . "#f7efe5")
-        (bg-active . "#e8dfd1")
-        (bg-inactive . "#f6ece5")))
-#+end_src
-
-Once this is evaluated, any subsequent loading of ~modus-operandi~ will
-use those values instead of the defaults.  No further intervention is
-required.
-
-To reset the changes, we apply this and reload the theme:
-
-#+begin_src emacs-lisp
-(setq modus-themes-operandi-color-overrides nil)
-#+end_src
-
-Users who wish to leverage such a mechanism can opt to implement it
-on-demand by means of a global minor mode.  The following snippet covers
-both themes and expands to some more associations in the palette:
-
-#+begin_src emacs-lisp
-(define-minor-mode my-modus-themes-tinted
-  "Tweak some Modus themes colors."
-  :init-value nil
-  :global t
-  (if my-modus-themes-tinted
-      (setq modus-themes-operandi-color-overrides
-            '((bg-main . "#fefcf4")
-              (bg-dim . "#faf6ef")
-              (bg-alt . "#f7efe5")
-              (bg-hl-line . "#f4f0e3")
-              (bg-active . "#e8dfd1")
-              (bg-inactive . "#f6ece5")
-              (bg-region . "#c6bab1")
-              (bg-header . "#ede3e0")
-              (bg-tab-active . "#fdf6eb")
-              (bg-tab-inactive . "#c8bab8"))
-            modus-themes-vivendi-color-overrides
-            '((bg-main . "#100b17")
-              (bg-dim . "#161129")
-              (bg-alt . "#181732")
-              (bg-hl-line . "#191628")
-              (bg-active . "#282e46")
-              (bg-inactive . "#1a1e39")
-              (bg-region . "#393a53")
-              (bg-header . "#202037")
-              (bg-tab-active . "#120f18")
-              (bg-tab-inactive . "#3a3a5a")))
-    (setq modus-themes-operandi-color-overrides nil
-          modus-themes-vivendi-color-overrides nil)))
-#+end_src
-
-A more neutral style for ~modus-themes-operandi-color-overrides~ can
-look like this:
-
-#+begin_src emacs-lisp
-'((bg-main . "#f7f7f7")
-  (bg-dim . "#f2f2f2")
-  (bg-alt . "#e8e8e8")
-  (bg-hl-line . "#eaeaef")
-  (bg-active . "#e0e0e0")
-  (bg-inactive . "#e6e6e6")
-  (bg-region . "#b5b5b5")
-  (bg-header . "#e4e4e4")
-  (bg-tab-active . "#f5f5f5")
-  (bg-tab-inactive . "#c0c0c0"))
-#+end_src
-
-With those in place, one can use {{{kbd(M-x my-modus-themes-tinted)}}}
-and then load the Modus theme of their choice.  The new palette subset
-will come into effect: subtle ochre tints (or shades of gray) for Modus
-Operandi and night sky blue shades for Modus Vivendi.  Switching between
-the two themes, such as with {{{kbd(M-x modus-themes-toggle)}}} will
-also use the overrides.
-
-Given that this is a user-level customization, 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).  Alternatively, this can also
-be done programmatically ([[#h:4589acdc-2505-41fc-9f5e-699cfc45ab00][Override 
color saturation]]).
-
-The above are expanded into a fully fledged derivative elsewhere in this
-document ([[#h:736c0ff5-8c9c-4565-82cf-989e57d07d4a][Override colors 
completely]]).
-
-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
-: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.
-
-The =my-modus-themes-saturate= function stores new color values in the
-variables ~modus-themes-operandi-color-overrides~ and
-~modus-themes-vivendi-color-overrides~, meaning that it undoes changes
-implemented by the user on individual colors.  To have both automatic
-saturation adjustment across the board and retain per-case edits to the
-palette, some tweaks to the above function are required.  For example:
-
-#+begin_src emacs-lisp
-(defvar my-modus-themes-vivendi-extra-color-overrides
-  '((fg-main . "#ead0c0")
-    (bg-main . "#050515"))
-  "My bespoke colors for `modus-vivendi'.")
-
-(defvar my-modus-themes-operandi-extra-color-overrides
-  '((fg-main . "#1a1a1a")
-    (bg-main . "#fefcf4"))
-  "My bespoke colors for `modus-operandi'.")
-
-(defun my-modus-themes-saturate (percent)
-  "Saturate current Modus theme palette overrides by PERCENT.
-Preserve the color values stored in
-`my-modus-themes-operandi-extra-color-overrides',
-`my-modus-themes-vivendi-extra-color-overrides'."
-  (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"))))
-         (extra-overrides (pcase theme
-                            ('modus-operandi 
my-modus-themes-operandi-extra-color-overrides)
-                            ('modus-vivendi 
my-modus-themes-vivendi-extra-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 (append extra-overrides colors)))
-    (pcase theme
-      ('modus-operandi (modus-themes-load-operandi))
-      ('modus-vivendi (modus-themes-load-vivendi)))))
-#+end_src
-
-To disable the effect, one must reset the aforementioned variables of
-the themes 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
-
-** Override colors through blending
-:properties:
-:custom_id: h:80c326bf-fe32-47b2-8c59-58022256fd6e
-:end:
-#+cindex: Change theme colors through blending
-
-This is yet another method of overriding color values.
-
-[[#h:307d95dd-8dbd-4ece-a543-10ae86f155a6][Override colors]].
-
-[[#h:4589acdc-2505-41fc-9f5e-699cfc45ab00][Override color saturation]].
-
-Building on ideas and concepts from the previous sections, this method
-blends the entire palette at once with the chosen colors.  The function
-~my-modus-themes-interpolate~ blends two colors, taking a value from the
-themes and mixing it with a user-defined color to arrive at a midpoint.
-This scales to all background and foreground colors with the help of the
-~my-modus-themes-tint-palette~ function.
-
-#+begin_src emacs-lisp
-(setq my-modus-operandi-bg-blend "#fbf1c7"
-      my-modus-operandi-fg-blend "#3a6084"
-      my-modus-vivendi-bg-blend "#3a4042"
-      my-modus-vivendi-fg-blend "#d7b765")
-
-;; Adapted from the `kurecolor-interpolate' function of kurecolor.el
-(defun my-modus-themes-interpolate (color1 color2)
-  (cl-destructuring-bind (r g b)
-      (mapcar #'(lambda (n) (* (/ n 2) 255.0))
-              (cl-mapcar '+ (color-name-to-rgb color1) (color-name-to-rgb 
color2)))
-    (format "#%02X%02X%02X" r g b)))
-
-(defun my-modus-themes-tint-palette (palette bg-blend fg-blend)
-  "Modify Modus PALETTE programmatically and return a new palette.
-Blend background colors with BG-BLEND and foreground colors with FG-BLEND."
-  (let (name cons colors)
-    (dolist (cons palette)
-      (let ((blend (if (string-match "bg" (symbol-name (car cons)))
-                       bg-blend
-                     fg-blend)))
-        (setq name (my-modus-themes-interpolate (cdr cons) blend)))
-      (setq name (format "%s" name))
-      (setq cons `(,(car cons) . ,name))
-      (push cons colors))
-    colors))
-
-(define-minor-mode modus-themes-tinted-mode
-  "Tweak some Modus themes colors."
-  :init-value nil
-  :global t
-  (if modus-themes-tinted-mode
-      (setq modus-themes-operandi-color-overrides
-            (my-modus-themes-tint-palette modus-themes-operandi-colors
-                                          my-modus-operandi-bg-blend
-                                          my-modus-operandi-fg-blend)
-            modus-themes-vivendi-color-overrides
-            (my-modus-themes-tint-palette modus-themes-vivendi-colors
-                                          my-modus-vivendi-bg-blend
-                                          my-modus-vivendi-fg-blend))
-    (setq modus-themes-operandi-color-overrides nil
-          modus-themes-vivendi-color-overrides nil)))
-
-(modus-themes-tinted-mode 1)
-#+end_src
-
-** Override colors completely
-:PROPERTIES:
-:CUSTOM_ID: h:736c0ff5-8c9c-4565-82cf-989e57d07d4a
-:END:
-
-Based on the ideas we have already covered in these sections, the
-following code block provides a complete, bespoke pair of color palettes
-which override the defaults.  They are implemented as a minor mode, as
-explained before ([[#h:307d95dd-8dbd-4ece-a543-10ae86f155a6][Override 
colors]]).  We call them "Summertime" for
-convenience.
-
-#+begin_src emacs-lisp
-;; Read the relevant blog post:
-;; 
<https://protesilaos.com/codelog/2022-07-26-modus-themes-color-override-demo/>
-(define-minor-mode modus-themes-summertime
-  "Refashion the Modus themes by overriding their colors.
-
-This is a complete technology demonstration to show how to
-manually override the colors of the Modus themes.  I have taken
-good care of those overrides to make them work as a fully fledged
-color scheme that is compatible with all user options of the
-Modus themes.
-
-These overrides are usable by those who (i) like something more
-fancy than the comparatively austere looks of the Modus themes,
-and (ii) can cope with a lower contrast ratio.
-
-The overrides are set up as a minor mode, so that the user can
-activate the effect on demand.  Those who want to load the
-overrides at all times can either add them directly to their
-configuration or enable `modus-themes-summertime' BEFORE loading
-either of the Modus themes (if the overrides are evaluated after
-the theme, the theme must be reloaded).
-
-Remember that all changes to theme-related variables require a
-reload of the theme to take effect (the Modus themes have lots of
-user options, apart from those overrides).
-
-The `modus-themes-summertime' IS NOT an official extension to the
-Modus themes and DOES NOT comply with its lofty accessibility
-standards.  It is included in the official manual as guidance for
-those who want to make use of the color overriding facility we
-provide."
-  :init-value nil
-  :global t
-  (if modus-themes-summertime
-      (setq modus-themes-operandi-color-overrides
-            '((bg-main . "#fff0f2")
-              (bg-dim . "#fbe6ef")
-              (bg-alt . "#f5dae6")
-              (bg-hl-line . "#fad8e3")
-              (bg-active . "#efcadf")
-              (bg-inactive . "#f3ddef")
-              (bg-active-accent . "#ffbbef")
-              (bg-region . "#dfc5d1")
-              (bg-region-accent . "#efbfef")
-              (bg-region-accent-subtle . "#ffd6ef")
-              (bg-header . "#edd3e0")
-              (bg-tab-active . "#ffeff2")
-              (bg-tab-inactive . "#f8d3ef")
-              (bg-tab-inactive-accent . "#ffd9f5")
-              (bg-tab-inactive-alt . "#e5c0d5")
-              (bg-tab-inactive-alt-accent . "#f3cce0")
-              (fg-main . "#543f78")
-              (fg-dim . "#5f476f")
-              (fg-alt . "#7f6f99")
-              (fg-unfocused . "#8f6f9f")
-              (fg-active . "#563068")
-              (fg-inactive . "#8a5698")
-              (fg-docstring . "#5f5fa7")
-              (fg-comment-yellow . "#a9534f")
-              (fg-escape-char-construct . "#8b207f")
-              (fg-escape-char-backslash . "#a06d00")
-              (bg-special-cold . "#d3e0f4")
-              (bg-special-faint-cold . "#e0efff")
-              (bg-special-mild . "#c4ede0")
-              (bg-special-faint-mild . "#e0f0ea")
-              (bg-special-warm . "#efd0c4")
-              (bg-special-faint-warm . "#ffe4da")
-              (bg-special-calm . "#f0d3ea")
-              (bg-special-faint-calm . "#fadff9")
-              (fg-special-cold . "#405fb8")
-              (fg-special-mild . "#407f74")
-              (fg-special-warm . "#9d6f4f")
-              (fg-special-calm . "#af509f")
-              (bg-completion . "#ffc5e5")
-              (bg-completion-subtle . "#f7cfef")
-              (red . "#ed2f44")
-              (red-alt . "#e0403d")
-              (red-alt-other . "#e04059")
-              (red-faint . "#ed4f44")
-              (red-alt-faint . "#e0603d")
-              (red-alt-other-faint . "#e06059")
-              (green . "#217a3c")
-              (green-alt . "#417a1c")
-              (green-alt-other . "#006f3c")
-              (green-faint . "#318a4c")
-              (green-alt-faint . "#518a2c")
-              (green-alt-other-faint . "#20885c")
-              (yellow . "#b06202")
-              (yellow-alt . "#a95642")
-              (yellow-alt-other . "#a06f42")
-              (yellow-faint . "#b07232")
-              (yellow-alt-faint . "#a96642")
-              (yellow-alt-other-faint . "#a08042")
-              (blue . "#275ccf")
-              (blue-alt . "#475cc0")
-              (blue-alt-other . "#3340ef")
-              (blue-faint . "#476ce0")
-              (blue-alt-faint . "#575ccf")
-              (blue-alt-other-faint . "#3f60d7")
-              (magenta . "#bf317f")
-              (magenta-alt . "#d033c0")
-              (magenta-alt-other . "#844fe4")
-              (magenta-faint . "#bf517f")
-              (magenta-alt-faint . "#d053c0")
-              (magenta-alt-other-faint . "#846fe4")
-              (cyan . "#007a9f")
-              (cyan-alt . "#3f709f")
-              (cyan-alt-other . "#107f7f")
-              (cyan-faint . "#108aaf")
-              (cyan-alt-faint . "#3f80af")
-              (cyan-alt-other-faint . "#3088af")
-              (red-active . "#cd2f44")
-              (green-active . "#116a6c")
-              (yellow-active . "#993602")
-              (blue-active . "#475ccf")
-              (magenta-active . "#7f2ccf")
-              (cyan-active . "#007a8f")
-              (red-nuanced-bg . "#ffdbd0")
-              (red-nuanced-fg . "#ed6f74")
-              (green-nuanced-bg . "#dcf0dd")
-              (green-nuanced-fg . "#3f9a4c")
-              (yellow-nuanced-bg . "#fff3aa")
-              (yellow-nuanced-fg . "#b47232")
-              (blue-nuanced-bg . "#e3e3ff")
-              (blue-nuanced-fg . "#201f6f")
-              (magenta-nuanced-bg . "#fdd0ff")
-              (magenta-nuanced-fg . "#c0527f")
-              (cyan-nuanced-bg . "#dbefff")
-              (cyan-nuanced-fg . "#0f3f60")
-              (bg-diff-heading . "#b7cfe0")
-              (fg-diff-heading . "#041645")
-              (bg-diff-added . "#d6f0d6")
-              (fg-diff-added . "#004520")
-              (bg-diff-changed . "#fcefcf")
-              (fg-diff-changed . "#524200")
-              (bg-diff-removed . "#ffe0ef")
-              (fg-diff-removed . "#891626")
-              (bg-diff-refine-added . "#84cfa4")
-              (fg-diff-refine-added . "#002a00")
-              (bg-diff-refine-changed . "#cccf8f")
-              (fg-diff-refine-changed . "#302010")
-              (bg-diff-refine-removed . "#da92b0")
-              (fg-diff-refine-removed . "#500010")
-              (bg-diff-focus-added . "#a6e5c6")
-              (fg-diff-focus-added . "#002c00")
-              (bg-diff-focus-changed . "#ecdfbf")
-              (fg-diff-focus-changed . "#392900")
-              (bg-diff-focus-removed . "#efbbcf")
-              (fg-diff-focus-removed . "#5a0010"))
-            modus-themes-vivendi-color-overrides
-            '((bg-main . "#25152a")
-              (bg-dim . "#2a1930")
-              (bg-alt . "#382443")
-              (bg-hl-line . "#332650")
-              (bg-active . "#463358")
-              (bg-inactive . "#2d1f3a")
-              (bg-active-accent . "#50308f")
-              (bg-region . "#5d4a67")
-              (bg-region-accent . "#60509f")
-              (bg-region-accent-subtle . "#3f285f")
-              (bg-header . "#3a2543")
-              (bg-tab-active . "#26162f")
-              (bg-tab-inactive . "#362647")
-              (bg-tab-inactive-accent . "#36265a")
-              (bg-tab-inactive-alt . "#3e2f5a")
-              (bg-tab-inactive-alt-accent . "#3e2f6f")
-              (fg-main . "#debfe0")
-              (fg-dim . "#d0b0da")
-              (fg-alt . "#ae85af")
-              (fg-unfocused . "#8e7f9f")
-              (fg-active . "#cfbfef")
-              (fg-inactive . "#b0a0c0")
-              (fg-docstring . "#c8d9f7")
-              (fg-comment-yellow . "#cf9a70")
-              (fg-escape-char-construct . "#ff75aa")
-              (fg-escape-char-backslash . "#dbab40")
-              (bg-special-cold . "#2a3f58")
-              (bg-special-faint-cold . "#1e283f")
-              (bg-special-mild . "#0f3f31")
-              (bg-special-faint-mild . "#0f281f")
-              (bg-special-warm . "#44331f")
-              (bg-special-faint-warm . "#372213")
-              (bg-special-calm . "#4a314f")
-              (bg-special-faint-calm . "#3a223f")
-              (fg-special-cold . "#c0b0ff")
-              (fg-special-mild . "#bfe0cf")
-              (fg-special-warm . "#edc0a6")
-              (fg-special-calm . "#ff9fdf")
-              (bg-completion . "#502d70")
-              (bg-completion-subtle . "#451d65")
-              (red . "#ff5f6f")
-              (red-alt . "#ff8f6d")
-              (red-alt-other . "#ff6f9d")
-              (red-faint . "#ffa0a0")
-              (red-alt-faint . "#f5aa80")
-              (red-alt-other-faint . "#ff9fbf")
-              (green . "#51ca5c")
-              (green-alt . "#71ca3c")
-              (green-alt-other . "#51ca9c")
-              (green-faint . "#78bf78")
-              (green-alt-faint . "#99b56f")
-              (green-alt-other-faint . "#88bf99")
-              (yellow . "#f0b262")
-              (yellow-alt . "#f0e242")
-              (yellow-alt-other . "#d0a272")
-              (yellow-faint . "#d2b580")
-              (yellow-alt-faint . "#cabf77")
-              (yellow-alt-other-faint . "#d0ba95")
-              (blue . "#778cff")
-              (blue-alt . "#8f90ff")
-              (blue-alt-other . "#8380ff")
-              (blue-faint . "#82b0ec")
-              (blue-alt-faint . "#a0acef")
-              (blue-alt-other-faint . "#80b2f0")
-              (magenta . "#ff70cf")
-              (magenta-alt . "#ff77f0")
-              (magenta-alt-other . "#ca7fff")
-              (magenta-faint . "#e0b2d6")
-              (magenta-alt-faint . "#ef9fe4")
-              (magenta-alt-other-faint . "#cfa6ff")
-              (cyan . "#30cacf")
-              (cyan-alt . "#60caff")
-              (cyan-alt-other . "#40b79f")
-              (cyan-faint . "#90c4ed")
-              (cyan-alt-faint . "#a0bfdf")
-              (cyan-alt-other-faint . "#a4d0bb")
-              (red-active . "#ff6059")
-              (green-active . "#64dc64")
-              (yellow-active . "#ffac80")
-              (blue-active . "#4fafff")
-              (magenta-active . "#cf88ff")
-              (cyan-active . "#50d3d0")
-              (red-nuanced-bg . "#440a1f")
-              (red-nuanced-fg . "#ffcccc")
-              (green-nuanced-bg . "#002904")
-              (green-nuanced-fg . "#b8e2b8")
-              (yellow-nuanced-bg . "#422000")
-              (yellow-nuanced-fg . "#dfdfb0")
-              (blue-nuanced-bg . "#1f1f5f")
-              (blue-nuanced-fg . "#bfd9ff")
-              (magenta-nuanced-bg . "#431641")
-              (magenta-nuanced-fg . "#e5cfef")
-              (cyan-nuanced-bg . "#042f49")
-              (cyan-nuanced-fg . "#a8e5e5")
-              (bg-diff-heading . "#304466")
-              (fg-diff-heading . "#dae7ff")
-              (bg-diff-added . "#0a383a")
-              (fg-diff-added . "#94ba94")
-              (bg-diff-changed . "#2a2000")
-              (fg-diff-changed . "#b0ba9f")
-              (bg-diff-removed . "#50163f")
-              (fg-diff-removed . "#c6adaa")
-              (bg-diff-refine-added . "#006a46")
-              (fg-diff-refine-added . "#e0f6e0")
-              (bg-diff-refine-changed . "#585800")
-              (fg-diff-refine-changed . "#ffffcc")
-              (bg-diff-refine-removed . "#952838")
-              (fg-diff-refine-removed . "#ffd9eb")
-              (bg-diff-focus-added . "#1d4c3f")
-              (fg-diff-focus-added . "#b4dfb4")
-              (bg-diff-focus-changed . "#424200")
-              (fg-diff-focus-changed . "#d0daaf")
-              (bg-diff-focus-removed . "#6f0f39")
-              (fg-diff-focus-removed . "#eebdba")))
-    (setq modus-themes-operandi-color-overrides nil
-          modus-themes-vivendi-color-overrides nil)))
-#+end_src
-
 ** Font configurations for Org and others
 :properties:
 :custom_id: h:defcf4fc-8fa8-4c29-b12e-7119582cc929
@@ -3400,8 +2499,8 @@ the ~variable-pitch~ (proportional spacing) and 
~fixed-pitch~ (monospaced)
 faces respectively.  It may also be convenient to set your main typeface
 by configuring the ~default~ face the same way.
 
-[ The =fontaine= package on GNU ELPA (by the author of the modus-themes)
-  is designed to handle this case. ]
+[ The ~fontaine~ package on GNU ELPA (by Protesilaos) is designed to
+  handle this case. ]
 
 Put something like this in your initialization file (also consider
 reading the doc string of ~set-face-attribute~):
@@ -3537,7 +2636,7 @@ of the themes, which can make it easier to redefine faces 
in bulk).
 (add-hook 'modus-themes-after-load-theme-hook 
#'my-modes-themes-bold-italic-faces)
 #+end_src
 
-[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the 
themes' palette]].
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with 
modus-themes-with-colors]].
 
 ** Custom Org todo keyword and priority faces
 :properties:
@@ -3623,8 +2722,6 @@ Their documentation strings will offer you further 
guidance.
 Recall that the themes let you retrieve a color from their palette.  Do
 it if you plan to control face attributes.
 
-[[#h:1487c631-f4fe-490d-8d58-d72ffa3bd474][Custom face specs using the themes' 
palette]].
-
 [[#h:02e25930-e71a-493d-828a-8907fc80f874][Check color combinations]].
 
 ** Custom Org emphasis faces
@@ -3649,7 +2746,7 @@ specification of that variable looks like this:
 
 With the exception of ~org-verbatim~ and ~org-code~ faces, everything else
 uses the corresponding type of emphasis: a bold typographic weight, or
-italicized, underlined, and struck through text.
+italicised, underlined, and struck through text.
 
 The best way for users to add some extra attributes, such as a
 foreground color, is to define their own faces and assign them to the
@@ -3872,8 +2969,8 @@ palette in large part because certain colors are only 
meant to be used
 in combination with some others.  Consult the source code for the
 minutia and relevant commentary.
 
-Such knowledge may prove valuable while attempting to override some of
-the themes' colors: [[#h:307d95dd-8dbd-4ece-a543-10ae86f155a6][Override 
colors]].
+Such knowledge may prove valuable while attempting to customize the
+theme's color palette.
 
 ** Load theme depending on time of day
 :properties:
@@ -3972,101 +3069,6 @@ With those in place, PDFs have a distinct backdrop for 
their page, while
 buffers with major-mode as ~pdf-view-mode~ automatically switches to dark
 mode when ~modus-themes-toggle~ is called.
 
-** Decrease mode line height
-:properties:
-:custom_id: h:03be4438-dae1-4961-9596-60a307c070b5
-:end:
-#+cindex: Decrease mode line height
-
-By default, the mode line of the Modus themes is set to 1 pixel width
-for its =:box= attribute.  In contrast, the mode line of stock Emacs is -1
-pixel.  This small difference is considered necessary for the purposes
-of accessibility as our out-of-the-box design has a prominent color
-around the mode line (a border) to make its boundaries clear.  With a
-negative width the border and the text on the mode line can feel a bit
-more difficult to read under certain scenaria.
-
-Furthermore, the user option ~modus-themes-mode-line~ 
([[#h:27943af6-d950-42d0-bc23-106e43f50a24][Mode line]]) does not
-allow for such a negative value because there are many edge cases that
-simply make for a counter-intuitive set of possibilities, such as a =0=
-value not being acceptable by the underlying face infrastructure, and
-negative values greater than =-2= not being particularly usable.
-
-For these reasons, users who wish to decrease the overall height of the
-mode line must handle things on their own by implementing the methods
-for face customization documented herein.
-
-[[#h:1487c631-f4fe-490d-8d58-d72ffa3bd474][Basic face customization]].
-
-One such method is to create a function that configures the desired
-faces and hook it to ~modus-themes-after-load-theme-hook~ so that it
-persists while switching between the Modus themes with the command
-~modus-themes-toggle~.
-
-This one simply disables the box altogether, which will reduce the
-height of the mode lines, but also remove their border:
-
-#+begin_src emacs-lisp
-(defun my-modus-themes-custom-faces ()
-  (set-face-attribute 'mode-line nil :box nil)
-  (set-face-attribute 'mode-line-inactive nil :box nil))
-
-(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
-#+end_src
-
-The above relies on the ~set-face-attribute~ function, though users who
-plan to re-use colors from the theme and do so at scale are better off
-with the more streamlined combination of the ~modus-themes-with-colors~
-macro and ~custom-set-faces~.
-
-[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face customization at scale]].
-
-As explained before in this document, this approach has a syntax that is
-consistent with the source code of the themes, so it probably is easier
-to re-use parts of the design.
-
-The following emulates the stock Emacs style, while still using the
-colors of the Modus themes (whichever attribute is not explicitly stated
-is inherited from the underlying theme):
-
-#+begin_src emacs-lisp
-(defun my-modus-themes-custom-faces ()
-  (modus-themes-with-colors
-    (custom-set-faces
-     `(mode-line ((,class :box (:line-width -1 :style released-button))))
-     `(mode-line-inactive ((,class :box (:line-width -1 :color 
,bg-region)))))))
-
-(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
-#+end_src
-
-And this one is like the out-of-the-box style of the Modus themes, but
-with the -1 height instead of 1:
-
-#+begin_src emacs-lisp
-(defun my-modus-themes-custom-faces ()
-  (modus-themes-with-colors
-    (custom-set-faces
-     `(mode-line ((,class :box (:line-width -1 :color ,fg-alt))))
-     `(mode-line-inactive ((,class :box (:line-width -1 :color 
,bg-region)))))))
-
-(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
-#+end_src
-
-Finally, to also change the background color of the active mode line,
-such as that it looks like the "accented" variant which is possible via
-the user option ~modus-themes-mode-line~, the =:background= attribute needs
-to be specified as well:
-
-#+begin_src emacs-lisp
-(defun my-modus-themes-custom-faces ()
-  (modus-themes-with-colors
-    (custom-set-faces
-     `(mode-line ((,class :box (:line-width -1 :color ,fg-alt) :background 
,bg-active-accent)))
-     `(mode-line-inactive ((,class :box (:line-width -1 :color 
,bg-region)))))))
-
-(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
-#+end_src
-
 ** Toggle themes without reloading them
 :properties:
 :custom_id: h:b40aca50-a3b2-4c43-be58-2c26fcd14237
@@ -4106,13 +3108,13 @@ varying skill levels, from beginners to experts.  This 
means that we try
 to make things easier by not expecting anyone reading this document to
 be proficient in Emacs Lisp or programming in general.
 
-Such a case is with the use of the ~modus-themes-after-load-theme-hook~,
-which runs after ~modus-themes-toggle~, ~modus-themes-load-operandi~, or
-~modus-themes-load-vivendi~ is evaluated.  We recommend using that hook
-for advanced customizations, because (1) we know for sure that it is
+Such a case is with the use of ~modus-themes-after-load-theme-hook~,
+which runs after the ~modus-themes-load-theme~ function (used by the
+command ~modus-themes-toggle~).  We recommend using that hook for
+advanced customizations, because (1) we know for sure that it is
 available once the themes are loaded, and (2) anyone consulting this
-manual, especially the sections on enabling and loading the themes, will
-be in a good position to benefit from that hook.
+manual, especially the sections on enabling and loading the themes,
+will be in a good position to benefit from that hook.
 
 Advanced users who have a need to switch between the Modus themes and
 other items will find that such a hook does not meet their requirements:
@@ -4138,235 +3140,14 @@ also has the benefit that it does not depend on 
functions such as
 ~modus-themes-toggle~ and the others mentioned above.  ~enable-theme~ is
 called internally by ~load-theme~, so the hook works everywhere.
 
-Now this specific piece of Elisp may be simple for experienced users,
-but it is not easy to read for newcomers, including the author of the
-Modus themes for the first several months of their time as an Emacs
-user.  Hence our hesitation to recommend it as part of the standard
-setup of the Modus themes (it is generally a good idea to understand
-what the implications are of advising a function).
-
-** Diffs with only the foreground
-:properties:
-:custom_id: h:e2aed9eb-5e1e-45ec-bbd7-bc4faeab3236
-:end:
-#+cindex: Foreground-only diffs
-
-Buffers that show differences between versions of a file or buffer, such
-as in ~diff-mode~ and ~ediff~ always use color-coded background and
-foreground combinations.
-
-[[#h:ea7ac54f-5827-49bd-b09f-62424b3b6427][Option for diff buffer looks]].
-
-User may, however, prefer a style that removes the color-coded
-backgrounds from regular changes while keeping them for word-wise (aka
-"refined") changes---backgrounds for word-wise diffs are helpful in
-context.  To make this happen, one can use the ~modus-themes-with-colors~
-macro ([[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using 
the themes' palette]]):
-
-#+begin_src emacs-lisp
-(defun my-modus-themes-custom-faces ()
-  (modus-themes-with-colors
-    (custom-set-faces
-     `(modus-themes-diff-added ((,class :background unspecified :foreground 
,green))) ; OR ,blue for deuteranopia
-     `(modus-themes-diff-changed ((,class :background unspecified :foreground 
,yellow)))
-     `(modus-themes-diff-removed ((,class :background unspecified :foreground 
,red)))
-
-     `(modus-themes-diff-refine-added ((,class :background ,bg-diff-added 
:foreground ,fg-diff-added)))
-     ;; `(modus-themes-diff-refine-added ((,class :background 
,bg-diff-added-deuteran :foreground ,fg-diff-added-deuteran)))
-     `(modus-themes-diff-refine-changed ((,class :background ,bg-diff-changed 
:foreground ,fg-diff-changed)))
-     `(modus-themes-diff-refine-removed ((,class :background ,bg-diff-removed 
:foreground ,fg-diff-removed)))
-
-     `(modus-themes-diff-focus-added ((,class :background ,bg-dim :foreground 
,green))) ; OR ,blue for deuteranopia
-     `(modus-themes-diff-focus-changed ((,class :background ,bg-dim 
:foreground ,yellow)))
-     `(modus-themes-diff-focus-removed ((,class :background ,bg-dim 
:foreground ,red)))
-
-     `(modus-themes-diff-heading ((,class :background ,bg-alt :foreground 
,fg-main)))
-
-     `(diff-indicator-added ((,class :foreground ,green))) ; OR ,blue for 
deuteranopia
-     `(diff-indicator-changed ((,class :foreground ,yellow)))
-     `(diff-indicator-removed ((,class :foreground ,red)))
-
-     `(magit-diff-added ((,class :background unspecified :foreground 
,green-faint)))
-     `(magit-diff-changed ((,class :background unspecified :foreground 
,yellow-faint)))
-     `(magit-diff-removed ((,class :background unspecified :foreground 
,red-faint)))
-     `(magit-diff-context-highlight ((,class :background ,bg-dim :foreground 
,fg-dim))))))
-
-;; This is so that the changes persist when switching between
-;; `modus-operandi' and `modus-vivendi'.
-(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
-#+end_src
-
-This used to be an optional style of ~modus-themes-diffs~, but has been
-removed since version =2.0.0= to ensure that the accessibility standard
-and aesthetic quality of the themes is not compromised.
-
-** Ediff without diff color-coding
-:properties:
-:custom_id: h:b0b31802-0216-427e-b071-1a47adcfe608
-:end:
-
-Ediff uses the same color-coding as ordinary diffs in ~diff-mode~, Magit,
-etc. ([[#h:ea7ac54f-5827-49bd-b09f-62424b3b6427][Option for diff buffer 
looks]]).  This is consistent with the
-principle of least surprise.
-
-Users may, however, prefer to treat Ediff differently on the premise
-that it does not need any particular color-coding to show added or
-removed lines/words: it does not use the =+= or =-= markers, after all.
-
-This can be achieved by customizing the Ediff faces with color
-combinations that do not carry the same connotations as those of diffs.
-Consider this example, which leverages the ~modus-themes-with-colors~
-macro ([[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using 
the themes' palette]]):
-
-#+begin_src emacs-lisp
-(defun my-modus-themes-custom-faces ()
-  (modus-themes-with-colors
-    (custom-set-faces
-     `(ediff-current-diff-A ((,class :inherit unspecified :background 
,bg-special-faint-cold :foreground ,fg-special-cold)))
-     `(ediff-current-diff-B ((,class :inherit unspecified :background 
,bg-special-faint-warm :foreground ,fg-special-warm)))
-     `(ediff-current-diff-C ((,class :inherit unspecified :background 
,bg-special-faint-calm :foreground ,fg-special-calm)))
-     `(ediff-fine-diff-A ((,class :inherit unspecified :background 
,bg-special-cold :foreground ,fg-special-cold)))
-     `(ediff-fine-diff-B ((,class :inherit unspecified :background 
,bg-special-warm :foreground ,fg-special-warm)))
-     `(ediff-fine-diff-C ((,class :inherit unspecified :background 
,bg-special-calm :foreground ,fg-special-calm))))))
-
-;; This is so that the changes persist when switching between
-;; `modus-operandi' and `modus-vivendi'.
-(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
-#+end_src
-
-Remove the =:foreground= and its value to preserve the underlying
-coloration.
-
-[[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Visualize the active Modus theme's 
palette]].
-
-** Near-monochrome syntax highlighting
-:properties:
-:custom_id: h:c1f3fa8e-7a63-4a6f-baf3-a7febc0661f0
-:end:
-#+cindex: Monochrome code syntax
-
-While the Modus themes do provide a user option to control the overall
-style of syntax highlighting in programming major modes, they do not
-cover the possibility of a monochromatic or near-monochromatic design
-([[#h:c119d7b2-fcd4-4e44-890e-5e25733d5e52][Option for syntax highlighting]]). 
 This is due to the multitude of
-preferences involved: one may like comments to be styled with an accent
-value, another may want certain constructs to be bold, a third may apply
-italics to doc strings but not comments...  The possibilities are
-virtually endless.  As such, this sort of design is best handled at the
-user level in accordance with the information furnished elsewhere in
-this manual.
-
-[[#h:1487c631-f4fe-490d-8d58-d72ffa3bd474][Case-by-case face specs using the 
themes' palette]].
-
-[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the 
themes' palette]].
-
-The gist is that we want to override the font-lock faces.  For our
-changes to persist while switching between ~modus-operandi~ and
-~modus-vivendi~ we wrap our face overrides in a function that we hook to
-~modus-themes-after-load-theme-hook~.
-
-Users who want to replicate the structure of the themes' source code are
-advised to use the examples with ~custom-set-faces~.  Those who prefer a
-different approach can use the snippets which call ~set-face-attribute~.
-Below are the code blocks.
-
-The following uses a yellow accent value for comments and green hues for
-strings.  Regexp grouping constructs have color values that work in the
-context of a green string.  All other elements use the main foreground
-color, except warnings such as the ~user-error~ function in Elisp
-buffers which gets a subtle red tint (not to be confused with the
-~warning~ face which is used for genuine warnings).  Furthermore, notice
-the ~modus-themes-bold~ and ~modus-themes-slant~ which apply the
-preference set in the user options ~modus-themes-bold-constructs~ and
-~modus-themes-italic-constructs~, respectively.  Users who do not want
-this conditionally must replace these faces with ~bold~ and ~italic~
-respectively (or ~unspecified~ to disable the effect altogether).
-
-#+begin_src emacs-lisp
-;; This is the hook.  It will not be replicated across all code samples.
-(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-subtle-syntax)
-
-(defun my-modus-themes-subtle-syntax ()
-  (modus-themes-with-colors
-    (custom-set-faces
-     `(font-lock-builtin-face ((,class :inherit modus-themes-bold :foreground 
unspecified)))
-     `(font-lock-comment-delimiter-face ((,class :inherit 
font-lock-comment-face)))
-     `(font-lock-comment-face ((,class :inherit unspecified :foreground 
,fg-comment-yellow)))
-     `(font-lock-constant-face ((,class :foreground unspecified)))
-     `(font-lock-doc-face ((,class :inherit modus-themes-slant :foreground 
,fg-special-mild)))
-     `(font-lock-function-name-face ((,class :foreground unspecified)))
-     `(font-lock-keyword-face ((,class :inherit modus-themes-bold :foreground 
unspecified)))
-     `(font-lock-negation-char-face ((,class :inherit modus-themes-bold 
:foreground unspecified)))
-     `(font-lock-preprocessor-face ((,class :foreground unspecified)))
-     `(font-lock-regexp-grouping-backslash ((,class :inherit bold :foreground 
,yellow)))
-     `(font-lock-regexp-grouping-construct ((,class :inherit bold :foreground 
,blue-alt-other)))
-     `(font-lock-string-face ((,class :foreground ,green-alt-other)))
-     `(font-lock-type-face ((,class :inherit modus-themes-bold :foreground 
unspecified)))
-     `(font-lock-variable-name-face ((,class :foreground unspecified)))
-     `(font-lock-warning-face ((,class :inherit modus-themes-bold :foreground 
,red-nuanced-fg))))))
-
-;; Same as above with `set-face-attribute' instead of `custom-set-faces'
-(defun my-modus-themes-subtle-syntax ()
-  (modus-themes-with-colors
-    (set-face-attribute 'font-lock-builtin-face nil :inherit 
'modus-themes-bold :foreground 'unspecified)
-    (set-face-attribute 'font-lock-comment-delimiter-face nil :inherit 
'font-lock-comment-face)
-    (set-face-attribute 'font-lock-comment-face nil :inherit 'unspecified 
:foreground fg-comment-yellow)
-    (set-face-attribute 'font-lock-constant-face nil :foreground 'unspecified)
-    (set-face-attribute 'font-lock-doc-face nil :inherit 'modus-themes-slant 
:foreground fg-special-mild)
-    (set-face-attribute 'font-lock-function-name-face nil :foreground 
'unspecified)
-    (set-face-attribute 'font-lock-keyword-face nil :inherit 
'modus-themes-bold :foreground 'unspecified)
-    (set-face-attribute 'font-lock-negation-char-face nil :inherit 
'modus-themes-bold :foreground 'unspecified)
-    (set-face-attribute 'font-lock-preprocessor-face nil :foreground 
'unspecified)
-    (set-face-attribute 'font-lock-regexp-grouping-backslash nil :inherit 
'bold :foreground yellow)
-    (set-face-attribute 'font-lock-regexp-grouping-construct nil :inherit 
'bold :foreground blue-alt-other)
-    (set-face-attribute 'font-lock-string-face nil :foreground green-alt-other)
-    (set-face-attribute 'font-lock-type-face nil :inherit 'modus-themes-bold 
:foreground 'unspecified)
-    (set-face-attribute 'font-lock-variable-name-face nil :foreground 
'unspecified)
-    (set-face-attribute 'font-lock-warning-face nil :inherit 
'modus-themes-bold :foreground red-nuanced-fg)))
-#+end_src
-
-The following sample is the same as above, except strings are blue and
-comments are gray.  Regexp constructs are adapted accordingly.
+The downside of the theme-agnostic hook is that any functions added to
+it will likely not be able to benefit from macro calls that read the
+active theme, such as ~modus-themes-with-colors~.  Not all Emacs
+themes have the same capabilities.
 
-#+begin_src emacs-lisp
-(defun my-modus-themes-subtle-syntax ()
-  (modus-themes-with-colors
-    (custom-set-faces
-     `(font-lock-builtin-face ((,class :inherit modus-themes-bold :foreground 
unspecified)))
-     `(font-lock-comment-delimiter-face ((,class :inherit 
font-lock-comment-face)))
-     `(font-lock-comment-face ((,class :inherit unspecified :foreground 
,fg-alt)))
-     `(font-lock-constant-face ((,class :foreground unspecified)))
-     `(font-lock-doc-face ((,class :inherit modus-themes-slant :foreground 
,fg-docstring)))
-     `(font-lock-function-name-face ((,class :foreground unspecified)))
-     `(font-lock-keyword-face ((,class :inherit modus-themes-bold :foreground 
unspecified)))
-     `(font-lock-negation-char-face ((,class :inherit modus-themes-bold 
:foreground unspecified)))
-     `(font-lock-preprocessor-face ((,class :foreground unspecified)))
-     `(font-lock-regexp-grouping-backslash ((,class :inherit bold :foreground 
,fg-escape-char-backslash)))
-     `(font-lock-regexp-grouping-construct ((,class :inherit bold :foreground 
,fg-escape-char-construct)))
-     `(font-lock-string-face ((,class :foreground ,blue-alt)))
-     `(font-lock-type-face ((,class :inherit modus-themes-bold :foreground 
unspecified)))
-     `(font-lock-variable-name-face ((,class :foreground unspecified)))
-     `(font-lock-warning-face ((,class :inherit modus-themes-bold :foreground 
,red-nuanced-fg))))))
-
-;; Same as above with `set-face-attribute' instead of `custom-set-faces'
-(defun my-modus-themes-subtle-syntax ()
-  (modus-themes-with-colors
-    (set-face-attribute 'font-lock-builtin-face nil :inherit 
'modus-themes-bold :foreground 'unspecified)
-    (set-face-attribute 'font-lock-comment-delimiter-face nil :inherit 
'font-lock-comment-face)
-    (set-face-attribute 'font-lock-comment-face nil :inherit 'unspecified 
:foreground fg-alt)
-    (set-face-attribute 'font-lock-constant-face nil :foreground 'unspecified)
-    (set-face-attribute 'font-lock-doc-face nil :inherit 'modus-themes-slant 
:foreground fg-docstring)
-    (set-face-attribute 'font-lock-function-name-face nil :foreground 
'unspecified)
-    (set-face-attribute 'font-lock-keyword-face nil :inherit 
'modus-themes-bold :foreground 'unspecified)
-    (set-face-attribute 'font-lock-negation-char-face nil :inherit 
'modus-themes-bold :foreground 'unspecified)
-    (set-face-attribute 'font-lock-preprocessor-face nil :foreground 
'unspecified)
-    (set-face-attribute 'font-lock-regexp-grouping-backslash nil :inherit 
'bold :foreground fg-escape-char-backslash)
-    (set-face-attribute 'font-lock-regexp-grouping-construct nil :inherit 
'bold :foreground fg-escape-char-construct)
-    (set-face-attribute 'font-lock-string-face nil :foreground blue-alt)
-    (set-face-attribute 'font-lock-type-face nil :inherit 'modus-themes-bold 
:foreground 'unspecified)
-    (set-face-attribute 'font-lock-variable-name-face nil :foreground 
'unspecified)
-    (set-face-attribute 'font-lock-warning-face nil :inherit 
'modus-themes-bold :foreground red-nuanced-fg)))
-#+end_src
+In this document, we cover ~modus-themes-after-load-theme-hook~ though
+the user can replace it with ~after-enable-theme-hook~ should they
+need to (provided they understand the implications).
 
 ** Custom hl-todo colors
 :PROPERTIES:
@@ -4448,16 +3229,16 @@ on what we cover at length elsewhere in this manual:
 
 [[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]].
 
-[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the 
themes' palette]].
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with 
modus-themes-with-colors]].
 
 #+begin_src emacs-lisp
 (defun my-modus-themes-custom-faces ()
   (modus-themes-with-colors
     (custom-set-faces
-     `(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))))))
+     `(solaire-default-face ((,c :inherit default :background ,bg-dim 
:foreground ,fg-dim)))
+     `(solaire-line-number-face ((,c :inherit solaire-default-face :foreground 
,fg-unfocused)))
+     `(solaire-hl-line-face ((,c :background ,bg-active)))
+     `(solaire-org-hide-face ((,c :background ,bg-dim :foreground ,bg-dim))))))
 
 (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
 #+end_src
@@ -4487,65 +3268,50 @@ affected face groups.  The items with an appended 
asterisk =*= tend to
 have lots of extensions, so the "full support" may not be 100% true…
 
 + ace-window
-+ alert
++ agda2-mode
 + all-the-icons
 + all-the-icons-dired
 + all-the-icons-ibuffer
 + annotate
 + ansi-color
 + anzu
-+ apropos
-+ artbollocks-mode
 + auctex and TeX
 + auto-dim-other-buffers
 + avy
-+ awesome-tray
 + bbdb
 + binder
-+ bm
 + bongo
 + boon
 + bookmark
-+ breakpoint (provided by the built-in {{{file(gdb-mi.el)}}} library)
 + calendar and diary
-+ calfw
-+ calibredb
 + centaur-tabs
-+ cfrs
 + change-log and log-view (such as ~vc-print-log~, ~vc-print-root-log~)
 + chart
 + cider
 + circe
 + citar
-+ color-rg
++ clojure-mode
 + column-enforce-mode
 + company-mode*
-+ company-posframe
 + compilation-mode
 + completions
 + consult
 + corfu
 + corfu-quick
 + counsel*
-+ counsel-css
-+ cov
 + cperl-mode
 + crontab-mode
 + css-mode
 + csv-mode
 + ctrlf
 + custom (what you get with {{{kbd(M-x customize)}}})
-+ dap-mode
 + deadgrep
-+ debbugs
 + deft
-+ denote
 + devdocs
 + dictionary
 + diff-hl
 + diff-mode
 + dim-autoload
-+ dir-treeview
 + dired
 + dired-async
 + dired-git
@@ -4553,11 +3319,8 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + dired-narrow
 + dired-subtree
 + diredfl
-+ diredp (dired+)
 + display-fill-column-indicator-mode
 + doom-modeline
-+ easy-jekyll
-+ ebdb
 + ediff
 + ein (Emacs IPython Notebook)
 + eglot
@@ -4571,36 +3334,23 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + emms
 + enh-ruby-mode (enhanced-ruby-mode)
 + epa
-+ equake
 + erc
-+ eros
 + ert
 + eshell
 + eshell-fringe-status
-+ eshell-git-prompt
-+ eshell-prompt-extras (epe)
-+ eshell-syntax-highlighting
 + evil* (evil-mode)
-+ evil-goggles
-+ evil-snipe
-+ evil-visual-mark-mode
 + eww
 + exwm
 + eyebrowse
-+ fancy-dabbrev
 + flycheck
 + flycheck-color-mode-line
 + flycheck-indicator
-+ flycheck-posframe
 + flymake
 + flyspell
 + flx
-+ freeze-it
 + focus
 + fold-this
 + font-lock (generic syntax highlighting)
-+ forge
-+ fountain (fountain-mode)
 + geiser
 + git-commit
 + git-gutter (and variants)
@@ -4609,23 +3359,16 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + gnus
 + gotest
 + golden-ratio-scroll-screen
-+ helm*
-+ helm-ls-git
-+ helm-switch-shell
-+ helm-xref
 + helpful
-+ highlight-indentation
 + highlight-numbers
 + highlight-parentheses ([[#h:24bab397-dcb2-421d-aa6e-ec5bd622b913][Note on 
highlight-parentheses.el]])
 + highlight-thing
-+ hl-defined
 + hl-fill-column
 + hl-line-mode
 + hl-todo
 + hydra
 + ibuffer
 + icomplete
-+ icomplete-vertical
 + ido-mode
 + iedit
 + iflipb
@@ -4635,7 +3378,6 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + info
 + info+ (info-plus)
 + info-colors
-+ interaction-log
 + ioccur
 + isearch, occur, etc.
 + ivy*
@@ -4644,34 +3386,25 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + journalctl-mode
 + js2-mode
 + julia
-+ jupyter
 + kaocha-runner
 + keycast
 + ledger-mode
 + leerzeichen
 + line numbers (~display-line-numbers-mode~ and global variant)
-+ lsp-mode
-+ lsp-ui
-+ macrostep
 + magit
-+ magit-imerge
 + make-mode
 + man
 + marginalia
 + markdown-mode
 + markup-faces (~adoc-mode~)
-+ mentor
 + messages
-+ mini-modeline
 + minimap
-+ mmm-mode
 + mode-line
 + mood-line
 + moody
 + mpdel
 + mu4e
 + multiple-cursors
-+ nano-modeline
 + neotree
 + notmuch
 + num3-mode
@@ -4698,11 +3431,8 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + pdf-tools
 + persp-mode
 + perspective
-+ phi-grep
-+ pomidor
 + popup
 + powerline
-+ powerline-evil
 + prism ([[#h:a94272e0-99da-4149-9e80-11a7e67a2cf2][Note for prism.el]])
 + prescient
 + proced
@@ -4710,19 +3440,15 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + pulse
 + pyim
 + quick-peek
-+ racket-mode
-+ rainbow-blocks
 + rainbow-delimiters
 + rcirc
++ rcirc-color
 + recursion-indicator
 + regexp-builder (also known as ~re-builder~)
 + rg (rg.el)
 + ripgrep
 + rmail
 + ruler-mode
-+ selectrum
-+ selectrum-prescient
-+ semantic
 + sesman
 + shell-script-mode
 + shortdoc
@@ -4734,9 +3460,7 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + slime (slbd)
 + sly
 + smart-mode-line
-+ smartparens
 + smerge
-+ spaceline
 + speedbar
 + spell-fu
 + stripes
@@ -4746,20 +3470,16 @@ 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 {{{file(table.el)}}})
 + telega
-+ telephone-line
 + terraform-mode
 + term
 + textsec
-+ tomatinho
 + transient (pop-up windows such as Magit's)
 + trashed
 + tree-sitter
-+ treemacs
 + tty-menu
 + tuareg
 + typescript
@@ -4779,15 +3499,12 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + which-key
 + whitespace-mode
 + window-divider-mode
-+ winum
 + writegood-mode
 + woman
 + xah-elisp-mode
-+ xref
 + xterm-color (and ansi-colors)
 + yaml-mode
 + yasnippet
-+ ztree
 
 Plus many other miscellaneous faces that are provided by Emacs.
 
@@ -4802,34 +3519,45 @@ inherit from some basic faces or their dependencies 
which are directly
 supported by the themes.
 
 + ag
++ apropos
 + apt-sources-list
++ bbdb
++ bm
++ breakpoint (provided by the built-in {{{file(gdb-mi.el)}}} library)
 + buffer-expose
 + bufler
 + counsel-notmuch
 + counsel-org-capture-string
 + dashboard (emacs-dashboard)
 + define-word
++ denote
 + disk-usage
 + dtache
 + dynamic-ruler
 + easy-kill
++ ebdb
 + edit-indirect
 + egerrit
 + elfeed-summary
 + evil-owl
 + flyspell-correct
 + fortran-mode
++ freeze-it
++ forge
 + git-walktree
 + goggles
 + highlight-defined
 + highlight-escape-sequences (~hes-mode~)
++ icomplete-vertical
 + i3wm-config-mode
++ lin
 + minibuffer-line
 + no-emoji
 + org-remark
 + parrot
 + perl-mode
 + php-mode
++ pulsar
 + rjsx-mode
 + side-hustle
 + spell-fu
@@ -4840,6 +3568,7 @@ supported by the themes.
 + vdiff
 + vertico-indexed
 + vertico-mouse
++ xref
 
 * Notes on individual packages
 :properties:
@@ -4895,16 +3624,21 @@ length elsewhere in this manual:
 
 [[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]].
 
-[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the 
themes' palette]].
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with 
modus-themes-with-colors]].
 
 #+begin_src emacs-lisp
 (defun my-modus-themes-custom-faces ()
   (modus-themes-with-colors
     (custom-set-faces
-     ;; Replace green with blue if you use `modus-themes-deuteranopia'.
-     `(git-gutter-fr:added ((,class :foreground ,green-fringe-bg)))
-     `(git-gutter-fr:deleted ((,class :foreground ,red-fringe-bg)))
-     `(git-gutter-fr:modified ((,class :foreground ,yellow-fringe-bg))))))
+     ;; Make foreground the same as background for a uniform bar on
+     ;; Doom Emacs.
+     ;;
+     ;; Doom should not be implementing such hacks because themes
+     ;; cannot support them:
+     ;; 
<https://protesilaos.com/codelog/2022-08-04-doom-git-gutter-modus-themes/>.
+     `(git-gutter-fr:added ((,c :foreground ,bg-added-intense)))
+     `(git-gutter-fr:deleted ((,c :foreground ,bg-removed-intense)))
+     `(git-gutter-fr:modified ((,c :foreground ,bg-changed-intense))))))
 
 (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
 #+end_src
@@ -4917,17 +3651,17 @@ If the above does not work, try this instead:
 (after! modus-themes
   (modus-themes-with-colors
     (custom-set-faces
-     ;; Replace green with blue if you use `modus-themes-deuteranopia'.
-     `(git-gutter-fr:added ((,class :foreground ,green-fringe-bg)))
-     `(git-gutter-fr:deleted ((,class :foreground ,red-fringe-bg)))
-     `(git-gutter-fr:modified ((,class :foreground ,yellow-fringe-bg))))))
+     ;; Make foreground the same as background for a uniform bar on
+     ;; Doom Emacs.
+     ;;
+     ;; Doom should not be implementing such hacks because themes
+     ;; cannot support them:
+     ;; 
<https://protesilaos.com/codelog/2022-08-04-doom-git-gutter-modus-themes/>.
+     `(git-gutter-fr:added ((,c :foreground ,bg-added-intense)))
+     `(git-gutter-fr:deleted ((,c :foreground ,bg-removed-intense)))
+     `(git-gutter-fr:modified ((,c :foreground ,bg-changed-intense))))))
 #+end_src
 
-Replace ~green-fringe-bg~ with ~blue-fringe-bg~ if you want to optimize
-for red-green color deficiency.
-
-[[#h:3ed03a48-20d8-4ce7-b214-0eb7e4c79abe][Option for red-green color 
deficiency or deuteranopia]].
-
 ** Note on php-mode multiline comments
 :PROPERTIES:
 :CUSTOM_ID: h:d0a3157b-9c04-46e8-8742-5fb2a7ae8798
@@ -5042,10 +3776,10 @@ elsewhere in this document.  For example:
 #+begin_src emacs-lisp
 (modus-themes-with-colors
   (custom-set-faces
-   `(fill-column-indicator ((,class :foreground ,bg-active)))))
+   `(fill-column-indicator ((,c :foreground ,bg-active)))))
 #+end_src
 
-[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the 
themes' palette]].
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with 
modus-themes-with-colors]].
 
 To make the line thicker, set the height to be equal to the base font
 size instead of the one pixel we use.  This is done by specifying a rate
@@ -5055,7 +3789,7 @@ For example:
 #+begin_src emacs-lisp
 (modus-themes-with-colors
   (custom-set-faces
-   `(fill-column-indicator ((,class :height 1.0 :background ,bg-inactive 
:foreground ,bg-inactive)))))
+   `(fill-column-indicator ((,c :height 1.0 :background ,bg-inactive 
:foreground ,bg-inactive)))))
 #+end_src
 
 ** Note on highlight-parentheses.el
@@ -5113,14 +3847,14 @@ found):
 
         ;; Here we set color combinations that involve both a background
         ;; and a foreground value.
-        (setq highlight-parentheses-background-colors (list cyan-refine-bg
-                                                            magenta-refine-bg
-                                                            green-refine-bg
-                                                            yellow-refine-bg)
-              highlight-parentheses-colors (list cyan-refine-fg
-                                                 magenta-refine-fg
-                                                 green-refine-fg
-                                                 yellow-refine-fg))
+        (setq highlight-parentheses-background-colors (list bg-cyan-intense
+                                                            bg-magenta-intense
+                                                            bg-green-intense
+                                                            bg-yellow-intense)
+              highlight-parentheses-colors (list cyan
+                                                 magenta
+                                                 green
+                                                 yellow))
 
       ;; And here we pass only foreground colors while disabling any
       ;; backgrounds.
@@ -5160,14 +3894,14 @@ implementation:
 
         ;; Here we set color combinations that involve both a background
         ;; and a foreground value.
-        (setq highlight-parentheses-background-colors (list cyan-refine-bg
-                                                            magenta-refine-bg
-                                                            green-refine-bg
-                                                            yellow-refine-bg)
-              highlight-parentheses-colors (list cyan-refine-fg
-                                                 magenta-refine-fg
-                                                 green-refine-fg
-                                                 yellow-refine-fg))
+        (setq highlight-parentheses-background-colors (list bg-cyan-intense
+                                                            bg-magenta-intense
+                                                            bg-green-intense
+                                                            bg-yellow-intense)
+              highlight-parentheses-colors (list cyan
+                                                 magenta
+                                                 green
+                                                 yellow))
 
       ;; And here we pass only foreground colors while disabling any
       ;; backgrounds.
@@ -5221,7 +3955,7 @@ Users who might prefer to fall below the minimum 7:1 
contrast ratio in
 relative luminance (the accessibility target we conform with), can opt
 to configure the relevant faces on their own.
 
-[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the 
themes' palette]].
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with 
modus-themes-with-colors]].
 
 This example uses more vivid background colors, though it comes at the
 very high cost of degraded legibility.
@@ -5229,14 +3963,14 @@ very high cost of degraded legibility.
 #+begin_src emacs-lisp
 (modus-themes-with-colors
   (custom-set-faces
-   `(mmm-cleanup-submode-face ((,class :background ,yellow-refine-bg)))
-   `(mmm-code-submode-face ((,class :background ,bg-active)))
-   `(mmm-comment-submode-face ((,class :background ,blue-refine-bg)))
-   `(mmm-declaration-submode-face ((,class :background ,cyan-refine-bg)))
-   `(mmm-default-submode-face ((,class :background ,bg-alt)))
-   `(mmm-init-submode-face ((,class :background ,magenta-refine-bg)))
-   `(mmm-output-submode-face ((,class :background ,red-refine-bg)))
-   `(mmm-special-submode-face ((,class :background ,green-refine-bg)))))
+   `(mmm-cleanup-submode-face ((,c :background ,bg-yellow-intense)))
+   `(mmm-code-submode-face ((,c :background ,bg-inactive)))
+   `(mmm-comment-submode-face ((,c :background ,bg-blue-intense)))
+   `(mmm-declaration-submode-face ((,c :background ,bg-cyan-intense)))
+   `(mmm-default-submode-face ((,c :background ,bg-dim)))
+   `(mmm-init-submode-face ((,c :background ,bg-magenta-intense)))
+   `(mmm-output-submode-face ((,c :background ,bg-red-intense)))
+   `(mmm-special-submode-face ((,c :background ,bg-green-intense)))))
 #+end_src
 
 ** Note on prism.el
@@ -5250,13 +3984,13 @@ implements an alternative to the typical coloration of 
code.  Instead of
 highlighting the syntactic constructs, it applies color to different
 levels of depth in the code structure.
 
-As {{{file(prism.el)}}} offers a broad range of customizations, we cannot
-style it directly at the theme level: that would run contrary to the
-spirit of the package.  Instead, we may offer preset color schemes.
-Those should offer a starting point for users to adapt to their needs.
+As =prism.el= offers a broad range of customizations, we cannot style
+it directly at the theme level: that would run contrary to the spirit
+of the package.  Instead, we may offer preset color schemes.  Those
+should offer a starting point for users to adapt to their needs.
 
 In the following code snippets, we employ the ~modus-themes-with-colors~
-macro: [[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using 
the themes' palette]].
+macro: [[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code 
with modus-themes-with-colors]].
 
 These are the minimum recommended settings with 16 colors:
 
@@ -5269,20 +4003,20 @@ These are the minimum recommended settings with 16 
colors:
   :colors (modus-themes-with-colors
             (list fg-main
                   magenta
-                  cyan-alt-other
-                  magenta-alt-other
+                  cyan-cooler
+                  magenta-cooler
                   blue
-                  magenta-alt
-                  cyan-alt
-                  red-alt-other
+                  magenta-warmer
+                  cyan-warmer
+                  red-cooler
                   green
                   fg-main
                   cyan
                   yellow
-                  blue-alt
-                  red-alt
-                  green-alt-other
-                  fg-special-warm)))
+                  blue-warmer
+                  red-warmer
+                  green-cooler
+                  yellow-faint)))
 #+end_src
 
 With 8 colors:
@@ -5296,11 +4030,11 @@ With 8 colors:
   :colors (modus-themes-with-colors
             (list blue
                   magenta
-                  magenta-alt-other
-                  cyan-alt-other
+                  magenta-cooler
+                  cyan-cooler
                   fg-main
-                  blue-alt
-                  red-alt-other
+                  blue-warmer
+                  red-cooler
                   cyan)))
 #+end_src
 
@@ -5316,8 +4050,8 @@ to the themes' default aesthetic:
   :colors (modus-themes-with-colors
             (list blue
                   magenta
-                  magenta-alt-other
-                  green-alt)))
+                  magenta-cooler
+                  green-warmer)))
 #+end_src
 
 If you need to apply desaturation and lightening, you can use what the
@@ -5330,47 +4064,11 @@ examples with the 4, 8, 16 colors):
   :lightens (cl-loop for i from 0 below 16 collect (* i 2.5))
   :colors (modus-themes-with-colors
             (list fg-main
-                  cyan-alt-other
-                  magenta-alt-other
+                  cyan-cooler
+                  magenta-cooler
                   magenta)))
 #+end_src
 
-** Note on god-mode.el
-:properties:
-:alt_title: Note for god-mode
-:custom_id: h:4da1d515-3e05-47ef-9e45-8251fc7e986a
-:end:
-
-The ~god-mode~ library does not provide faces that could be configured by
-the Modus themes.  Users who would like to get some visual feedback on
-the status of {{{kbd(M-x god-mode)}}} are instead encouraged by upstream to
-set up their own configurations, such as by changing the ~mode-line~ face
-([[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]]).  This 
is an adaptation of the approach
-followed in the upstream README:
-
-#+begin_src emacs-lisp
-(defun my-god-mode-update-mode-line ()
-  "Make `mode-line' blue if God local mode is active."
-  (modus-themes-with-colors
-    (if god-local-mode
-        (set-face-attribute 'mode-line nil
-                            :foreground blue-active
-                            :background bg-active-accent
-                            :box blue)
-      (set-face-attribute 'mode-line nil
-                          :foreground fg-active
-                          :background bg-active
-                          :box fg-alt))))
-
-(add-hook 'post-command-hook 'my-god-mode-update-mode-line)
-#+end_src
-
-We employ the ~modus-themes-with-colors~ which provides access to color
-variables defined by the active theme.  Its use is covered elsewhere in
-this manual ([[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale 
using the themes' palette]]).  As for the
-attributes that can be passed to each face, start by consulting the
-documentation string of ~set-face-attribute~.
-
 ** Note on company-mode overlay pop-up
 :properties:
 :custom_id: h:20cef8c4-d11f-4053-8b2c-2872925780b1
@@ -5387,6 +4085,8 @@ instead of overlays.[fn::
 https://github.com/company-mode/company-mode/issues/1010][fn::
 https://github.com/tumashu/company-posframe/]
 
+Also consider the ~corfu~ package.
+
 ** Note on ERC escaped color sequences
 :properties:
 :custom_id: h:98bdf319-1e32-4469-8a01-771200fba65c
@@ -5500,38 +4200,6 @@ would be a good baseline for many themes and/or user 
configurations.
 Our target is the highest of the sort, though we do not demand that
 everyone conforms with it.
 
-** Note on Helm grep
-:properties:
-:custom_id: h:d28879a2-8e4b-4525-986e-14c0f873d229
-:end:
-
-There is one face from the Helm package that is meant to highlight the
-matches of a grep or grep-like command (=ag= or =ripgrep=).  It is
-~helm-grep-match~.  However, this face can only apply when the user does
-not pass =--color=always= as a command-line option for their command.
-
-Here is the docstring for that face, which is defined in the
-{{{file(helm-grep.el)}}} library (you can always visit the source code with
-{{{kbd(M-x find-library)}}}).
-
-#+begin_quote
-Face used to highlight grep matches.  Have no effect when grep backend
-use "--color="
-#+end_quote
-
-The user must either remove =--color= from the flags passed to the grep
-function, or explicitly use =--color=never= (or equivalent).  Helm
-provides user-facing customization options for controlling the grep
-function's parameters, such as ~helm-grep-default-command~ and
-~helm-grep-git-grep-command~.
-
-When =--color=always= is in effect, the grep output will use red text in
-bold letter forms to present the matching part in the list of
-candidates.  That style still meets the contrast ratio target of >= 7:1
-(accessibility standard WCAG AAA), because it draws the reference to
-ANSI color number 1 (red) from the already-supported array of
-~ansi-color-names-vector~.
-
 ** Note on pdf-tools link hints
 :properties:
 :custom_id: h:2659d13e-b1a5-416c-9a89-7c3ce3a76574
@@ -5849,15 +4517,15 @@ A good theme is one that does so with consistency, 
though not
 uniformity.
 
 In practical terms, a color scheme is what one uses when, for example,
-they edit the first sixteen escape sequences of a terminal emulator to
-the hues of their preference.  The terminal offers the option to choose,
-say, the exact value of what counts as "red", but does not provide the
-means to control where that is mapped to and whether it should also have
-other qualities such as a bold weight for the underlying text or an
-added background color.  In contradistinction, Emacs uses constructs
-known as "faces" which allow the user/developer to specify where a given
-color will be used and whether it should be accompanied by other
-typographic or stylistic attributes.
+they replace the first sixteen escape sequences of a terminal emulator
+with color values of their preference.  The terminal offers the option
+to choose, say, the exact value of what counts as "red", but does not
+provide the means to control where that is mapped to and whether it
+should also have other qualities such as a bold weight for the
+underlying text or an added background color.  In contradistinction,
+Emacs uses constructs known as "faces" which allow the user/developer
+to specify where a given color will be used and whether it should be
+accompanied by other typographic or stylistic attributes.
 
 By configuring the multitude of faces on offer we thus control both
 which colors are applied and how they appear in their context.  When a
@@ -5876,9 +4544,7 @@ it is already understood that one must follow the 
indicator or headline
 to view its contents and (ii) underlining everything would make the
 interface virtually unusable.
 
-[[#h:5808be52-361a-4d18-88fd-90129d206f9b][Option for links]].
-
-Again, one must exercise judgment in order to avoid discrimination,
+Again, one must exercise judgement in order to avoid discrimination,
 where "discrimination" refers to:
 
 + The treatment of substantially different magnitudes as if they were of
@@ -5888,9 +4554,9 @@ where "discrimination" refers to:
 
 (To treat similar things differently; to treat dissimilar things alike.)
 
-If, in other words, one was to enforce uniformity without accounting for
-the particular requirements of each case---the contextual demands for
-usability beyond matters of color---they would be making a
+If, in other words, one is to enforce uniformity without accounting
+for the particular requirements of each case---the contextual demands
+for usability beyond matters of color---they are making a
 not-so-obvious error of treating different cases as if they were the
 same.
 
@@ -5923,13 +4589,13 @@ doing so would run contrary to how this project is 
maintained where
 details matter greatly.
 
 Each program has its own requirements so it won't always be
-possible---or indeed desirable---to have 1:1 correspondence between what
-applies to Emacs and what should be done elsewhere.  No port should ever
-strive to be a faithful copy of the Emacs implementation, as no other
-program is an Emacs equivalent, but instead try to follow the spirit of
-the design.  For example, some of the customization options accept a
-list as their value, or an alist, which may not be possible to reproduce
-on other platforms.
+possible---or indeed desirable---to have 1:1 correspondence between
+what applies to Emacs and what should be done elsewhere.  No port
+should ever strive to be a copy of the Emacs implementation, as no
+other program is an Emacs equivalent, but instead try to follow the
+spirit of the design.  For example, some of the customization options
+accept a list as their value, or an alist, which may not be possible
+to reproduce on other platforms.
 
 [[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization options]].
 
@@ -5939,10 +4605,10 @@ standards are not compromised and (ii) the overall 
character of the
 themes remains consistent.
 
 The former criterion should be crystal clear as it pertains to the
-scientific foundations of the themes: high legibility and taking care of
-the needs of users with red-green color deficiency (deuteranopia) by
-avoiding red+green color coding paradigms and/or by providing red+blue
-variants.
+scientific foundations of the themes: high legibility and taking care
+of the needs of users with red-green color deficiency (deuteranopia)
+by avoiding red+green color coding paradigms and/or by providing
+yellow+blue variants ([[#h:f0f3dbcb-602d-40cf-b918-8f929c441baf][Overview]]).
 
 The latter criterion is the "je ne sais quoi" of the artistic aspect of
 the themes, which is partially fleshed out in this manual.
@@ -5951,7 +4617,7 @@ the themes, which is partially fleshed out in this manual.
 
 With regard to the artistic aspect (where "art" qua skill may amount to
 an imprecise science), there is no hard-and-fast rule in effect as it
-requires one to exercise discretion and make decisions based on
+requires one to exercize discretion and make decisions based on
 context-dependent information or constraints.  As is true with most
 things in life, when in doubt, do not cling on to the letter of the law
 but try to understand its spirit.
@@ -5980,13 +4646,17 @@ in which you can contribute to their ongoing 
development.
 :end:
 #+cindex: Sources of the themes
 
-The ~modus-operandi~ and ~modus-vivendi~ themes are built into Emacs 28.
-
-The source code of the themes is 
[[https://git.sr.ht/~protesilaos/modus-themes][available on SourceHut]].  Or 
check the
-[[https://gitlab.com/protesilaos/modus-themes/][GitLab mirror (former main 
source)]] and the [[https://github.com/protesilaos/modus-themes/][GitHub 
mirror]].
-
-An HTML version of this manual is provided as an extension of the
-[[https://protesilaos.com/emacs/modus-themes/][author's personal website]] 
(does not rely on any non-free code).
++ Package name (GNU ELPA): ~modus-themes~
++ Official manual: <https://protesilaos.com/emacs/modus-themes>
++ Change log: <https://protesilaos.com/emacs/modus-themes-changelog>
++ Color palette: <https://protesilaos.com/emacs/modus-themes-colors>
++ Sample pictures: <https://protesilaos.com/emacs/modus-themes-pictures>
++ Git repo on SourceHut: <https://git.sr.ht/~protesilaos/modus-themes>
+  - Mirrors:
+    + GitHub: <https://github.com/protesilaos/modus-themes>
+    + GitLab: <https://gitlab.com/protesilaos/modus-themes>
++ Mailing list: <https://lists.sr.ht/~protesilaos/modus-themes>
++ Backronym: My Old Display Unexpectedly Sharpened ... themes
 
 ** Issues you can help with
 :properties:
@@ -5994,10 +4664,8 @@ An HTML version of this manual is provided as an 
extension of the
 :end:
 #+cindex: Contributing
 
-#+findex: modus-themes-report-bug
 A few tasks you can help with by sending an email to the general
-[[https://lists.sr.ht/~protesilaos/modus-themes][modus-themes public mailing 
list]] (or use the command
-~modus-themes-report-bug~).
+[[https://lists.sr.ht/~protesilaos/modus-themes][modus-themes public mailing 
list]].
 
 + Suggest refinements to packages that are covered.
 + Report packages not covered thus far.
@@ -6014,10 +4682,6 @@ It is preferable that your feedback includes some 
screenshots, GIFs, or
 short videos, as well as further instructions to reproduce a given
 setup.  Though this is not a requirement.
 
-#+findex: modus-themes-version
-Also consider mentioning the version of the themes you are using, such
-as by invoking the command ~modus-themes-version~.
-
 Whatever you do, bear in mind the overarching objective of the Modus
 themes: to keep a contrast ratio that is greater or equal to 7:1 between
 background and foreground colors.  If a compromise is ever necessary
@@ -6097,45 +4761,48 @@ The Modus themes are a collective effort.  Every bit of 
work matters.
 
 + Author/maintainer :: Protesilaos Stavrou.
 
-+ Contributions to code or documentation :: Alex Griffin, Anders
-  Johansson, Antonio Ruiz, Basil L.{{{space()}}} Contovounesios, Björn
-  Lindström, Carlo Zancanaro, Christian Tietze, Daniel Mendler, Eli
-  Zaretskii, Fritz Grabo, Illia Ostapyshyn, Kévin Le Gouguec, Koen van
-  Greevenbroek, Kostadin Ninev, Madhavan Krishnan, Manuel Giraud,
-  Markus Beppler, Matthew Stevenson, Mauro Aranda, Nicolas De
-  Jaeghere, Paul David, Philip Kaludercic, Pierre Téchoueyres, Rudolf
-  Adamkovič, Stephen Gildea, Shreyas Ragavan, Stefan Kangas, Utkarsh
-  Singh, Vincent Murphy, Xinglu Chen, Yuanchen Xie, okamsn.
++ Contributions to code or documentation :: Aleksei Gusev, Alex
+  Griffin, Anders Johansson, Antonio Ruiz, Basil L.{{{space()}}}
+  Contovounesios, Björn Lindström, Carlo Zancanaro, Christian Tietze,
+  Daniel Mendler, Eli Zaretskii, Fritz Grabo, Illia Ostapyshyn, Kévin
+  Le Gouguec, Koen van Greevenbroek, Kostadin Ninev, Madhavan
+  Krishnan, Manuel Giraud, Markus Beppler, Matthew Stevenson, Mauro
+  Aranda, Nicolas De Jaeghere, Paul David, Philip Kaludercic, Pierre
+  Téchoueyres, Rudolf Adamkovič, Stephen Gildea, Shreyas Ragavan,
+  Stefan Kangas, Utkarsh Singh, Vincent Murphy, Xinglu Chen, Yuanchen
+  Xie, okamsn.
 
 + Ideas and user feedback :: Aaron Jensen, Adam Porter, Adam Spiers,
-  Adrian Manea, Alex Griffin, Alex Koen, Alex Peitsinis, Alexey
-  Shmalko, Alok Singh, Anders Johansson, André Alexandre Gomes, Andrew
-  Tropin, Antonio Hernández Blas, Arif Rezai, Augusto Stoffel, Basil
-  L.{{{space()}}} Contovounesios, Burgess Chang, Christian Tietze,
-  Christopher Dimech, Christopher League, Damien Cassou, Daniel
-  Mendler, Dario Gjorgjevski, David Edmondson, Davor Rotim, Divan
-  Santana, Eliraz Kedmi, Emanuele Michele Alberto Monterosso, Farasha
-  Euker, Feng Shu, Gautier Ponsinet, Gerry Agbobada, Gianluca Recchia,
-  Gonçalo Marrafa, Guilherme Semente, Gustavo Barros, Hörmetjan
-  Yiltiz, Ilja Kocken, Iris Garcia, Ivan Popovych, Jeremy Friesen,
-  Jerry Zhang, Johannes Grødem, John Haman, Jonas Collberg, Jorge
-  Morais, Joshua O'Connor, Julio C. Villasante, Kenta Usami, Kevin
-  Fleming, Kévin Le Gouguec, Kevin Kainan Li, Kostadin Ninev, Len
+  Adrian Manea, Aleksei Pirogov, Alex Griffin, Alex Koen, Alex
+  Peitsinis, Alexey Shmalko, Alok Singh, Anders Johansson, André
+  Alexandre Gomes, Andrew Tropin, Antonio Hernández Blas, Arif Rezai,
+  Augusto Stoffel, Basil L.{{{space()}}} Contovounesios, Burgess
+  Chang, Charlotte Van Petegem, Christian Tietze, Christopher Dimech,
+  Christopher League, Damien Cassou, Daniel Mendler, Dario
+  Gjorgjevski, David Edmondson, Davor Rotim, Divan Santana, Eliraz
+  Kedmi, Emanuele Michele Alberto Monterosso, Farasha Euker, Feng Shu,
+  Gautier Ponsinet, Gerry Agbobada, Gianluca Recchia, Gonçalo Marrafa,
+  Guilherme Semente, Gustavo Barros, Hörmetjan Yiltiz, Ilja Kocken,
+  Iris Garcia, Ivan Popovych, James Ferguson, Jeremy Friesen, Jerry
+  Zhang, Johannes Grødem, John Haman, Jonas Collberg, Jorge Morais,
+  Joshua O'Connor, Julio C. Villasante, Kenta Usami, Kevin Fleming,
+  Kévin Le Gouguec, Kevin Kainan Li, Kostadin Ninev, Laith Bahodi, Len
   Trigg, Lennart C. Karssen, Luis Miguel Castañeda, Magne Hov, Manuel
   Uberti, Mark Bestley, Mark Burton, Mark Simpson, Markus Beppler,
-  Matt Armstrong, Matthias Fuchs, Mauro Aranda, Maxime Tréca, Michael
-  Goldenberg, Morgan Smith, Morgan Willcock, Murilo Pereira, Nicky van
-  Foreest, Nicolas De Jaeghere, Pablo Stafforini, Paul Poloskov,
-  Pengji Zhang, Pete Kazmier, Peter Wu, Philip Kaludercic, Pierre
-  Téchoueyres, Przemysław Kryger, Robert Hepple, Roman Rudakov, Ryan
-  Phillips, Rytis Paškauskas, Rudolf Adamkovič, Sam Kleinman, Samuel
-  Culpepper, Saša Janiška, Shreyas Ragavan, Simon Pugnet, Tassilo
-  Horn, Thibaut Verron, Thomas Heartman, Togan Muftuoglu, Tony Zorman,
-  Trey Merkley, Tomasz Hołubowicz, Toon Claes, Uri Sharf, Utkarsh
-  Singh, Vincent Foley.  As well as users: Ben, CsBigDataHub1, Emacs
-  Contrib, Eugene, Fourchaux, Fredrik, Moesasji, Nick, Summer Emacs,
-  TheBlob42, Trey, bepolymathe, bit9tream, derek-upham, doolio,
-  fleimgruber, gitrj95, iSeeU, jixiuf, okamsn, pRot0ta1p.
+  Matt Armstrong, Matthias Fuchs, Mattias Engdegård, Mauro Aranda,
+  Maxime Tréca, Michael Goldenberg, Morgan Smith, Morgan Willcock,
+  Murilo Pereira, Nicky van Foreest, Nicolas De Jaeghere, Pablo
+  Stafforini, Paul Poloskov, Pengji Zhang, Pete Kazmier, Peter Wu,
+  Philip Kaludercic, Pierre Téchoueyres, Przemysław Kryger, Robert
+  Hepple, Roman Rudakov, Ryan Phillips, Rytis Paškauskas, Rudolf
+  Adamkovič, Sam Kleinman, Samuel Culpepper, Saša Janiška, Shreyas
+  Ragavan, Simon Pugnet, Tassilo Horn, Thibaut Verron, Thomas
+  Heartman, Togan Muftuoglu, Tony Zorman, Trey Merkley, Tomasz
+  Hołubowicz, Toon Claes, Uri Sharf, Utkarsh Singh, Vincent Foley.  As
+  well as users: Ben, CsBigDataHub1, Emacs Contrib, Eugene, Fourchaux,
+  Fredrik, Moesasji, Nick, Summer Emacs, TheBlob42, Trey, bepolymathe,
+  bit9tream, derek-upham, doolio, fleimgruber, gitrj95, iSeeU, jixiuf,
+  okamsn, pRot0ta1p, soaringbird, tumashu, wakamenod.
 
 + Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii,
   Glenn Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core
@@ -6153,42 +4820,6 @@ themes' design and/or aspects of their functionality.
 
 All errors are my own.
 
-* Other notes about the project
-:properties:
-:custom_id: h:13752581-4378-478c-af17-165b6e76bc1b
-:end:
-#+cindex: Development notes
-
-If you are curious about the principles that govern the development of
-this project read the essay 
[[https://protesilaos.com/codelog/2020-03-17-design-modus-themes-emacs/][On the 
design of the Modus themes]]
-(2020-03-17).
-
-Here are some more publications for those interested in the kind of work
-that goes into this project (sometimes the commits also include details
-of this sort):
-
-+ 
[[https://protesilaos.com/codelog/2020-05-10-modus-operandi-palette-review/][Modus
 Operandi theme subtle palette review]] (2020-05-10)
-+ 
[[https://protesilaos.com/codelog/2020-06-13-modus-vivendi-palette-review/][Modus
 Vivendi theme subtle palette review]] (2020-06-13)
-+ 
[[https://protesilaos.com/codelog/2020-07-04-modus-themes-faint-colours/][Modus 
themes: new "faint syntax" option]] (2020-07-04)
-+ 
[[https://protesilaos.com/codelog/2020-07-08-modus-themes-nuanced-colours/][Modus
 themes: major review of "nuanced" colours]] (2020-07-08)
-+ 
[[https://protesilaos.com/codelog/2020-09-14-modus-themes-review-blues/][Modus 
themes: review of blue colours]] (2020-09-14)
-+ 
[[https://protesilaos.com/codelog/2020-12-27-modus-themes-review-rainbow-delimiters/][Modus
 themes: review rainbow-delimiters faces]] (2020-12-27)
-+ 
[[https://protesilaos.com/codelog/2021-01-11-modus-themes-review-select-faint-colours/][Modus
 themes: review of select "faint" colours]] (2021-01-11)
-+ 
[[https://protesilaos.com/codelog/2021-02-25-modus-themes-diffs-deuteranopia/][The
 Modus themes now cover deuteranopia in diffs]] (2021-02-25)
-+ 
[[https://protesilaos.com/codelog/2021-06-02-modus-themes-org-agenda/][Introducing
 the variable modus-themes-org-agenda]] (2021-06-02)
-+ 
[[https://protesilaos.com/codelog/2022-01-02-review-modus-themes-org-habit-colours/][Modus
 themes: review of the org-habit graph colours]] (2022-01-02)
-+ [[https://protesilaos.com/codelog/2022-01-03-modus-themes-port-faq/][Re: 
VSCode or Vim ports of the Emacs modus-themes?]] (2022-01-03)
-+ 
[[https://protesilaos.com/codelog/2022-04-20-modus-themes-case-study-avy/][Modus
 themes: case study on Avy faces and colour combinations]] (2022-04-20)
-+ 
[[https://protesilaos.com/codelog/2022-04-21-modus-themes-colour-theory/][Emacs:
 colour theory and techniques used in the Modus themes]] (2022-04-21)
-
-And here are the canonical sources of this project:
-
-+ Manual :: <https://protesilaos.com/emacs/modus-themes>
-+ Change Log :: <https://protesilaos.com/emacs/modus-themes-changelog>
-+ Screenshots :: <https://protesilaos.com/emacs/modus-themes-pictures>
-+ Git repository :: https://git.sr.ht/~protesilaos/modus-themes
-+ Mailing list :: https://lists.sr.ht/~protesilaos/modus-themes
-
 * GNU Free Documentation License
 :properties:
 :appendix: t
diff --git a/doc/misc/newsticker.texi b/doc/misc/newsticker.texi
index fec571d9233..d71895da5db 100644
--- a/doc/misc/newsticker.texi
+++ b/doc/misc/newsticker.texi
@@ -15,7 +15,7 @@ This manual documents Newsticker, a feed reader for Emacs.  It
 corresponds to Emacs version @value{EMACSVER}.
 
 @noindent
-Copyright @copyright{} 2004--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2004--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/nxml-mode.texi b/doc/misc/nxml-mode.texi
index 206da823352..a19c6a8db6b 100644
--- a/doc/misc/nxml-mode.texi
+++ b/doc/misc/nxml-mode.texi
@@ -9,7 +9,7 @@
 This manual documents nXML mode, an Emacs major mode for editing
 XML with RELAX NG support.
 
-Copyright @copyright{} 2007--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/octave-mode.texi b/doc/misc/octave-mode.texi
index d7ea54198ad..9f82af45203 100644
--- a/doc/misc/octave-mode.texi
+++ b/doc/misc/octave-mode.texi
@@ -6,7 +6,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 1996--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1996--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/org-setup.org b/doc/misc/org-setup.org
index 561f05d7d97..e6ace716077 100644
--- a/doc/misc/org-setup.org
+++ b/doc/misc/org-setup.org
@@ -1,6 +1,6 @@
 # SETUPFILE for Org manual
 
-# Copyright (C) 2021-2022 Free Software Foundation, Inc.
+# Copyright (C) 2021-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/doc/misc/org.org b/doc/misc/org.org
index c6b8e73fd1b..ed3eb0626f2 100644
--- a/doc/misc/org.org
+++ b/doc/misc/org.org
@@ -22305,7 +22305,7 @@ that are mentioned in the manual.  For a more complete 
list, use
 
 This manual is for Org version {{{version}}}.
 
-Copyright \copy 2004--2022 Free Software Foundation, Inc.
+Copyright \copy 2004--2023 Free Software Foundation, Inc.
 
 #+begin_quote
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/pcl-cvs.texi b/doc/misc/pcl-cvs.texi
index 80c130fb8e9..b64eaf2667e 100644
--- a/doc/misc/pcl-cvs.texi
+++ b/doc/misc/pcl-cvs.texi
@@ -7,7 +7,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 1991--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1991--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/pgg.texi b/doc/misc/pgg.texi
index 304c9c8ec88..ea69499a140 100644
--- a/doc/misc/pgg.texi
+++ b/doc/misc/pgg.texi
@@ -10,7 +10,7 @@
 This file describes PGG @value{VERSION}, an Emacs interface to various
 PGP implementations.
 
-Copyright @copyright{} 2001, 2003--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2001, 2003--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/rcirc.texi b/doc/misc/rcirc.texi
index 37d62c7c41a..6b10d1ab2a4 100644
--- a/doc/misc/rcirc.texi
+++ b/doc/misc/rcirc.texi
@@ -6,7 +6,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2006--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2006--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/reftex.texi b/doc/misc/reftex.texi
index 9c543a4c0fb..72c4283aa46 100644
--- a/doc/misc/reftex.texi
+++ b/doc/misc/reftex.texi
@@ -45,7 +45,7 @@ This manual documents @RefTeX{} (version @value{VERSION}), a 
package
 to do labels, references, citations and indices for LaTeX documents
 with Emacs.
 
-Copyright @copyright{} 1997--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1997--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/remember.texi b/doc/misc/remember.texi
index 80bb6966e2b..03bc4a0e868 100644
--- a/doc/misc/remember.texi
+++ b/doc/misc/remember.texi
@@ -10,7 +10,7 @@
 @copying
 This manual is for Remember Mode, as distributed with Emacs @value{EMACSVER}.
 
-Copyright @copyright{} 2001, 2004--2005, 2007--2022 Free Software
+Copyright @copyright{} 2001, 2004--2005, 2007--2023 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/sasl.texi b/doc/misc/sasl.texi
index 4ead5a55635..89d32b8e916 100644
--- a/doc/misc/sasl.texi
+++ b/doc/misc/sasl.texi
@@ -9,7 +9,7 @@
 @copying
 This file describes the Emacs SASL library, version @value{VERSION}.
 
-Copyright @copyright{} 2000, 2004--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2000, 2004--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/sc.texi b/doc/misc/sc.texi
index 3f6dcd022a5..9bf7c36b481 100644
--- a/doc/misc/sc.texi
+++ b/doc/misc/sc.texi
@@ -15,7 +15,7 @@
 This document describes Supercite, an Emacs package for citing and
 attributing replies to mail and news messages.
 
-Copyright @copyright{} 1993, 2001--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1993, 2001--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -404,7 +404,7 @@ from the alist with the @code{sc-mail-field} function.  
Thus, if the
 following fields were present in the original article:
 
 @example
-Date:@: 08 April 1991, 17:32:09 EST
+Date:@: 08 Apr 1991 17:32:09 -0500
 Subject:@: Better get out your asbestos suit
 @end example
 
@@ -415,7 +415,7 @@ then, the following lisp constructs return:
 
 @example
 (sc-mail-field "date")
-==> "08 April 1991, 17:32:09 EST"
+==> "08 Apr 1991 17:32:09 -0500"
 
 (sc-mail-field "subject")
 ==> "Better get out your asbestos suit"
diff --git a/doc/misc/sem-user.texi b/doc/misc/sem-user.texi
index 36e09b152e5..d7995550e2a 100644
--- a/doc/misc/sem-user.texi
+++ b/doc/misc/sem-user.texi
@@ -1,5 +1,5 @@
 @c This is part of the Semantic manual.
-@c Copyright (C) 1999--2005, 2007, 2009--2022 Free Software Foundation,
+@c Copyright (C) 1999--2005, 2007, 2009--2023 Free Software Foundation,
 @c Inc.
 @c See file semantic.texi for copying conditions.
 
diff --git a/doc/misc/semantic.texi b/doc/misc/semantic.texi
index b23e4c36fe3..af3619a75a6 100644
--- a/doc/misc/semantic.texi
+++ b/doc/misc/semantic.texi
@@ -25,7 +25,7 @@
 @copying
 This manual documents the Semantic library and utilities.
 
-Copyright @copyright{} 1999--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/ses.texi b/doc/misc/ses.texi
index e3ef11ebc02..15722056f33 100644
--- a/doc/misc/ses.texi
+++ b/doc/misc/ses.texi
@@ -12,7 +12,7 @@
 @copying
 This file documents @acronym{SES}: the Simple Emacs Spreadsheet.
 
-Copyright @copyright{} 2002--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2002--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/sieve.texi b/doc/misc/sieve.texi
index 77a393192c2..639a2daee02 100644
--- a/doc/misc/sieve.texi
+++ b/doc/misc/sieve.texi
@@ -10,7 +10,7 @@
 @copying
 This file documents the Emacs Sieve package, for server-side mail filtering.
 
-Copyright @copyright{} 2001--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2001--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/smtpmail.texi b/doc/misc/smtpmail.texi
index 2e0381138f1..99363483827 100644
--- a/doc/misc/smtpmail.texi
+++ b/doc/misc/smtpmail.texi
@@ -4,7 +4,7 @@
 @include docstyle.texi
 @syncodeindex vr fn
 @copying
-Copyright @copyright{} 2003--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2003--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/speedbar.texi b/doc/misc/speedbar.texi
index 13b709bfc8b..aae9ab762da 100644
--- a/doc/misc/speedbar.texi
+++ b/doc/misc/speedbar.texi
@@ -5,7 +5,7 @@
 @syncodeindex fn cp
 
 @copying
-Copyright @copyright{} 1999--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/srecode.texi b/doc/misc/srecode.texi
index d7356fef58a..84173f0e0f6 100644
--- a/doc/misc/srecode.texi
+++ b/doc/misc/srecode.texi
@@ -16,7 +16,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2007--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex
index cfc77a84ea8..7c4520637a7 100644
--- a/doc/misc/texinfo.tex
+++ b/doc/misc/texinfo.tex
@@ -3,9 +3,9 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2022-11-12.22}
+\def\texinfoversion{2022-12-19.22}
 %
-% Copyright 1985, 1986, 1988, 1990-2022 Free Software Foundation, Inc.
+% Copyright 1985--1986, 1988, 1990--2023 Free Software Foundation, Inc.
 %
 % This texinfo.tex file is free software: you can redistribute it and/or
 % modify it under the terms of the GNU General Public License as
@@ -591,6 +591,9 @@
 % @/ allows a line break.
 \let\/=\allowbreak
 
+% @- allows explicit insertion of hyphenation points
+\def\-{\discretionary{\normaldash}{}{}}%
+
 % @. is an end-of-sentence period.
 \def\.{.\spacefactor=\endofsentencespacefactor\space}
 
@@ -1537,9 +1540,10 @@ output) for that.)}
     \next}
   \def\makelink{\addtokens{\toksB}%
     {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
-  \def\pdflink#1{%
+  \def\pdflink#1{\pdflinkpage{#1}{#1}}%
+  \def\pdflinkpage#1#2{%
     \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
-    \setcolor{\linkcolor}#1\endlink}
+    \setcolor{\linkcolor}#2\endlink}
   \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
 \else
   % non-pdf mode
@@ -1786,10 +1790,11 @@ output) for that.)}
     \next}
   \def\makelink{\addtokens{\toksB}%
     {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
-  \def\pdflink#1{%
+  \def\pdflink#1{\pdflinkpage{#1}{#1}}%
+  \def\pdflinkpage#1#2{%
     \special{pdf:bann << /Border [0 0 0]
       /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}%
-    \setcolor{\linkcolor}#1\endlink}
+    \setcolor{\linkcolor}#2\endlink}
   \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
 %
   %
@@ -2134,6 +2139,11 @@ end
     \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
   }%
 \fi\fi
+%
+% This is what gets called when #5 of \setfont is empty.
+\let\cmap\gobble
+%
+% (end of cmaps)
 
 
 % Set the font macro #1 to the font named \fontprefix#2.
@@ -2149,11 +2159,10 @@ end
 \def\setfont#1#2#3#4#5{%
   \font#1=\fontprefix#2#3 scaled #4
   \csname cmap#5\endcsname#1%
+  \ifx#2\ttshape\hyphenchar#1=-1 \fi
+  \ifx#2\ttbshape\hyphenchar#1=-1 \fi
+  \ifx#2\ttslshape\hyphenchar#1=-1 \fi
 }
-% This is what gets called when #5 of \setfont is empty.
-\let\cmap\gobble
-%
-% (end of cmaps)
 
 % Use cm as the default font prefix.
 % To specify the font prefix, you must define \fontprefix
@@ -2815,13 +2824,6 @@ end
 % @sansserif, explicit sans.
 \def\sansserif#1{{\sf #1}}
 
-% We can't just use \exhyphenpenalty, because that only has effect at
-% the end of a paragraph.  Restore normal hyphenation at the end of the
-% group within which \nohyphenation is presumably called.
-%
-\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
-\def\restorehyphenation{\hyphenchar\font = `- }
-
 \newif\iffrenchspacing
 \frenchspacingfalse
 
@@ -2890,27 +2892,29 @@ end
     % Switch to typewriter.
     \tt
     %
-    % But `\ ' produces the large typewriter interword space.
+    % `\ ' produces the large typewriter interword space.
     \def\ {{\spaceskip = 0pt{} }}%
     %
-    % Turn off hyphenation.
-    \nohyphenation
-    %
     \plainfrenchspacing
     #1%
   }%
   \null % reset spacefactor to 1000
 }
 
-% We *must* turn on hyphenation at `-' and `_' in @code.
-% (But see \codedashfinish below.)
+% This is for LuaTeX: It is not sufficient to disable hyphenation at
+% explicit dashes by setting `\hyphenchar` to -1.
+\def\dashnobreak{%
+  \normaldash
+  \penalty 10000 }
+
+% We must turn on hyphenation at `-' and `_' in @code.
 % Otherwise, it is too hard to avoid overfull hboxes
 % in the Emacs manual, the Library manual, etc.
+% We explicitly allow hyphenation at these characters
+% using \discretionary.
 %
-% Unfortunately, TeX uses one parameter (\hyphenchar) to control
-% both hyphenation at - and hyphenation within words.
-% We must therefore turn them both off (\tclose does that)
-% and arrange explicitly to hyphenate at a dash. -- rms.
+% Hyphenation at - and hyphenation within words was turned off
+% by default for the tt fonts using the \hyphenchar parameter of TeX.
 {
   \catcode`\-=\active \catcode`\_=\active
   \catcode`\'=\active \catcode`\`=\active
@@ -2923,7 +2927,7 @@ end
      \let-\codedash
      \let_\codeunder
     \else
-     \let-\normaldash
+     \let-\dashnobreak
      \let_\realunder
     \fi
     % Given -foo (with a single dash), we do not want to allow a break
@@ -3200,7 +3204,7 @@ end
 
 % definition of @key with no lozenge.
 %
-\def\key#1{{\setregularquotes \nohyphenation \tt #1}\null}
+\def\key#1{{\setregularquotes \tt #1}\null}
 
 % @clicksequence{File @click{} Open ...}
 \def\clicksequence#1{\begingroup #1\endgroup}
@@ -3747,6 +3751,7 @@ $$%
   % Open one extra group, as we want to close it in the middle of \Etitlepage.
   \begingroup
     \parindent=0pt \textfonts
+    \headingsoff
     % Leave some space at the very top of the page.
     \vglue\titlepagetopglue
     % No rule at page bottom unless we print one at the top with @title.
@@ -3774,11 +3779,9 @@ $$%
     % If we use the new definition of \page, we always get a blank page
     % after the title page, which we certainly don't want.
     \oldpage
+    \pageone
   \endgroup
   %
-  % Need this before the \...aftertitlepage checks so that if they are
-  % in effect the toc pages will come out with page numbers.
-  \HEADINGSon
 }
 
 \def\finishtitlepage{%
@@ -3947,7 +3950,6 @@ $$%
 }
 
 \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
-\HEADINGSoff  % it's the default
 
 % When we turn headings on, set the page number to 1.
 \def\pageone{
@@ -3971,7 +3973,7 @@ $$%
 \pageone
 \HEADINGSsinglex
 }
-\def\HEADINGSon{\HEADINGSdouble}
+% \def\HEADINGSon{\HEADINGSdouble} % defined by \CHAPPAGon
 
 \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
 \let\HEADINGSdoubleafter=\HEADINGSafter
@@ -5616,6 +5618,11 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 \newdimen\entryrightmargin
 \entryrightmargin=0pt
 
+% for PDF output, whether to make the text of the entry a link to the page
+% number.  set for @contents and @shortcontents where there is only one
+% page number.
+\newif\iflinkentrytext
+
 % \entry typesets a paragraph consisting of the text (#1), dot leaders, and
 % then page number (#2) flushed to the right margin.  It is used for index
 % and table of contents entries.  The paragraph is indented by \leftskip.
@@ -5642,7 +5649,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 }
 \def\entrybreak{\unskip\space\ignorespaces}%
 \def\doentry{%
-    % Save the text of the entry
+    % Save the text of the entry in \boxA
     \global\setbox\boxA=\hbox\bgroup
     \bgroup % Instead of the swallowed brace.
       \noindent
@@ -5652,12 +5659,21 @@ might help (with 'rm \jobname.?? \jobname.??s')%
       % with catcodes occurring.
 }
 {\catcode`\@=11
+% #1 is the page number
 \gdef\finishentry#1{%
-    \egroup % end box A
+    \egroup % end \boxA
     \dimen@ = \wd\boxA % Length of text of entry
+    % add any leaders and page number to \boxA.
     \global\setbox\boxA=\hbox\bgroup
-      \unhbox\boxA
-      % #1 is the page number.
+      \ifpdforxetex
+        \iflinkentrytext
+          \pdflinkpage{#1}{\unhbox\boxA}%
+        \else
+          \unhbox\boxA
+        \fi
+      \else
+        \unhbox\boxA
+      \fi
       %
       % Get the width of the page numbers, and only use
       % leaders if they are present.
@@ -5676,6 +5692,8 @@ might help (with 'rm \jobname.?? \jobname.??s')%
         \fi
       \fi
     \egroup % end \boxA
+    %
+    % now output
     \ifdim\wd\boxB = 0pt
       \noindent\unhbox\boxA\par
       \nobreak
@@ -6375,7 +6393,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \fi
 }
 
-\parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname}
+\parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname\HEADINGSon}
 
 \def\CHAPPAGoff{%
 \global\let\contentsalignmacro = \chappager
@@ -6392,7 +6410,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 \global\let\pchapsepmacro=\chapoddpage
 \global\def\HEADINGSon{\HEADINGSdouble}}
 
-\CHAPPAGon
+\setchapternewpage on
 
 % \chapmacro - Chapter opening.
 %
@@ -6772,6 +6790,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
     \def\thistitle{}% no title in double-sided headings
     % Record where the Roman numerals started.
     \ifnum\romancount=0 \global\romancount=\pagecount \fi
+    \linkentrytexttrue
 }
 
 % \raggedbottom in plain.tex hardcodes \topskip so override it
@@ -6899,7 +6918,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % Chapters, in the short toc.
 % See comments in \dochapentry re vbox and related settings.
 \def\shortchapentry#1#2#3#4{%
-  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
+  \tocentry{\shortchaplabel{#2}\labelspace #1}{#4}%
 }
 
 % Appendices, in the main contents.
@@ -6914,7 +6933,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 % Unnumbered chapters.
 \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
-\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{#4}}
 
 % Sections.
 \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
@@ -6946,24 +6965,24 @@ might help (with 'rm \jobname.?? \jobname.??s')%
      % Move the page numbers slightly to the right
      \advance\entryrightmargin by -0.05em
      \chapentryfonts
-     \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+     \tocentry{#1}{#2}%
    \endgroup
    \nobreak\vskip .25\baselineskip plus.1\baselineskip
 }
 
 \def\dosecentry#1#2{\begingroup
   \secentryfonts \leftskip=\tocindent
-  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+  \tocentry{#1}{#2}%
 \endgroup}
 
 \def\dosubsecentry#1#2{\begingroup
   \subsecentryfonts \leftskip=2\tocindent
-  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+  \tocentry{#1}{#2}%
 \endgroup}
 
 \def\dosubsubsecentry#1#2{\begingroup
   \subsubsecentryfonts \leftskip=3\tocindent
-  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+  \tocentry{#1}{#2}%
 \endgroup}
 
 % We use the same \entry macro as for the index entries.
@@ -6972,9 +6991,6 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % Space between chapter (or whatever) number and the title.
 \def\labelspace{\hskip1em \relax}
 
-\def\dopageno#1{{\rm #1}}
-\def\doshortpageno#1{{\rm #1}}
-
 \def\chapentryfonts{\secfonts \rm}
 \def\secentryfonts{\textfonts}
 \def\subsecentryfonts{\textfonts}
@@ -7410,7 +7426,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 \endgroup
 %
 \def\setupverb{%
-  \tt  % easiest (and conventionally used) font for verbatim
+  \tt
   \def\par{\leavevmode\endgraf}%
   \setcodequotes
   \tabeightspaces
@@ -7587,32 +7603,28 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \exdentamount=\defbodyindent
 }
 
-\def\dodefunx#1{%
-  % First, check whether we are in the right environment:
-  \checkenv#1%
-  %
-  % As above, allow line break if we have multiple x headers in a row.
-  % It's not a great place, though.
-  \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
-  %
-  % And now, it's time to reuse the body of the original defun:
-  \expandafter\gobbledefun#1%
-}
-\def\gobbledefun#1\startdefun{}
+\newtoks\defidx
+\newtoks\deftext
 
-% \printdefunline \deffnheader{text}
+\def\useindex#1{\defidx={#1}\ignorespaces}
+
+% Called as \printdefunline \deffooheader{text}
 %
 \def\printdefunline#1#2{%
   \begingroup
     \plainfrenchspacing
-    % call \deffnheader:
+    % call \deffooheader:
     #1#2 \endheader
+    % create the index entry
+    \defcharsdefault
+    \edef\temp{\noexpand\doind{\the\defidx}{\the\deftext}}%
+    \temp
     % common ending:
     \interlinepenalty = 10000
     \advance\rightskip by 0pt plus 1fil\relax
     \endgraf
     \nobreak\vskip -\parskip
-    \penalty\defunpenalty  % signal to \startdefun and \dodefunx
+    \penalty\defunpenalty  % signal to \startdefun and \deffoox
     % Some of the @defun-type tags do not enable magic parentheses,
     % rendering the following check redundant.  But we don't optimize.
     \checkparencounts
@@ -7621,7 +7633,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 \def\Edefun{\endgraf\medbreak}
 
-% \makedefun{deffoo}{ (definition of \deffooheader) }
+% \makedefun{deffoo} (\deffooheader parameters) { (\deffooheader expansion) }
 %
 % Define \deffoo, \deffoox  \Edeffoo and \deffooheader.
 \def\makedefun#1{%
@@ -7636,8 +7648,18 @@ might help (with 'rm \jobname.?? \jobname.??s')%
     \doingtypefnfalse    % distinguish typed functions from all else
     \parseargusing\activeparens{\printdefunline#3}%
   }%
-  \def#2{\dodefunx#1}%
-  \def#3%
+  \def#2{%
+    % First, check whether we are in the right environment:
+    \checkenv#1%
+    %
+    % As in \startdefun, allow line break if we have multiple x headers
+    % in a row.  It's not a great place, though.
+    \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
+    %
+    \doingtypefnfalse    % distinguish typed functions from all else
+    \parseargusing\activeparens{\printdefunline#3}%
+  }%
+  \def#3% definition of \deffooheader follows
 }
 
 \newif\ifdoingtypefn       % doing typed function?
@@ -7662,18 +7684,23 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \fi\fi
 }
 
+\def\defind#1#2{
+  \defidx={#1}%
+  \deftext={#2}%
+}
+
 % Untyped functions:
 
 % @deffn category name args
 \makedefun{deffn}#1 #2 #3\endheader{%
-  \doind{fn}{\code{#2}}%
+  \defind{fn}{\code{#2}}%
   \defname{#1}{}{#2}\magicamp\defunargs{#3\unskip}%
 }
 
 % @defop category class name args
 \makedefun{defop}#1 {\defopheaderx{#1\ \putwordon}}
 \def\defopheaderx#1#2 #3 #4\endheader{%
-  \doind{fn}{\code{#3}\space\putwordon\ \code{#2}}%
+  \defind{fn}{\code{#3}\space\putwordon\ \code{#2}}%
   \defname{#1\ \code{#2}}{}{#3}\magicamp\defunargs{#4\unskip}%
 }
 
@@ -7681,7 +7708,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 % @deftypefn category type name args
 \makedefun{deftypefn}#1 #2 #3 #4\endheader{%
-  \doind{fn}{\code{#3}}%
+  \defind{fn}{\code{#3}}%
   \doingtypefntrue
   \defname{#1}{#2}{#3}\defunargs{#4\unskip}%
 }
@@ -7689,7 +7716,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % @deftypeop category class type name args
 \makedefun{deftypeop}#1 {\deftypeopheaderx{#1\ \putwordon}}
 \def\deftypeopheaderx#1#2 #3 #4 #5\endheader{%
-  \doind{fn}{\code{#4}\space\putwordon\ \code{#1\ \code{#2}}}%
+  \defind{fn}{\code{#4}\space\putwordon\ \code{#1\ \code{#2}}}%
   \doingtypefntrue
   \defname{#1\ \code{#2}}{#3}{#4}\defunargs{#5\unskip}%
 }
@@ -7698,14 +7725,14 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 % @deftypevr category type var args
 \makedefun{deftypevr}#1 #2 #3 #4\endheader{%
-  \doind{vr}{\code{#3}}%
+  \defind{vr}{\code{#3}}%
   \defname{#1}{#2}{#3}\defunargs{#4\unskip}%
 }
 
 % @deftypecv category class type var args
 \makedefun{deftypecv}#1 {\deftypecvheaderx{#1\ \putwordof}}
 \def\deftypecvheaderx#1#2 #3 #4 #5\endheader{%
-  \doind{vr}{\code{#4}\space\putwordof\ \code{#2}}%
+  \defind{vr}{\code{#4}\space\putwordof\ \code{#2}}%
   \defname{#1\ \code{#2}}{#3}{#4}\defunargs{#5\unskip}%
 }
 
@@ -7722,7 +7749,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 % @deftp category name args
 \makedefun{deftp}#1 #2 #3\endheader{%
-  \doind{tp}{\code{#2}}%
+  \defind{tp}{\code{#2}}%
   \defname{#1}{}{#2}\defunargs{#3\unskip}%
 }
 
@@ -10489,7 +10516,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}%
   \DeclareUnicodeCharacter{00AF}{\={ }}%
   %
-  \DeclareUnicodeCharacter{00B0}{\textdegree}
+  \DeclareUnicodeCharacter{00B0}{\textdegree}%
   \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}%
   \DeclareUnicodeCharacter{00B2}{$^2$}%
   \DeclareUnicodeCharacter{00B3}{$^3$}%
diff --git a/doc/misc/todo-mode.texi b/doc/misc/todo-mode.texi
index 85603cf5938..40e3056c659 100644
--- a/doc/misc/todo-mode.texi
+++ b/doc/misc/todo-mode.texi
@@ -9,7 +9,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2013--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2013--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index 80874049faf..56436d32970 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -12,7 +12,7 @@
 @footnotestyle end
 
 @copying
-Copyright @copyright{} 1999--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/trampver.texi b/doc/misc/trampver.texi
index 45cc12b2394..dce02933f2b 100644
--- a/doc/misc/trampver.texi
+++ b/doc/misc/trampver.texi
@@ -2,7 +2,7 @@
 @c texi/trampver.texi.  Generated from trampver.texi.in by configure.
 
 @c This is part of the Emacs manual.
-@c Copyright (C) 2003--2022 Free Software Foundation, Inc.
+@c Copyright (C) 2003--2023 Free Software Foundation, Inc.
 @c See file doclicense.texi for copying conditions.
 
 @c In the  Tramp GIT, the version number and the bug report address
diff --git a/doc/misc/transient.texi b/doc/misc/transient.texi
index 2b106bb7141..62ab0ff3fcf 100644
--- a/doc/misc/transient.texi
+++ b/doc/misc/transient.texi
@@ -8,7 +8,7 @@
 
 @copying
 @quotation
-Copyright (C) 2018-2022 Free Software Foundation, Inc.
+Copyright (C) 2018--2023 Free Software Foundation, Inc.
 
 You can redistribute this document and/or modify it under the terms
 of the GNU General Public License as published by the Free Software
diff --git a/doc/misc/url.texi b/doc/misc/url.texi
index 420a2b56c52..2f5f994b474 100644
--- a/doc/misc/url.texi
+++ b/doc/misc/url.texi
@@ -21,7 +21,7 @@
 @copying
 This is the manual for the @code{url} Emacs Lisp library.
 
-Copyright @copyright{} 1993--1999, 2002, 2004--2022 Free Software
+Copyright @copyright{} 1993--1999, 2002, 2004--2023 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/use-package.texi b/doc/misc/use-package.texi
index c587d23d74b..87105c4db00 100644
--- a/doc/misc/use-package.texi
+++ b/doc/misc/use-package.texi
@@ -13,7 +13,7 @@
 @copying
 This manual is for use-package @value{USEP_VER} @value{USEP_DIST}.
 
-Copyright @copyright{} 2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2022--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -132,19 +132,9 @@ do.
 @cindex quick-start instructions
 
 This chapter provides instructions and examples for quickly getting
-started with use-package.  The first thing you need to do is make sure
-that @file{use-package} itself is loaded.  To do that, put this at the
-top of your init file:
-
-@lisp
-(require 'use-package)
-@end lisp
-
-@cindex declaration
-The above makes the @code{use-macro} available for us in the rest of
-your init file.  In this manual, we say that each call to
-@code{use-macro} is a @dfn{declaration}, to highlight the declarative
-nature of its syntax.
+started with use-package.  In this manual, we say that each call to
+the @code{use-package} macro in your init file is a @dfn{declaration},
+to highlight the declarative nature of its syntax.
 
 To unconditionally load a package named @samp{foo}, add the following
 declaration to your init file:
diff --git a/doc/misc/vhdl-mode.texi b/doc/misc/vhdl-mode.texi
index 8abf882a291..a5ad92ca01e 100644
--- a/doc/misc/vhdl-mode.texi
+++ b/doc/misc/vhdl-mode.texi
@@ -10,7 +10,7 @@
 @copying
 This file documents VHDL Mode, an Emacs mode for editing VHDL code.
 
-Copyright @copyright{} 1995--2008, 2010, 2012, 2015--2022 Free Software
+Copyright @copyright{} 1995--2008, 2010, 2012, 2015--2023 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/vip.texi b/doc/misc/vip.texi
index 8e192d7e400..f5a6dfe9f8c 100644
--- a/doc/misc/vip.texi
+++ b/doc/misc/vip.texi
@@ -4,7 +4,7 @@
 @include docstyle.texi
 
 @copying
-Copyright @copyright{} 1987, 2001--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1987, 2001--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/viper.texi b/doc/misc/viper.texi
index d36019f06ac..3e038520287 100644
--- a/doc/misc/viper.texi
+++ b/doc/misc/viper.texi
@@ -8,7 +8,7 @@
 @include docstyle.texi
 
 @copying
-Copyright @copyright{} 1995--1997, 2001--2022 Free Software Foundation,
+Copyright @copyright{} 1995--1997, 2001--2023 Free Software Foundation,
 Inc.
 
 @quotation
diff --git a/doc/misc/vtable.texi b/doc/misc/vtable.texi
index 59cd9d0f564..de652eb227f 100644
--- a/doc/misc/vtable.texi
+++ b/doc/misc/vtable.texi
@@ -12,7 +12,7 @@
 @copying
 This file documents the GNU vtable.el package.
 
-Copyright @copyright{} 2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2022--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/widget.texi b/doc/misc/widget.texi
index c84b49a038c..4ac57a95a43 100644
--- a/doc/misc/widget.texi
+++ b/doc/misc/widget.texi
@@ -9,7 +9,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2000--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2000--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/wisent.texi b/doc/misc/wisent.texi
index 07240e5dd35..2d9fedadcc5 100644
--- a/doc/misc/wisent.texi
+++ b/doc/misc/wisent.texi
@@ -24,7 +24,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 1988--1993, 1995, 1998--2004, 2007, 2012--2022
+Copyright @copyright{} 1988--1993, 1995, 1998--2004, 2007, 2012--2023
 Free Software Foundation, Inc.
 
 @c Since we are both GNU manuals, we do not need to ack each other here.
diff --git a/doc/misc/woman.texi b/doc/misc/woman.texi
index d300cd3a3df..32543b9e48d 100644
--- a/doc/misc/woman.texi
+++ b/doc/misc/woman.texi
@@ -15,7 +15,7 @@
 This file documents WoMan: A program to browse Unix manual pages ``W.O.
 (without) man''.
 
-Copyright @copyright{} 2001--2022 Free Software Foundation, Inc.
+Copyright @copyright{} 2001--2023 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/etc/CALC-NEWS b/etc/CALC-NEWS
index 217e16c1081..8fd5365011f 100644
--- a/etc/CALC-NEWS
+++ b/etc/CALC-NEWS
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Calc is an advanced desk calculator for GNU Emacs.
diff --git a/etc/ChangeLog.1 b/etc/ChangeLog.1
index 32ae5cf3bcd..de6abff2881 100644
--- a/etc/ChangeLog.1
+++ b/etc/ChangeLog.1
@@ -6891,7 +6891,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/etc/DEBUG b/etc/DEBUG
index 01c75f8da7a..c4f0852abb3 100644
--- a/etc/DEBUG
+++ b/etc/DEBUG
@@ -1,6 +1,6 @@
 Debugging GNU Emacs
 
-Copyright (C) 1985, 2000-2022 Free Software Foundation, Inc.
+Copyright (C) 1985, 2000-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 ** Preliminaries
@@ -277,8 +277,13 @@ GDB:
 If you do this, then typing C-c or C-BREAK into the console window
 through which you interact with GDB will stop Emacs and return control
 to the debugger, no matter if Emacs displays GUI or text-mode frames.
-This is the only reliable alternative on MS-Windows to get control to
-the debugger, besides setting breakpoints in advance.
+With GDB versions before 13.1, this is the only reliable alternative
+on MS-Windows to get control to the debugger, besides setting
+breakpoints in advance.  GDB 13.1 changed the way C-c and C-BREAK are
+handled on Windows, so with those newer versions, you don't need the
+"set new-console 1" setting to be able to interrupt Emacs by typing
+C-c or C-BREAK into the console window from which you started Emacs
+and where you interact with GDB.
 
 ** Examining Lisp object values.
 
diff --git a/etc/DISTRIB b/etc/DISTRIB
index a60d140aa66..359422ae895 100644
--- a/etc/DISTRIB
+++ b/etc/DISTRIB
@@ -1,7 +1,7 @@
                                                -*- text -*-
             GNU Emacs availability information
 
-Copyright (C) 1986-1993, 1995, 1998, 2000-2022 Free Software Foundation,
+Copyright (C) 1986-1993, 1995, 1998, 2000-2023 Free Software Foundation,
 Inc.
 See the end of the file for license conditions.
 
diff --git a/etc/ERC-NEWS b/etc/ERC-NEWS
index 76439f1d068..9d09172401f 100644
--- a/etc/ERC-NEWS
+++ b/etc/ERC-NEWS
@@ -1,6 +1,6 @@
 ERC NEWS                                                       -*- outline -*-
 
-Copyright (C) 2006-2022 Free Software Foundation, Inc.
+Copyright (C) 2006-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send ERC bug reports to 'bug-gnu-emacs@gnu.org',
@@ -39,6 +39,14 @@ anew.  The pre-5.4 "disabled" behavior has been restored and 
will
 remain accessible for the foreseeable future, warts and all (e.g.,
 with its often superfluous "/DIALED-HOST" suffixing always present).
 
+** The 'networks' module is now quasi-required.
+The 'networks' module is now all but required for everyday interactive
+use.  A default member of 'erc-modules' since ERC 5.3, 'networks' has
+grown increasingly integral to core client operations over the years.
+From now on, only the most essential operations will be officially
+supported in its absence, and users will see a warning upon
+entry-point invocation when it's not present.
+
 ** Tighter auth-source integration with bigger changes on the horizon.
 The days of hit-and-miss auth-source queries are hopefully behind us.
 With the overhaul of the services module temporarily shelved and the
@@ -111,7 +119,8 @@ and 'erc-backend'.
 
 The function 'erc-network' always returns non-nil in server and target
 buffers belonging to a successfully established IRC connection, even
-after that connection has been closed.
+after that connection has been closed.  (Also see the note in the
+section above about the 'networks' module basically being mandatory.)
 
 In 5.4, support for network symbols as keys was added for
 'erc-autojoin-channels-alist'.  This has been extended to include
diff --git a/etc/ETAGS.EBNF b/etc/ETAGS.EBNF
index ac89e7436a3..f2aa45de43f 100644
--- a/etc/ETAGS.EBNF
+++ b/etc/ETAGS.EBNF
@@ -94,7 +94,7 @@ those.
 
 ===================== end of discussion of tag names =====================
 
-Copyright (C) 2002-2022 Free Software Foundation, Inc.
+Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/ETAGS.README b/etc/ETAGS.README
index af1bf105668..8308da52171 100644
--- a/etc/ETAGS.README
+++ b/etc/ETAGS.README
@@ -28,7 +28,7 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
LIABILITY, OR TORT
 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2022 Free Software
+Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2023 Free Software
 Foundation, Inc.
 
 This file is not considered part of GNU Emacs.
diff --git a/etc/HELLO b/etc/HELLO
index fbe65a451e1..25a572e5f1f 100644
--- a/etc/HELLO
+++ b/etc/HELLO
@@ -129,7 +129,7 @@ Wancho (𞋒𞋀𞋉𞋃𞋕)      𞋂𞋈𞋛
 
 
 
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 
 This file is part of GNU Emacs.
diff --git a/etc/MACHINES b/etc/MACHINES
index dcdef0c557f..8c6f3f48ce7 100644
--- a/etc/MACHINES
+++ b/etc/MACHINES
@@ -1,6 +1,6 @@
 Emacs machines list
 
-Copyright (C) 1989-1990, 1992-1993, 1998, 2001-2022 Free Software
+Copyright (C) 1989-1990, 1992-1993, 1998, 2001-2023 Free Software
 Foundation, Inc.
 See the end of the file for license conditions.
 
diff --git a/etc/MH-E-NEWS b/etc/MH-E-NEWS
index 9bcfc40af28..b2b05c3d024 100644
--- a/etc/MH-E-NEWS
+++ b/etc/MH-E-NEWS
@@ -1,6 +1,6 @@
 * COPYRIGHT
 
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 * Changes in MH-E 8.6
diff --git a/etc/NEWS b/etc/NEWS
index af7f1050b76..1ab6822da3f 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2021-2022 Free Software Foundation, Inc.
+Copyright (C) 2021-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to 'bug-gnu-emacs@gnu.org'.
@@ -35,9 +35,28 @@ This means it should be less necessary to disable the likes 
of
 `select-active-regions' when Emacs is running over a slow network
 connection.
 
+** Emacs now updates invisible frames that are made visible by a compositor.
+If an invisible or an iconified frame is shown to the user by the
+compositing manager, Emacs will now redisplay such a frame even though
+'frame-visible-' returns nil or 'icon' for it.  This can happen, for
+example, as part of preview for iconified frames.
+
++++
+** 'write-region-inhibit-fsync' now defaults to t in interactive mode,
+as it has in batch mode since Emacs 24.
+
 
 * Editing Changes in Emacs 30.1
 
+** New helper 'transpose-sexps-function'
+Emacs now can set this defvar to customize the behavior of the
+'transpose-sexps' function.
+
+** New function 'treesit-transpose-sexps'
+treesit.el now unconditionally sets 'transpose-sexps-function' for all
+Tree-sitter modes.  This functionality utilizes the new
+'transpose-sexps-function'.
+
 
 * Changes in Specialized Modes and Packages in Emacs 30.1
 ---
@@ -95,6 +114,16 @@ point is not in a comment or a string.  It is by default 
bound to
 'M-q' in 'prog-mode' and all its descendants.
 
 * New Modes and Packages in Emacs 30.1
+---
+** The highly accessible Modus themes collection has six items
+The 'modus-operandi' and 'modus-vivendi' are the main themes that have
+been part of Emacs since version 28.  The former is light, the latter
+dark.  In addition to these, we now have 'modus-operandi-tinted' and
+'modus-vivendi-tinted' for easier legibility, as well as
+'modus-operandi-deuteranopia' and 'modus-vivendi-deuteranopia' to
+cover the needs of users with red-green color deficiency.  The Info
+manual of the themes describes the details and showcases all their
+customization options.
 
 
 * Incompatible Lisp Changes in Emacs 30.1
@@ -102,6 +131,53 @@ point is not in a comment or a string.  It is by default 
bound to
 
 * Lisp Changes in Emacs 30.1
 
+** New or changed byte-compilation warnings
+
+---
+*** Warn about empty bodies for more special forms and macros.
+The compiler now warns about an empty body argument to 'when',
+'unless', 'ignore-error' and 'with-suppressed-warnings' in addition to
+the existing warnings for 'let' and 'let*'.  Example:
+
+  (when (> x 2))
+
+This warning can be suppressed using 'with-suppressed-warnings' with
+the warning name 'empty-body'.
+
+---
+*** Warn about quoted error names in 'condition-case' and 'ignore-error'.
+The compiler now warns about quoted condition (error) names
+in 'condition-case' and 'ignore-error'.  Example:
+
+  (condition-case nil
+      (/ x y)
+    ('arith-error "division by zero"))
+
+Quoting them adds the error name 'quote' to those handled or ignored
+respectively, which was probably not intended.
+
+---
+*** Warn about comparison with literal constants without defined identity.
+The compiler now warns about comparisons by identity with a literal
+string, cons, vector, record, function, large integer or float as this
+may not match any value at all.  Example:
+
+  (eq x "hello")
+
+Only literals for symbols and small integers (fixnums), including
+characters, are guaranteed to have a consistent (unique) identity.
+This warning applies to 'eq', 'eql', 'memq', 'memql', 'assq', 'rassq',
+'remq' and 'delq'.
+
+To compare by (structural) value, use 'equal', 'member', 'assoc',
+'rassoc', 'remove' or 'delete' instead.  Floats and bignums can also
+be compared using 'eql', '=' and 'memql'.  Function literals cannot be
+compared reliably at all.
+
+This warning can be suppressed using 'with-suppressed-warnings' with
+the warning name 'suspicious'.
+
+
 
 * Changes in Emacs 30.1 on Non-Free Operating Systems
 
diff --git a/etc/NEWS.1-17 b/etc/NEWS.1-17
index 9d7bacc9ec8..952b5e5c3fb 100644
--- a/etc/NEWS.1-17
+++ b/etc/NEWS.1-17
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  26-Mar-1986
 
-Copyright (C) 1985-1986, 2006-2022 Free Software Foundation, Inc.
+Copyright (C) 1985-1986, 2006-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.18 b/etc/NEWS.18
index a90d0bd0ea6..a1df6245e09 100644
--- a/etc/NEWS.18
+++ b/etc/NEWS.18
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  17-Aug-1988
 
-Copyright (C) 1988, 2006-2022 Free Software Foundation, Inc.
+Copyright (C) 1988, 2006-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.19 b/etc/NEWS.19
index 25f803d6e22..18d6d630d5b 100644
--- a/etc/NEWS.19
+++ b/etc/NEWS.19
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  1992.
 
-Copyright (C) 1993-1995, 2001, 2006-2022 Free Software Foundation, Inc.
+Copyright (C) 1993-1995, 2001, 2006-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.20 b/etc/NEWS.20
index 332d6ded92a..8143cfcf3cd 100644
--- a/etc/NEWS.20
+++ b/etc/NEWS.20
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  2006-05-31
 
-Copyright (C) 1999-2001, 2006-2022 Free Software Foundation, Inc.
+Copyright (C) 1999-2001, 2006-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.21 b/etc/NEWS.21
index a718283191b..e68d7fe8fae 100644
--- a/etc/NEWS.21
+++ b/etc/NEWS.21
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  2006-05-31
 
-Copyright (C) 2000-2022 Free Software Foundation, Inc.
+Copyright (C) 2000-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.22 b/etc/NEWS.22
index bf172b4cc90..804dab00859 100644
--- a/etc/NEWS.22
+++ b/etc/NEWS.22
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to bug-gnu-emacs@gnu.org.
diff --git a/etc/NEWS.23 b/etc/NEWS.23
index 5f13845dcb2..22408197f7d 100644
--- a/etc/NEWS.23
+++ b/etc/NEWS.23
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2007-2022 Free Software Foundation, Inc.
+Copyright (C) 2007-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to bug-gnu-emacs@gnu.org.
diff --git a/etc/NEWS.24 b/etc/NEWS.24
index 31e48f9acad..1e1206d058f 100644
--- a/etc/NEWS.24
+++ b/etc/NEWS.24
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2010-2022 Free Software Foundation, Inc.
+Copyright (C) 2010-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to bug-gnu-emacs@gnu.org.
diff --git a/etc/NEWS.25 b/etc/NEWS.25
index e716f8194f5..3fa604bd92d 100644
--- a/etc/NEWS.25
+++ b/etc/NEWS.25
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2014-2022 Free Software Foundation, Inc.
+Copyright (C) 2014-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to bug-gnu-emacs@gnu.org.
diff --git a/etc/NEWS.26 b/etc/NEWS.26
index 9a6a7992088..1692e23483c 100644
--- a/etc/NEWS.26
+++ b/etc/NEWS.26
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2016-2022 Free Software Foundation, Inc.
+Copyright (C) 2016-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to 'bug-gnu-emacs@gnu.org'.
diff --git a/etc/NEWS.27 b/etc/NEWS.27
index f4fb4e3121f..3e1b4a49946 100644
--- a/etc/NEWS.27
+++ b/etc/NEWS.27
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2017-2022 Free Software Foundation, Inc.
+Copyright (C) 2017-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to 'bug-gnu-emacs@gnu.org'.
diff --git a/etc/NEWS.28 b/etc/NEWS.28
index 9982296aaab..6ffe39b9493 100644
--- a/etc/NEWS.28
+++ b/etc/NEWS.28
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2019-2022 Free Software Foundation, Inc.
+Copyright (C) 2019-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to 'bug-gnu-emacs@gnu.org'.
diff --git a/etc/NEWS.29 b/etc/NEWS.29
index 017fd850b4e..38a8798507a 100644
--- a/etc/NEWS.29
+++ b/etc/NEWS.29
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2021-2022 Free Software Foundation, Inc.
+Copyright (C) 2021-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to 'bug-gnu-emacs@gnu.org'.
@@ -68,6 +68,12 @@ Emacs modes you will use, as Emacs loads these libraries 
only when the
 corresponding mode is turned on in some buffer for the first time in
 an Emacs session.
 
+Emacs provides a user command, 'treesit-install-language-grammar',
+that automates the download and build process of a grammar library.
+It prompts for the language, the URL of the language grammar's VCS
+repository, and then uses the installed C/C++ compiler to build the
+library and install it.
+
 +++
 ** Emacs can be built with built-in support for accessing SQLite databases.
 This uses the popular sqlite3 library, and can be disabled by using
@@ -106,7 +112,7 @@ If a constant file name is required, the file can be 
renamed to
 "emacs.pdmp", and Emacs will find it during startup anyway.
 
 ---
-** Emacs now uses XInput 2 for input events.
+** Emacs on X now uses XInput 2 for input events.
 If your X server has support and you have the XInput 2 development
 headers installed, Emacs will use the X Input Extension for handling
 input.  If this causes problems, you can configure Emacs with the
@@ -115,6 +121,19 @@ option '--without-xinput2' to disable this support.
 '(featurep 'xinput2)' can be used to test for the presence of XInput 2
 support from Lisp programs.
 
++++
+** Emacs now supports being built with pure GTK.
+To use this option, make sure the GTK 3 (version 3.22.23 or later) and
+Cairo development files are installed, and configure Emacs with the
+option '--with-pgtk'.  Unlike the default X and GTK build, the
+resulting Emacs binary will work on any underlying window system
+supported by GDK, such as Wayland and Broadway.  We recommend that you
+use this configuration only if you are running a window system other
+than X that's supported by GDK.  Running this configuration on X is
+known to have problems, such as undesirable frame positioning and
+various issues with keyboard input of sequences such as 'C-;' and
+'C-S-u'.
+
 ---
 ** Emacs no longer reduces the size of the Japanese dictionary.
 Building Emacs includes generation of a Japanese dictionary, which is
@@ -130,23 +149,10 @@ by saying
 
 after deleting "lisp/leim/ja-dic/ja-dic.el".
 
-+++
-** Emacs now supports being built with pure GTK.
-To use this option, make sure the GTK 3 (version 3.22.23 or later) and
-Cairo development files are installed, and configure Emacs with the
-option '--with-pgtk'.  Unlike the default X and GTK build, the
-resulting Emacs binary will work on any underlying window system
-supported by GDK, such as Wayland and Broadway.  We do not recommend
-that you use this configuration, unless you are running a window
-system that's supported by GDK other than X.  Running this
-configuration on X is known to have problems, such as undesirable
-frame positioning and various issues with keyboard input of sequences
-such as 'C-;' and 'C-S-u'.
-
 ---
 ** The docstrings of preloaded files are not in "etc/DOC" any more.
-Instead, they're fetched as needed from the corresponding ".elc" file,
-as was already the case for all the non-preloaded files.
+Instead, they're fetched as needed from the corresponding ".elc"
+files, as was already the case for all the non-preloaded files.
 
 
 * Startup Changes in Emacs 29.1
@@ -172,16 +178,18 @@ the value of the final form.
 
 +++
 ** Emacs now supports setting 'user-emacs-directory' via '--init-directory'.
+Use the '--init-directory' command-line option to set
+'user-emacs-directory'.
 
 +++
 ** Emacs now has a '--fingerprint' option.
-This will output a string identifying the current Emacs build.
+This will output a string identifying the current Emacs build, and exit.
 
 +++
 ** New hook 'after-pdump-load-hook'.
 This is run at the end of the Emacs startup process, and is meant to
-be used to reinitialize structures that would normally be done at load
-time.
+be used to reinitialize data structures that would normally be done at
+load time.
 
 ** Native Compilation
 
@@ -189,13 +197,15 @@ time.
 *** New variable 'inhibit-automatic-native-compilation'.
 If set, Emacs will inhibit native compilation (and won't write
 anything to the eln cache automatically).  The variable is initialized
-from the 'EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION' environment
-variable on Emacs startup.
+during Emacs startup from the environment variable
+'EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION'.
 
 ---
 *** New command 'native-compile-prune-cache'.
-This command deletes older eln cache entries (but not the ones for
-the current Emacs version).
+This command deletes old subdirectories of the eln cache (but not the
+ones for the current Emacs version).  Note that subdirectories of the
+system directory where the "*.eln" files are installed (usually, the
+last entry in 'native-comp-eln-load-path') are not deleted.
 
 ---
 *** New function 'startup-redirect-eln-cache'.
@@ -219,12 +229,12 @@ moved to the 'i' keymap, so '+' is now 'i +', '-' is now 
'i -', and
 you can rotate an image twice by saying 'i r r', for instance.
 
 +++
-** Emacs now picks the correct coding system for X input methods.
-Previously, Emacs would use the locale coding system for input
+** Emacs now picks the correct coding-system for X input methods.
+Previously, Emacs would use 'locale-coding-system' for input
 methods, which could in some circumstances be incorrect, especially
 when the input method chose to fall back to some other coding system.
 
-Now, Emacs automatically detects the coding system used by input
+Emacs now automatically detects the coding-system used by input
 methods, and uses that to decode input in preference to the value of
 'locale-coding-system'.  This unfortunately means that users who have
 changed the coding system used to decode X keyboard input must adjust
@@ -244,7 +254,7 @@ names to be excluded from adding such excerpts.
 In Emacs versions previous to Emacs 28.1, 'show-paren-mode' defaulted
 off.  In Emacs 28.1, the mode was switched on in all buffers.  In
 Emacs 29.1, this was changed to be switched on in all editing-related
-buffers, but not in buffers that inherit from 'special-mode'.  To get
+buffers, but not in buffers that inherit from 'special-mode'.  To go
 back to how things worked in Emacs 28.1, put the following in your
 init file:
 
@@ -265,6 +275,16 @@ controlled by the internal Emacs machinery led to 
low-contrast faces
 in common default setups.  Emacs now uses the same 'region' face on
 Gtk and non-Gtk setups.
 
+---
+** 'C-h f' and 'C-h x' may now require confirmation when you press 'RET'.
+If the text in the minibuffer cannot be completed to a single function
+or command, typing 'RET' will not automatically complete to the shortest
+candidate, but will instead ask for confirmation.  Typing 'TAB' will
+complete as much as possible, and another 'TAB' will show all the
+possible completions.  This allows you to insist on the functions name
+even if Help doesn't appear to know about it, by confirming with a
+second 'RET'.
+
 ** Dired
 
 ---
@@ -281,7 +301,7 @@ mouse (in 'transient-mark-mode') and then hitting 'd' would 
skip dot
 files.  These now work equivalently.
 
 +++
-** Warning about "eager macro-expansion failure" is changed into an error.
+** Warning about "eager macro-expansion failure" is now an error.
 
 ---
 ** Previously, the X "reverseVideo" value at startup was heeded for all frames.
@@ -314,9 +334,9 @@ this off, disable the new 'isearch-fold-quotes-mode' minor 
mode.
 ** Sorting commands no longer necessarily change modification status.
 In earlier Emacs versions, commands like 'M-x sort-lines' would always
 change buffer modification status to "modified", whether they changed
-something in the buffer or not.  This has been changed: The buffer is
-marked as modified only if the sorting ended up changing the contents
-of the buffer.
+something in the buffer or not.  This has been changed: the buffer is
+marked as modified only if the sorting ended up actually changing the
+contents of the buffer.
 
 ---
 ** 'string-lines' handles trailing newlines differently.
@@ -345,7 +365,7 @@ your Init file:
 
 ---
 ** New user option 'term-clear-full-screen-programs'.
-By default, term will now work like most terminals when displaying
+By default, term.el will now work like most terminals when displaying
 full-screen programs: When they exit, the output is cleared, leaving
 what was displayed in the window before the programs started.  Set
 this user option to nil to revert back to the old behavior.
@@ -442,8 +462,8 @@ Names of thumbnail files generated when 
'image-dired-thumbnail-storage'
 is 'image-dired' now always end in ".jpg".  This fixes various issues
 on different platforms, but means that thumbnails generated in Emacs 28
 will not be used in Emacs 29, and vice-versa.  If disk space is an
-issue, consider deleting the 'image-dired-dir' directory after
-upgrading (usually "~/.emacs.d/image-dired/").
+issue, consider deleting the 'image-dired-dir' directory (usually
+"~/.emacs.d/image-dired/") after upgrading to Emacs 29.
 
 ---
 ** The 'rlogin' method in the URL library is now obsolete.
@@ -496,7 +516,7 @@ We recommend using 'M-x image-dired' instead.
 ** The autoarg.el library is now marked obsolete.
 This library provides the 'autoarg-mode' and 'autoarg-kp-mode' minor
 modes to emulate the behavior of the historical editor Twenex Emacs.
-It is believed to no longer be useful.
+We believe it is no longer useful.
 
 ---
 ** The quickurl.el library is now obsolete.
@@ -511,7 +531,7 @@ Use something like 'M-x shell RET ssh <host> RET' instead.
 
 ---
 ** The autoload.el library is now obsolete.
-It is superseded by the loaddefs-gen.el library.
+It is superseded by the new loaddefs-gen.el library.
 
 ---
 ** The netrc.el library is now obsolete.
@@ -556,7 +576,8 @@ optimizations are in effect.
 
 A companion variable 'large-hscroll-threshold' controls when another
 set of display optimizations are in effect, which are aimed
-specifically at speeding up display of long lines that are truncated.
+specifically at speeding up display of long lines that are truncated
+on display.
 
 If you still experience slowdowns while editing files with long lines,
 this may be due to line truncation, or to one of the enabled minor
@@ -584,14 +605,15 @@ increase and decrease the font size globally.  
Additionally, the
 user option 'global-text-scale-adjust-resizes-frames' controls whether
 the frames are resized when the font size is changed.
 
+---
 ** New config variable 'syntax-wholeline-max' to reduce the cost of long lines.
 This variable is used by some operations (mostly syntax-propertization
 and font-locking) to treat lines longer than this variable as if they
 were made up of various smaller lines.  This can help reduce the
 slowdowns seen in buffers made of a single long line, but can also
-cause misbehavior in the presence of such long lines (tho most of that
-misbehavior should usually be limited to mis-highlighting).  You can
-recover the previous behavior with:
+cause misbehavior in the presence of such long lines (though most of
+that misbehavior should usually be limited to mis-highlighting).  You
+can recover the previous behavior with:
 
     (setq syntax-wholeline-max most-positive-fixnum)
 
@@ -606,7 +628,7 @@ and 'C-x 5 L' is now bound to 'find-library-other-frame'.
 Emacs allows different completion predicates to be used with 'M-x'
 (i.e., 'execute-extended-command') via the
 'read-extended-command-predicate' user option.  Emacs also has the
-'M-X' (note upper case) command, which only displays commands
+'M-X' (note upper case X) command, which only displays commands
 especially relevant to the current buffer.  Emacs now allows toggling
 between these modes while the user is inputting a command by hitting
 'M-X' while in the minibuffer.
@@ -652,7 +674,8 @@ match those regexps will be ignored by 
'switch-to-prev-buffer' and
 +++
 ** New command 'rename-visited-file'.
 This command renames the file visited by the current buffer by moving
-it to a new location, and also makes the buffer visit this new file.
+it to a new name or location, and also makes the buffer visit this new
+file.
 
 ** Menus
 
@@ -677,19 +700,21 @@ the current Emacs process at the end, it starts a new 
Emacs process
 optional parameters to restart instead of just killing the current
 process.
 
+** Drag and Drop
+
 +++
-** New user option 'mouse-drag-mode-line-buffer'.
+*** New user option 'mouse-drag-mode-line-buffer'.
 If non-nil, dragging on the buffer name part of the mode-line will
 drag the buffer's associated file to other programs.  This option is
 currently only available on X, Haiku and Nextstep (GNUstep or macOS).
 
 +++
-** New user option 'mouse-drag-and-drop-region-cross-program'.
+*** New user option 'mouse-drag-and-drop-region-cross-program'.
 If non-nil, this option allows dragging text in the region from Emacs
 to another program.
 
 ---
-** New user option 'mouse-drag-and-drop-region-scroll-margin'.
+*** New user option 'mouse-drag-and-drop-region-scroll-margin'.
 If non-nil, this option allows scrolling a window while dragging text
 around without a scroll wheel.
 
@@ -699,12 +724,12 @@ This prevents mouse drag gestures from putting empty 
strings onto the
 kill ring.
 
 +++
-** New user options 'dnd-indicate-insertion-point' and 'dnd-scroll-margin'.
+*** New user options 'dnd-indicate-insertion-point' and 'dnd-scroll-margin'.
 These options allow adjusting point and scrolling a window when
 dragging items from another program.
 
 +++
-** The X Direct Save (XDS) protocol is now supported.
+*** The X Direct Save (XDS) protocol is now supported.
 This means dropping an image or file link from programs such as
 Firefox will no longer create a temporary file in a random directory,
 instead asking you where to save the file first.
@@ -736,6 +761,7 @@ part of the buffer.
 +++
 ** 'count-words' will now report sentence count when used interactively.
 
++++
 ** New user option 'set-message-functions'.
 It allows selecting more functions for 'set-message-function'
 in addition to the default function that handles messages
@@ -874,6 +900,7 @@ This is in addition to previously-supported ways of 
discovering 24-bit
 color support: either via the "RGB" or "setf24" capabilities, or if
 the 'COLORTERM' environment variable is set to the value "truecolor".
 
+---
 *** Select active regions with xterm selection support.
 On terminals with xterm setSelection support, the active region may be
 saved to the X primary selection, following the
@@ -885,7 +912,8 @@ saved to the X primary selection, following the
 The new command 'standard-display-by-replacement-char' produces Lisp
 code that sets up the 'standard-display-table' to use a replacement
 character for display of characters that the text-mode terminal
-doesn't support.  It is most useful with the Linux console and similar
+doesn't support.  This code is intended to be used in your init files.
+This feature is most useful with the Linux console and similar
 terminals, where Emacs has a reliable way of determining which
 characters have glyphs in the font loaded into the terminal's memory.
 
@@ -926,7 +954,7 @@ This affects the 'ert-select-tests' function and its 
callers.
 ** Emoji
 
 +++
-*** Emacs now has several new methods for inserting Emojis.
+*** Emacs now has several new methods for inserting Emoji.
 The Emoji commands are under the new 'C-x 8 e' prefix.
 
 +++
@@ -936,42 +964,42 @@ combinations in a graphical menu system.
 
 +++
 *** New command 'emoji-search' (bound to 'C-x 8 e s').
-This command lets you search for Emojis based on names.
+This command lets you search for Emoji based on names.
 
 +++
 *** New command 'emoji-list' (bound to 'C-x 8 e l').
-This command lists all Emojis (categorized by themes) in a special
+This command lists all Emoji (categorized by themes) in a special
 buffer and lets you choose one of them.
 
 ---
 *** New command 'emoji-recent' (bound to 'C-x 8 e r').
-This command lets you choose among the Emojis you have recently
+This command lets you choose among the Emoji you have recently
 inserted.
 
 +++
 *** New command 'emoji-describe' (bound to 'C-x 8 e d').
-This command will tell you the name of the Emoji at point.  (This
-command also works for non-Emoji characters.)
+This command will tell you the name of the Emoji at point.  (It also
+works for non-Emoji characters.)
 
 ---
 *** New commands 'emoji-zoom-increase' and 'emoji-zoom-decrease'.
 These are bound to 'C-x 8 e +' and 'C-x 8 e -', respectively.  They
-can be used on any character, but are mainly useful for emoji.
+can be used on any character, but are mainly useful for Emoji.
 
 ---
 *** New input method 'emoji'.
-This allows you to enter emoji using short strings, eg ':face_palm:'
+This allows you to enter Emoji using short strings, eg ':face_palm:'
 or ':scream:'.
 
 ** Help
 
 ---
-*** Variable values displayed by 'C-h v' in "*Help*" are now font-locked.
+*** Variable values displayed by 'C-h v' in "*Help*" are now fontified.
 
 +++
 *** New user option 'help-clean-buttons'.
-If non-nil, link buttons in "*Help*" will have any surrounding quotes
-removed.
+If non-nil, link buttons in "*Help*" buffers will have any surrounding
+quotes removed.
 
 ---
 *** 'M-x apropos-variable' output now includes values of variables.
@@ -982,13 +1010,13 @@ When displaying docstrings in "*Help*" buffers, strings 
that are
 "`like-this'" are made into links (if they point to a bound
 function/variable).  This can lead to false positives when talking
 about values that are symbols that happen to have the same names as
-functions/variables.  To inhibit this buttonification, the new
-"\\+`like-this'" syntax can be used.
+functions/variables.  To inhibit this buttonification, use the new
+"\\+`like-this'" syntax.
 
 +++
 *** New user option 'help-window-keep-selected'.
 If non-nil, commands to show the info manual and the source will reuse
-the same window the "*Help*" buffer is shown in.
+the same window in which the "*Help*" buffer is shown.
 
 ---
 *** Commands like 'C-h f' have changed how they describe menu bindings.
@@ -1017,19 +1045,19 @@ it's easy to make an edit that yields an invalid result.
 
 ---
 *** 'C-h b' uses outlining by default.
-Set 'describe-bindings-outline' to nil to get the old behavior.
+Set 'describe-bindings-outline' to nil to get back the old behavior.
 
 ---
 *** Jumping to function/variable source now saves mark before moving point.
-Jumping to source from "*Help*" buffer moves the point when the source
-buffer is already open.  Now, the old point is pushed to mark ring.
+Jumping to source from a "*Help*" buffer moves point when the source
+buffer is already open.  Now, the old point is pushed onto mark ring.
 
 +++
 *** New key bindings in "*Help*" buffers: 'n' and 'p'.
 These will take you (respectively) to the next and previous "page".
 
 ---
-*** 'describe-char' now also outputs the name of emoji combinations.
+*** 'describe-char' now also outputs the name of Emoji sequences.
 
 +++
 *** New key binding in "*Help*" buffer: 'I'.
@@ -1055,9 +1083,9 @@ the default candidate.
 *** New command 'help-quick' displays an overview of common commands.
 The command pops up a buffer at the bottom of the screen with a few
 helpful commands for various tasks.  You can toggle the display using
-'C-h q'.
+'C-h C-q'.
 
-** Emacs 29.1 comes with Org v9.6.
+** Emacs now comes with Org v9.6.
 See the file ORG-NEWS for user-visible changes in Org.
 
 ** Outline Mode
@@ -1065,12 +1093,12 @@ See the file ORG-NEWS for user-visible changes in Org.
 +++
 *** Support for customizing the default visibility state of headings.
 Customize the user option 'outline-default-state' to define what
-headings will be visible after Outline mode is turned on.  When equal
-to a number, the user option 'outline-default-rules' determines the
-visibility of the subtree starting at the corresponding level.  Values
-are provided to control showing a heading subtree depending on whether
-the heading matches a regexp, or on whether its subtree has long lines
-or is itself too long.
+headings will be visible initially, after Outline mode is turned on.
+When the value is a number, the user option 'outline-default-rules'
+determines the visibility of the subtree starting at the corresponding
+level.  Values are provided to control showing a heading subtree
+depending on whether the heading matches a regexp, or on whether its
+subtree has long lines or is itself too long.
 
 ** Outline Minor Mode
 
@@ -1078,10 +1106,10 @@ or is itself too long.
 *** New user option 'outline-minor-mode-use-buttons'.
 If non-nil, Outline Minor Mode will use buttons to hide/show outlines
 in addition to the ellipsis.  The default is nil, but in 'help-mode'
-it has the value 'insert' that inserts the buttons directly to the
-buffer where you can use 'RET' to cycle outline visibility.  When
+it has the value 'insert' that inserts the buttons directly into the
+buffer, and you can use 'RET' to cycle outline visibility.  When
 the value is 'in-margins', Outline Minor Mode uses the window margins
-to hide/show outlines.
+for buttons that hide/show outlines.
 
 ** Windows
 
@@ -1089,17 +1117,19 @@ to hide/show outlines.
 *** New commands 'split-root-window-below' and 'split-root-window-right'.
 These commands split the root window in two, and are bound to 'C-x w 2'
 and 'C-x w 3', respectively.  A number of other useful window-related
-commands are now available on the 'C-x w' prefix.
+commands are now available with key sequences that start with the
+'C-x w' prefix.
 
 +++
 *** New user option 'display-buffer-avoid-small-windows'.
-If non-nil, this should be a window height, a number.  Windows smaller
-than this will be avoided by 'display-buffer', if possible.
+If non-nil, this should be a window height in lines, a number.
+Windows smaller than this will be avoided by 'display-buffer', if
+possible.
 
 +++
 *** New display action 'display-buffer-full-frame'.
-This action removes other windows on the frame when displaying a
-buffer.
+This action removes other windows from the frame when displaying a
+buffer on that frame.
 
 +++
 *** 'display-buffer' now can set up the body size of the chosen window.
@@ -1108,10 +1138,10 @@ For example, a 'display-buffer-alist' entry of
     '(window-width . (body-columns . 40))'
 
 will make the body of the chosen window 40 columns wide.  For the
-height use 'window-height' in combination with 'body-lines'.
+height use 'window-height' and 'body-lines', respectively.
 
 ---
-*** You can customize which window 'scroll-other-window' operates on.
+*** You can customize on which window 'scroll-other-window' operates.
 This is controlled by the new 'other-window-scroll-default' user option.
 
 ** Frames
@@ -1135,6 +1165,8 @@ before its name on display is truncated.
 
 ---
 *** 'C-x t RET' creates a new tab when the provided tab name doesn't exist.
+It prompts for the name of a tab and switches to it, creating a new
+tab if no tab exists by that name.
 
 ---
 *** New keymap 'tab-bar-history-mode-map'.
@@ -1201,7 +1233,7 @@ Most IRC clients (including rcirc) support basic 
formatting using
 control codes.  Under the 'C-c C-f' prefix a few commands have been
 added to insert these automatically.  For example, if a region is
 active and 'C-c C-f C-b' is invoked, markup is inserted for the region
-to be highlighted bold.
+to be highlighted in bold.
 
 ** Imenu
 
@@ -1213,13 +1245,16 @@ to be highlighted bold.
 Use it if you want Imenu to forget the buffer's index alist and
 recreate it anew next time 'imenu' is invoked.
 
-+++
+---
 ** Emacs is now capable of abandoning a window's redisplay that takes too long.
 This is controlled by the new variable 'max-redisplay-ticks'.  If that
 variable is set to a non-zero value, display of a window will be
 aborted after that many low-level redisplay operations, thus
 preventing Emacs from becoming wedged when visiting files with very
-long lines.
+long lines.  The default is zero, which disables the feature: Emacs
+will wait forever for redisplay to finish.  (We believe you won't need
+this feature, given the ability to display buffers with very long
+lines.)
 
 * Editing Changes in Emacs 29.1
 
@@ -1232,15 +1267,15 @@ option 'cycle-spacing-actions'.
 ---
 ** 'zap-to-char' and 'zap-up-to-char' are case-sensitive for upper-case chars.
 These commands now behave as case-sensitive for interactive calls when
-they are invoked with an uppercase character, regardless of the
-'case-fold-search' value.
+they are invoked with an uppercase character, regardless of the value
+of 'case-fold-search'.
 
 ---
 ** 'scroll-other-window' and 'scroll-other-window-down' now respect remapping.
 These commands (bound to 'C-M-v' and 'C-M-V') used to scroll the other
-windows without looking a customizations in that other window.  These
-functions now check whether they have been rebound in the buffer in
-that other window, and then call the remapped function instead.  In
+windows without looking at customizations in that other window.  These
+functions now check whether they have been rebound in the buffer shown
+in that other window, and then call the remapped function instead.  In
 addition, these commands now also respect the
 'scroll-error-top-bottom' user option.
 
@@ -1257,8 +1292,8 @@ This change also affects 'cl-macrolet', 'cl-flet*' and
 
 +++
 ** New user option 'translate-upper-case-key-bindings'.
-Set this option to nil to inhibit translating upper case keys to lower
-case keys.
+Set this option to nil to inhibit the default translation of upper
+case keys to their lower case variants.
 
 +++
 ** New command 'ensure-empty-lines'.
@@ -1269,8 +1304,8 @@ point.
 ** Improved mouse behavior with auto-scrolling modes.
 When clicking inside the 'scroll-margin' or 'hscroll-margin' region,
 point is now moved only when releasing the mouse button.  This no
-longer results in a bogus selection, unless the mouse has been
-effectively dragged.
+longer results in a bogus selection, unless the mouse has also been
+dragged.
 
 +++
 ** 'kill-ring-max' now defaults to 120.
@@ -1291,10 +1326,11 @@ When non-nil, if the point is in a closing delimiter 
and the opening
 delimiter is offscreen, shows some context around the opening
 delimiter in the echo area.  The default is nil.
 
-May also be set to the symbols 'overlay' or 'child-frame', in which
-case the context is shown in an overlay or child-frame at the top-left
-of the current window.  The latter option requires a graphical frame.
-On non-graphical frames, the context is shown in the echo area.
+This option can also be set to the symbols 'overlay' or 'child-frame',
+in which case the context is shown in an overlay or child-frame at the
+top-left of the current window.  The latter option requires a
+graphical frame.  On non-graphical frames, the context is shown in the
+echo area.
 
 ** Comint
 
@@ -1308,7 +1344,7 @@ change the terminal used on a remote host.
 *** New user option 'comint-delete-old-input'.
 When nil, this prevents comint from deleting the current input when
 inserting previous input using '<mouse-2>'.  The default is t, to
-preserve past behavior.
+preserve previous behavior.
 
 ---
 *** New minor mode 'comint-fontify-input-mode'.
@@ -1329,55 +1365,88 @@ support systems where two kinds of wheel events can be 
received.
 
 ** Internationalization changes
 
+---
 *** The <Delete> function key now allows deleting the entire composed sequence.
 For the details, see the item about the 'delete-forward-char' command
 above.
 
+---
 *** New user option 'composition-break-at-point'.
 Setting it to a non-nil value temporarily disables automatic
 composition of character sequences at point, and thus makes it easier
-to edit such sequences by allowing point to "enter" the sequence.
+to edit such sequences by allowing point to "enter" the composed
+sequence.
 
 ---
 *** Support for many old scripts and writing systems.
-Emacs now supports and has language-environments and input methods for
-several dozens of old scripts that were used in the past for various
-languages.  For each such script Emacs now has font-selection and
-character composition rules, a language environment, and an input
+Emacs now supports, and has language-environments and input methods,
+for several dozens of old scripts that were used in the past for
+various languages.  For each such script Emacs now has font-selection
+and character composition rules, a language environment, and an input
 method.  The newly-added scripts and the corresponding language
 environments are:
 
-Tai Tham script and the Northern Thai language environment
-Brahmi script and language environment
-Kaithi script and language environment
-Tirhuta script and language environment
-Sharada script and language environment
-Siddham script and language environment
-Syloti Nagri script and language environment
-Modi script and language environment
-Baybayin script and Tagalog language environment
-Hanunoo script and language environment
-Buhid script and language environment
-Tagbanwa script and language environment
-Limbu script and language environment
-Balinese script and language environment
-Javanese script and language environment
-Sundanese script and language environment
-Batak script and language environment
-Rejang script and language environment
-Makasar script and language environment
-Lontara script and language environment
-Hanifi Rohingya script and language environment
-Grantha script and language environment
-Kharoshthi script and language environment
-Lepcha script and language environment
-Meetei Mayek script and language environment
-Adlam script and language environment
-Mende Kikakui script and language environment
-Wancho script and language environment
-Toto script and language environment
-Gothic script and language environment
-Coptic script and language environment
+ Tai Tham script and the Northern Thai language environment
+
+ Brahmi script and language environment
+
+ Kaithi script and language environment
+
+ Tirhuta script and language environment
+
+ Sharada script and language environment
+
+ Siddham script and language environment
+
+ Syloti Nagri script and language environment
+
+ Modi script and language environment
+
+ Baybayin script and Tagalog language environment
+
+ Hanunoo script and language environment
+
+ Buhid script and language environment
+
+ Tagbanwa script and language environment
+
+ Limbu script and language environment
+
+ Balinese script and language environment
+
+ Javanese script and language environment
+
+ Sundanese script and language environment
+
+ Batak script and language environment
+
+ Rejang script and language environment
+
+ Makasar script and language environment
+
+ Lontara script and language environment
+
+ Hanifi Rohingya script and language environment
+
+ Grantha script and language environment
+
+ Kharoshthi script and language environment
+
+ Lepcha script and language environment
+
+ Meetei Mayek script and language environment
+
+ Adlam script and language environment
+
+ Mende Kikakui script and language environment
+
+ Wancho script and language environment
+
+ Toto script and language environment
+
+ Gothic script and language environment
+
+ Coptic script and language environment
 
 ---
 *** The "Oriya" language environment was renamed to "Odia".
@@ -1413,8 +1482,9 @@ the QWERTY Slovak keyboards.
 
 ---
 *** New input method 'cyrillic-chuvash'.
-This input method is based on the russian-computer, and is intended
-for the Chuvash language written in the Cyrillic script.
+This input method is based on the russian-computer input method, and
+is intended for typing in the Chuvash language written in the Cyrillic
+script.
 
 
 * Changes in Specialized Modes and Packages in Emacs 29.1
@@ -1496,6 +1566,40 @@ the following to your Init file:
 *** New command 'dired-do-eww'.
 This command visits the file on the current line with EWW.
 
+---
+*** New user option 'dired-omit-lines'.
+This is used by 'dired-omit-mode', and now allows you to hide based on
+other things than just the file names.
+
++++
+*** New user option 'dired-mouse-drag-files'.
+If non-nil, dragging file names with the mouse in a Dired buffer will
+initiate a drag-and-drop session allowing them to be opened in other
+programs.
+
++++
+*** New user option 'dired-free-space'.
+Dired will now, by default, include the free space in the first line
+instead of having it on a separate line.  To get the previous behavior
+back, say:
+
+    (setq dired-free-space 'separate)
+
+---
+*** New user option 'dired-make-directory-clickable'.
+If non-nil (which is the default), hitting 'RET' or 'mouse-1' on
+the directory components at the directory displayed at the start of
+the buffer will take you to that directory.
+
+---
+*** Search and replace in Dired/Wdired supports more regexps.
+For example, the regexp ".*" will match only characters that are part
+of the file name.  Also "^.*$" can be used to match at the beginning
+of the file name and at the end of the file name.  This is used only
+when searching on file names.  In Wdired this can be used when the new
+user option 'wdired-search-replace-filenames' is non-nil (which is the
+default).
+
 ** Elisp
 
 ---
@@ -1512,7 +1616,7 @@ byte-compile the visited file and the current buffer, 
respectively.
 ---
 *** New user option 'tetris-allow-repetitions'.
 This controls how randomness is implemented (whether to use pure
-randomness as before or whether to use a bag).
+randomness as before, or to use a bag).
 
 ** Battery
 
@@ -1543,7 +1647,7 @@ command is installed.
 ** CC Mode
 
 ---
-*** C++ Mode now supports most of the new features in the C++20 standard.
+*** C++ Mode now supports most of the new features in the C++20 Standard.
 
 ** Cperl Mode
 
@@ -1556,8 +1660,8 @@ be used as a file-local variable.
 
 ---
 *** 'gud-go' is now bound to 'C-c C-v'.
-If given a prefix, it will query the user for an argument to use for
-the run/continue command.
+If given a prefix, it will prompt for an argument to use for the
+run/continue command.
 
 ---
 *** 'perldb' now recognizes '-E'.
@@ -1578,7 +1682,7 @@ contents.
 *** New user option 'diff-whitespace-style'.
 Sets the value of the buffer-local variable 'whitespace-style' in
 'diff-mode' buffers.  By default, this variable is '(face trailing)',
-which preserves behavior from previous Emacs versions.
+which preserves behavior of previous Emacs versions.
 
 +++
 *** New user option 'diff-add-log-use-relative-names'.
@@ -1626,8 +1730,8 @@ it isn't already, and remove it if it is installed.
 
 +++
 *** New command 'package-vc-install'.
-Packages can now be installed directly from source by cloning from a
-repository.
+Packages can now be installed directly from source by cloning from
+their repository.
 
 +++
 *** New command 'package-vc-install-from-checkout'.
@@ -1663,7 +1767,7 @@ The option 'desktop-load-locked-desktop' can now be set 
to the value
 file if the Emacs process which locked it is no longer running on the
 local machine.  This allows avoiding questions about locked desktop
 files when the Emacs session which locked it crashes, or was otherwise
-interrupted, and didn't exit gracefully.  See the "(emacs) Saving
+interrupted and didn't exit gracefully.  See the "(emacs) Saving
 Emacs Sessions" node in the Emacs manual for more details.
 
 ** Miscellaneous
@@ -1722,9 +1826,10 @@ only jump if the location of the first error is known), 
and
 
 +++
 *** New user option 'compilation-max-output-line-length'.
-Lines longer than this will have the ends hidden, with a button to
-reveal the hidden text.  This speeds up operations like grepping on
-files that have few newlines.
+Lines longer than the value of this variable will have their ends
+hidden, with a button to reveal the hidden text.  This speeds up
+operations like grepping on files that have few newlines.  The default
+value is 400; set to nil to disable hiding.
 
 ** Flymake
 
@@ -1738,12 +1843,12 @@ characters instead of just 'SPC' and 'TAB'.
 
 ---
 ** New mode, 'emacs-news-mode', for editing the NEWS file.
-This mode adds some highlighting, fixes the 'M-q' command, and has
-commands for doing maintenance of the Emacs NEWS files.  In addition,
-this mode turns on 'outline-minor-mode', and thus displays
-customizable icons (see 'icon-preference') in the margins.  To
-disable these icons, set 'outline-minor-mode-use-buttons' to a
-nil value.
+This mode adds some highlighting, makes the 'M-q' command aware of the
+format of NEWS entries, and has special commands for doing maintenance
+of the Emacs NEWS files.  In addition, this mode turns on
+'outline-minor-mode', and thus displays customizable icons (see
+'icon-preference') in the margins.  To disable these icons, set
+'outline-minor-mode-use-buttons' to a nil value.
 
 ---
 ** Kmacro
@@ -1775,6 +1880,12 @@ exit the minibuffer.  These keys are also available for 
in-buffer
 completion, but they don't insert candidates automatically, you need
 to type 'M-RET' to insert the selected candidate to the buffer.
 
++++
+*** Choosing a completion with a prefix argument doesn't exit the minibuffer.
+This means that typing 'C-u RET' on a completion candidate in the
+"*Completions*" buffer inserts the completion into the minibuffer,
+but doesn't exit the minibuffer.
+
 +++
 *** The "*Completions*" buffer can now be automatically selected.
 To enable this behavior, customize the user option
@@ -1798,6 +1909,7 @@ to complete.  The value 'visual' is like 'always', but 
only updates
 the completions if they are already visible.  The default value t
 always hides the completion buffer after some completion is made.
 
+---
 *** New commands to complete the minibuffer history.
 'minibuffer-complete-history' ('C-x <up>') is like 'minibuffer-complete'
 but completes on the history items instead of the default completion
@@ -1820,25 +1932,20 @@ This option limits the height of the "*Completions*" 
buffer.
 
 +++
 *** New user option 'completions-header-format'.
-This is a string to control the heading line to show in the
+This is a string to control the header line to show in the
 "*Completions*" buffer before the list of completions.
 If it contains "%s", that is replaced with the number of completions.
-If nil, the heading line is not shown.
+If nil, the header line is not shown.
 
 +++
 *** New user option 'completions-highlight-face'.
 When this user option names a face, the current
 candidate in the "*Completions*" buffer is highlighted with that face.
-The nil value disables this highlighting.
-
-+++
-*** Choosing a completion with a prefix argument doesn't exit the minibuffer.
-This means that typing 'C-u RET' on a completion candidate in the
-"*Completions*" buffer inserts the completion to the minibuffer,
-but doesn't exit the minibuffer.
+The nil value disables this highlighting.  The default is to highlight
+using the 'completions-highlight' face.
 
 +++
-*** You can now define abbrevs for the fundamental minibuffer modes.
+*** You can now define abbrevs for the minibuffer modes.
 'minibuffer-mode-abbrev-table' and
 'minibuffer-inactive-mode-abbrev-table' are now defined.
 
@@ -1934,7 +2041,7 @@ This is in addition to the old keybindings 'C-c C-n' and 
'C-c C-p'.
 ---
 *** New command 'vc-pull-and-push'.
 This commands first does a "pull" command, and if that is successful,
-do a "push" command afterwards.
+does a "push" command afterwards.
 
 +++
 *** 'C-x v b' prefix key is used now for branch commands.
@@ -1973,7 +2080,7 @@ in the Git repository in "~/foo/bar".  This makes this 
command
 consistent with 'vc-responsible-backend'.
 
 ---
-*** Log Edit now font locks long Git commit summary lines.
+*** Log Edit now fontifies long Git commit summary lines.
 Writing shorter summary lines avoids truncation in contexts in which
 Git commands display summary lines.  See the two new user options
 'vc-git-log-edit-summary-target-len' and 'vc-git-log-edit-summary-max-len'.
@@ -2182,13 +2289,13 @@ All other 'gnus-header-*' faces inherit from this face 
now.
 
 +++
 *** New user option 'gnus-treat-emojize-symbols'.
-If non-nil, symbols that have an emoji representation will be
+If non-nil, symbols that have an Emoji representation will be
 displayed as emojis.  The default is nil.
 
 +++
 *** New command 'gnus-article-emojize-symbols'.
-This is bound to 'W D e' and will display symbols that have emoji
-representation as emojis.
+This is bound to 'W D e' and will display symbols that have Emoji
+representation as Emoji.
 
 +++
 *** New mu backend for gnus-search.
@@ -2300,6 +2407,11 @@ or projects outside of VCS repositories.
 As a consequence, the 'VC project backend' is formally renamed to
 'VC-aware project backend'.
 
++++
+*** New user option 'project-vc-include-untracked'.
+If non-nil, files untracked by a VCS are considered to be part of
+the project by a VC project based on that VCS.
+
 ** Xref
 
 +++
@@ -2484,7 +2596,7 @@ PDF file in the thumbnail buffer to visit the 
corresponding PDF.
 ---
 *** Support GraphicsMagick command line tools.
 Support for the GraphicsMagick command line tool ("gm") has been
-added, and is used instead of ImageMagick when it is available.
+added, and is used when it is available instead of ImageMagick.
 
 ---
 *** Support Thumbnail Managing Standard v0.9.0 (Dec 2020).
@@ -2572,42 +2684,6 @@ some commands and user options are no longer needed and 
are now obsolete:
 'image-dired-display-window-width-correction',
 'image-dired-temp-image-file'.
 
-** Dired
-
----
-*** New user option 'dired-omit-lines'.
-This is used by 'dired-omit-mode', and now allows you to hide based on
-other things than just the file names.
-
-+++
-*** New user option 'dired-mouse-drag-files'.
-If non-nil, dragging file names with the mouse in a Dired buffer will
-initiate a drag-and-drop session allowing them to be opened in other
-programs.
-
-+++
-*** New user option 'dired-free-space'.
-Dired will now, by default, include the free space in the first line
-instead of having it on a separate line.  To get the previous behavior
-back, say:
-
-    (setq dired-free-space 'separate)
-
----
-*** New user option 'dired-make-directory-clickable'.
-If non-nil (which is the default), hitting 'RET' or 'mouse-1' on
-the directory components at the directory displayed at the start of
-the buffer will take you to that directory.
-
----
-*** Search and replace in Dired/Wdired supports more regexps.
-For example, the regexp ".*" will match only characters that are part
-of the file name.  Also "^.*$" can be used to match at the beginning
-of the file name and at the end of the file name.  This is used only
-when searching on file names.  In Wdired this can be used when the new
-user option 'wdired-search-replace-filenames' is non-nil (which is the
-default).
-
 ** Bookmarks
 
 ---
@@ -2761,6 +2837,13 @@ project-dedicated or global) is specified by the new
 ---
 *** Support for endless methods.
 
+---
+*** New user options that determine indentation logic.
+'ruby-method-params-indent', 'ruby-block-indent',
+'ruby-after-operator-indent', 'ruby-method-call-indent',
+'ruby-parenless-call-arguments-indent'.  See the docstrings for
+explanations and examples.
+
 ** Eshell
 
 +++
@@ -2817,7 +2900,7 @@ if only one line of output).  Previously, this only 
converted numbers
 when there was a single line of output.
 
 ---
-*** Built-in Eshell commands now follow POSIX/GNU argument syntax conventions.
+*** Built-in Eshell commands now follow Posix/GNU argument syntax conventions.
 Built-in commands in Eshell now accept command-line options with
 values passed as a single token, such as '-oVALUE' or
 '--option=VALUE'.  New commands can take advantage of this with the
@@ -2931,11 +3014,6 @@ filtered out.
 The list of handlers (already covering OSC 7 and 8) has been extended
 with a handler for OSC 2, the command to set a window title.
 
-+++
-*** New user option 'project-vc-include-untracked'.
-If non-nil, files untracked by a VCS are considered to be part of
-the project by a VC project based on that VCS.
-
 ---
 *** 'recentf-mode' now uses abbreviated file names by default.
 This means that e.g. "/home/foo/bar" is now displayed as "~/bar".
@@ -2987,6 +3065,19 @@ name.
 This key is now bound to 'Buffer-menu-view-other-window', which will
 view this line's buffer in View mode in another window.
 
+** Scheme mode
+
+---
+*** Auto-detection of Scheme library files.
+Emacs now automatically enables the Scheme mode when opening R6RS
+Scheme Library Source ('.sls') files and R7RS Scheme Library
+Definition ('.sld') files.
+
+---
+*** Imenu members for R6RS and R7RS library members.
+Imenu now lists the members directly nested in R6RS Scheme libraries
+('library') and R7RS libraries ('define-library').
+
 
 * New Modes and Packages in Emacs 29.1
 
@@ -2999,7 +3090,7 @@ Protocol (LSP).
 
 +++
 *** use-package: Declarative package configuration.
-use-package is shipped with Emacs.  It provides the 'use-package'
+use-package is now shipped with Emacs.  It provides the 'use-package'
 macro, which allows you to isolate package configuration in your init
 file in a way that is declarative, tidy, and performance-oriented.
 See the new Info manual "(use-package) Top" for more.
@@ -3024,8 +3115,8 @@ manually if needed, using the new user options 
'wallpaper-command' and
 
 +++
 ** New package 'oclosure'.
-Allows the creation of "functions with slots" or "function objects"
-via the macros 'oclosure-define' and 'oclosure-lambda'.
+This allows the creation of "functions with slots" or "function
+objects" via the macros 'oclosure-define' and 'oclosure-lambda'.
 
 +++
 *** New generic function 'oclosure-interactive-form'.
@@ -3048,10 +3139,12 @@ Emacs buffers, like indentation and the like.  The new 
ert function
 This is a lightweight variant of 'js-mode' that is used by default
 when visiting JSON files.
 
++++
 ** New major mode 'csharp-mode'.
 A major mode based on CC Mode for editing programs in the C# language.
 This mode is auto-enabled for files with the ".cs" extension.
 
++++
 ** New major modes based on the tree-sitter library.
 These new major modes are available if Emacs was built with the
 tree-sitter library.  They provide support for font-locking,
@@ -3082,81 +3175,103 @@ If a language grammar library required by a mode is 
not found in any
 of the above places, the mode will signal an error when you try to
 turn it on.
 
++++
 *** New major mode 'typescript-ts-mode'.
 A major mode based on the tree-sitter library for editing programs
 in the TypeScript language.  This mode is auto-enabled for files with
 the ".ts" extension.
 
++++
 *** New major mode 'tsx-ts-mode'.
 A major mode based on the tree-sitter library for editing programs
 in the TypeScript language, with support for TSX.  This mode is
 auto-enabled for files with the ".tsx" extension.
 
++++
 *** New major mode 'c-ts-mode'.
 An optional major mode based on the tree-sitter library for editing
 programs in the C language.
 
++++
 *** New major mode 'c++-ts-mode'.
 An optional major mode based on the tree-sitter library for editing
 programs in the C++ language.
 
++++
 *** New major mode 'java-ts-mode'.
 An optional major mode based on the tree-sitter library for editing
 programs in the Java language.
 
++++
 *** New major mode 'python-ts-mode'.
 An optional major mode based on the tree-sitter library for editing
 programs in the Python language.
 
++++
 *** New major mode 'css-ts-mode'.
 An optional major mode based on the tree-sitter library for editing
 CSS (Cascading Style Sheets).
 
++++
 *** New major mode 'json-ts-mode'.
 An optional major mode based on the tree-sitter library for editing
 programs in the JSON language.
 
++++
 *** New major mode 'csharp-ts-mode'.
 An optional major mode based on the tree-sitter library for editing
 programs in the C# language.
 
++++
 *** New major mode 'bash-ts-mode'.
 Am optional major mode based on the tree-sitter library for editing
 Bash shell scripts.
 
++++
 *** New major mode 'dockerfile-ts-mode'.
 A major mode based on the tree-sitter library for editing
 Dockerfiles.  This mode is auto-enabled for files which are named
 "Dockerfile", have the "Dockerfile." prefix, or have the ".dockerfile"
 extension.
 
++++
 *** New major mode 'cmake-ts-mode'.
 A major mode based on the tree-sitter library for editing CMake files.
 It is auto-enabled for files whose name is "CMakeLists.txt" or whose
 extension is ".cmake".
 
++++
 *** New major mode 'toml-ts-mode'.
 A major mode based on the tree-sitter library for editing files
 written in TOML, a format for writing configuration files.  It is
 auto-enabled for files with the ".toml" extension.
 
++++
 *** New major mode 'go-ts-mode'.
 A major mode based on the tree-sitter library for editing programs in
 the Go language.  It is auto-enabled for files with the ".go" extension.
 
++++
 *** New major mode 'go-mod-ts-mode'.
 A major mode based on the tree-sitter library for editing "go.mod"
 files.  It is auto-enabled for files which are named "go.mod".
 
++++
 *** New major mode 'yaml-ts-mode'.
 A major mode based on the tree-sitter library for editing files
 written in YAML.  It is auto-enabled for files with the ".yaml" or
 ".yml" extensions.
 
++++
 *** New major mode 'rust-ts-mode'.
 A major mode based on the tree-sitter library for editing programs in
 the Rust language.  It is auto-enabled for files with the ".rs" extension.
 
+---
+*** New major mode 'ruby-ts-mode'.
+An optional major mode based on the tree-sitter library for editing
+programs in the Ruby language.
+
 
 * Incompatible Lisp Changes in Emacs 29.1
 
@@ -3174,15 +3289,17 @@ or user level, with the exception of better performance 
and the order
 of overlays returned by functions that don't promise any particular
 order.
 
+---
 *** The function 'overlay-recenter' is now a no-op.
 This function does nothing, and in particular has no effect on the
 value returned by 'overlay-lists'.  The purpose of 'overlay-recenter'
-was to allow more efficient lookup of overlays around certain buffer
+was to allow more efficient lookup of overlays around a certain buffer
 position; however with the new implementation the lookup of overlays
 is efficient regardless of their position, and there's no longer any
-need to "optimize" the lookup, nor any notion of "center" of the
+need to "optimize" the lookup, nor any notion of a "center" of the
 overlays.
 
+---
 *** The function 'overlay-lists' returns one unified list of overlays.
 This function used to return a cons of two lists, one with overlays
 before the "center" position, the other after that "center".  It now
@@ -3206,7 +3323,7 @@ auto-scaling applied.  (This only makes a difference on 
HiDPI
 displays.)
 
 +++
-** Changes to "raw" in-memory xbm images are specified.
+** Changes in how "raw" in-memory xbm images are specified.
 Some years back Emacs gained the ability to scale images, and you
 could then specify ':width' and ':height' when using 'create-image' on all
 image types -- except xbm images, because this format already used the
@@ -3231,7 +3348,7 @@ signal an error in any file.)
 In addition, files are scanned in a slightly different way.
 Previously, ';;;###' specs inside a top-level form (i.e., something
 like '(when ... ;;;### ...)' would be ignored.  They are now parsed as
-normal.
+usual.
 
 ---
 ** Themes have special autoload cookies.
@@ -3271,7 +3388,7 @@ they will still be escaped, so the '.foo' symbol is still 
printed as
 "\.foo" and the '?bar' symbol is still printed as "\?bar".
 
 +++
-** Remapping 'mode-line' no longer works as expected.
+** Remapping 'mode-line' face no longer works as expected.
 'mode-line' is now the parent face of the new 'mode-line-active' face,
 and remapping parent of basic faces does not work reliably.
 Instead of remapping 'mode-line', you have to remap 'mode-line-active'.
@@ -3294,10 +3411,10 @@ needed.
 *** Emacs now supports 'medium' fonts.
 Emacs previously didn't distinguish between the 'regular'/'normal'
 weight and the 'medium' weight, but it now also supports the (heavier)
-'medium' weight.  However, this means that if you previously specified
-a weight of 'normal' and the font doesn't have this weight, Emacs
-won't find the font spec.  In these cases, replacing ":weight 'normal"
-with ":weight 'medium" should fix the issue.
+'medium' weight.  However, this means that if you specify a weight of
+'normal' and the font doesn't have this weight, Emacs won't find the
+font spec.  In these cases, replacing ":weight 'normal" with ":weight
+'medium" should fix the issue.
 
 ---
 ** Keymap descriptions have changed.
@@ -3492,9 +3609,8 @@ but switching to 'ash' is generally much preferable.
 
 +++
 ** New generic function 'function-documentation'.
-Can dynamically generate a raw docstring depending on the type of
-a function.
-Used mainly for docstrings of OClosures.
+It can dynamically generate a raw docstring depending on the type of a
+function.  Used mainly for docstrings of OClosures.
 
 +++
 ** Base64 encoding no longer tolerates latin-1 input.
@@ -3502,7 +3618,7 @@ The functions 'base64-encode-string', 
'base64url-encode-string',
 'base64-encode-region' and 'base64url-encode-region' no longer accept
 characters in the range U+0080..U+00FF as substitutes for single bytes
 in the range 128..255, but signal an error for all multibyte characters.
-The input must be encoded text.
+The input must be unibyte encoded text.
 
 +++
 ** The 'clone-indirect-buffer-hook' is now run by 'make-indirect-buffer'.
@@ -3654,7 +3770,7 @@ These function now take an optional comparison predicate 
argument.
 
 +++
 ** 'completing-read' now allows a function as its REQUIRE-MATCH argument.
-This function is called to see whether what the user has typed in is a
+This function is called to see whether what the user has typed is a
 match.  This is also available from functions that call
 'completing-read', like 'read-file-name'.
 
@@ -3666,10 +3782,10 @@ Previously, it reported data only based on the frame.
 ** 'file-expand-wildcards' can now also take a regexp as PATTERN argument.
 
 ---
-** vc-mtn (the backend for Monotone) has been made obsolete.
+** vc-mtn (the VC backend for Monotone) has been made obsolete.
 
 +++
-** 'gui-set-selection' can now specify different values for different data 
types.
+** 'gui-set-selection' can specify different values for different data types.
 If DATA is a string, then its text properties are searched for values
 for each specific data type while the selection is being converted.
 
@@ -3689,6 +3805,7 @@ things to be saved.
 ** New function 'string-equal-ignore-case'.
 This compares strings ignoring case differences.
 
++++
 ** 'symbol-file' can now report natively-compiled ".eln" files.
 If Emacs was built with native-compilation enabled, Lisp programs can
 now call 'symbol-file' with the new optional 3rd argument non-nil to
@@ -3706,21 +3823,21 @@ Standard.
 ** seq
 
 +++
-** New function 'seq-split'.
+*** New function 'seq-split'.
 This returns a list of sub-sequences of the specified sequence.
 
 +++
-** New function 'seq-remove-at-position'.
+*** New function 'seq-remove-at-position'.
 This function returns a copy of the specified sequence where the
 element at a given (zero-based) index got removed.
 
 +++
-** New function 'seq-positions'.
+*** New function 'seq-positions'.
 This returns a list of the (zero-based) indices of elements matching a
 given predicate in the specified sequence.
 
 +++
-** New function 'seq-keep'.
+*** New function 'seq-keep'.
 This is like 'seq-map', but removes all nil results from the returned
 list.
 
@@ -3825,7 +3942,7 @@ available only when Emacs was built with glibc as the C 
library.
 
 ---
 ** 'x-show-tip' no longer hard-codes a timeout default.
-The new 'x-show-tooltip-timeout' variable allows the user to alter
+The new variable 'x-show-tooltip-timeout' allows the user to alter
 this for packages that don't use 'tooltip-show', but instead call the
 lower level function directly.
 
@@ -3837,8 +3954,8 @@ example for benchmarking purposes.
 ---
 ** New function 'string-edit'.
 This is meant to be used when the user has to edit a (potentially)
-long string.  It pops you to a new buffer where you can edit the
-string, and a callback is called when the user types 'C-c C-c'.
+long string.  It pops up a new buffer where you can edit the string,
+and a callback is called when the user types 'C-c C-c'.
 
 +++
 ** New function 'read-string-from-buffer'.
@@ -3857,8 +3974,8 @@ putting the modes on the first line of a file).
 
 +++
 ** New function 'flush-standard-output'.
-This enables you to display incomplete lines from batch-based Emacs
-scripts.
+This enables display of lines that don't end in a newline from
+batch-based Emacs scripts.
 
 +++
 ** New convenience function 'buttonize-region'.
@@ -3878,7 +3995,7 @@ from which the last input event originated, and 
'device-class' can be
 used to determine the type of an input device.
 
 +++
-** 'track-mouse' can be a new value 'drag-source'.
+** 'track-mouse' can have a new value 'drag-source'.
 This means the same as 'dropping', but modifies the mouse position
 list in reported motion events if there is no frame underneath the
 mouse pointer.
@@ -3927,7 +4044,10 @@ frequently than once in a second.
 ---
 ** New function 'bidi-string-strip-control-characters'.
 This utility function is meant for displaying strings when it's
-essential that there's no bidirectional context.
+essential that there's no bidirectional context.  It removes all the
+bidirectional formatting control characters (such as RLM, LRO, PDF,
+etc.) from its argument string.  The characters it removes are listed
+in the value of 'bidi-control-characters'.
 
 ---
 ** The Gnus range functions have been moved to a new library, range.el.
@@ -3999,7 +4119,7 @@ where 'major-mode' is 'shell-mode' or a combined with a 
condition like
 
 +++
 ** New function 'match-buffers'.
-Use 'buffer-match-p' to gather a list of buffers that match a
+It uses 'buffer-match-p' to gather a list of buffers that match a
 condition.
 
 ---
@@ -4024,8 +4144,8 @@ to attackers trying to confuse the users will use the 
textsec library
 to mark suspicious text.  For instance shr/eww will mark suspicious
 URLs and links, Gnus will mark suspicious From addresses, and
 Message mode will query the user if the user is sending mail to a
-suspicious address.  If this variable is nil, these checks aren't
-performed.
+suspicious address.  If this variable is nil, these checks are
+disabled.
 
 +++
 *** New function 'textsec-suspicious-p'.
@@ -4344,7 +4464,8 @@ aren't integer multiples of the default font.
 ** New function 'string-glyph-split'.
 This function splits a string into a list of strings representing
 separate glyphs.  This takes into account combining characters and
-grapheme clusters.
+grapheme clusters, by treating each sequence of characters composed on
+display as a single unit.
 
 ---
 ** 'lookup-key' is more permissive when searching for extended menu items.
@@ -4435,9 +4556,10 @@ temporary transition aid for Emacs 27, has served its 
purpose.
 '(encode-time (list SECOND MINUTE HOUR DAY MONTH YEAR nil -1 nil))'.
 
 +++
-** 'date-to-time' now assumes earliest values if its argument lacks
-month, day, or time.  For example, (date-to-time "2021-12-04") now
-assumes a time of 00:00 instead of signaling an error.
+** 'date-to-time' now accepts arguments that lacks month, day, or time.
+The function now assumes the earliest possible values if its argument
+lacks month, day, or time.  For example, (date-to-time "2021-12-04")
+now assumes a time of 00:00 instead of signaling an error.
 
 +++
 ** 'format-seconds' now allows suppressing zero-value trailing elements.
@@ -4594,6 +4716,15 @@ where those APIs are available.
 When 'w32-use-native-image-API' is non-nil, Emacs on MS-Windows now
 has built-in support for displaying BMP images.
 
+---
+*** GUI Yes/No dialogs now include a "Cancel" button.
+The "Cancel" button is in addition to "Yes" and "No", and is intended
+to allow users to quit the dialog, as an equivalent of C-g when Emacs
+asks a yes/no question via the echo area.  This is controlled by the
+new variable 'w32-yes-no-dialog-show-cancel', by default t.  Set it to
+nil to get back the old behavior of showing a modal dialog with only
+two buttons: "Yes" and "No".
+
 ** Cygwin
 
 ---
diff --git a/etc/NEXTSTEP b/etc/NEXTSTEP
index 0570f707959..547f146c623 100644
--- a/etc/NEXTSTEP
+++ b/etc/NEXTSTEP
@@ -1,4 +1,4 @@
-Copyright (C) 2008-2022 Free Software Foundation, Inc.
+Copyright (C) 2008-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 This file contains information about GNU Emacs on "Nextstep" platforms.
diff --git a/etc/NXML-NEWS b/etc/NXML-NEWS
index b5301ee2cf6..2bd2cc6e326 100644
--- a/etc/NXML-NEWS
+++ b/etc/NXML-NEWS
@@ -1,4 +1,4 @@
-Copyright (C) 2007-2022 Free Software Foundation, Inc.
+Copyright (C) 2007-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 67889c0b109..d610a63b09d 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -6,7 +6,7 @@ ORG NEWS -- history of user-visible changes.   -*- mode: org; 
coding: utf-8 -*-
 #+LINK: msg https://list.orgmode.org/%s/
 #+LINK: git https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=%s
 
-Copyright (C) 2012-2022 Free Software Foundation, Inc.
+Copyright (C) 2012-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Org bug reports to mailto:emacs-orgmode@gnu.org.
@@ -24,7 +24,7 @@ the time being.  It will be removed in the next release.
 
 See https://orgmode.org/list/87r0yk7bx8.fsf@localhost for more details.
 
-*** Element cache is enabled by default and work for headings
+*** Element cache is enabled by default and works for headings
 
 The old element cache code has been refactored.  Emacs does not hang
 anymore when the cache is enabled.
@@ -733,7 +733,7 @@ following snippet to allow multiple different ID formats in 
Org files.
           (and (or (org-uuidgen-p id)
                   (string-match-p "[0-9a-z]\\{12\\}" id))
               (org-attach-id-uuid-folder-format id)))
-        ;; When ID looks like a timestap-based ID. Group by year-month
+        ;; When ID looks like a timestamp-based ID. Group by year-month
         ;; folders.
         (lambda (id)
           (and (string-match-p "[0-9]\\{8\\}T[0-9]\\{6\\}\.[0-9]\\{6\\}" id)
@@ -5431,9 +5431,9 @@ doing computation.
 
 There are now three lookup functions:
 
-- [[doc:org-loopup-first][org-loopup-first]]
-- [[doc:org-loopup-last][org-loopup-last]]
-- [[doc:org-loopup-all][org-loopup-all]]
+- [[doc:org-lookup-first][org-lookup-first]]
+- [[doc:org-lookup-last][org-lookup-last]]
+- [[doc:org-lookup-all][org-lookup-all]]
 
 See [[https://orgmode.org/org.html#Lookup-functions][the manual]] for details.
 *** Startup keywords
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index f1140499859..d4354e5f7ae 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -1,6 +1,6 @@
 Known Problems with GNU Emacs
 
-Copyright (C) 1987-1989, 1993-1999, 2001-2022 Free Software Foundation,
+Copyright (C) 1987-1989, 1993-1999, 2001-2023 Free Software Foundation,
 Inc.
 See the end of the file for license conditions.
 
@@ -3193,7 +3193,7 @@ something like the following in your init file:
 
 ** Native Compilation on macOS
 
-Native complitation requires the libgccjit library to be installed and
+Native compilation requires the libgccjit library to be installed and
 its path available to Emacs.  Errors such as:
 
     libgccjit.so: error: error invoking gcc driver
@@ -3499,6 +3499,18 @@ with development builds, since the .elc files are 
pre-compiled in releases.
 
 ** Dumping
 
+*** temacs.exe fails to run when invoked by the build for dumping
+
+The error message might be something like
+
+  make[2]: *** [Makefile:915: bootstrap-emacs.pdmp] Error 127
+
+This happens if you try to build Emacs on versions of MS-Windows older
+than the minimum version supported by MinGW-w64.  As of Dec 2022, the
+minimum supported Windows version is 8.1, and the computer hardware
+(CPU, memory, disk) should also match the minimum Windows 8.1
+requirements.
+
 *** Segfault during 'make'
 
 If Emacs segfaults when 'make' executes one of these commands:
diff --git a/etc/README b/etc/README
index d343160b50e..2884b0a039a 100644
--- a/etc/README
+++ b/etc/README
@@ -7,5 +7,5 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 File: emacs.icon
   Author: Sun Microsystems, Inc
-  Copyright (C) 1999, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1999, 2001-2023 Free Software Foundation, Inc.
   License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/TERMS b/etc/TERMS
index ed7d0d09de7..444e194f8c0 100644
--- a/etc/TERMS
+++ b/etc/TERMS
@@ -1,4 +1,4 @@
-Copyright (C) 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1999, 2001-2023 Free Software Foundation, Inc.
 See the end of the file for copying permissions.
 
 This file describes what you must or might want to do to termcap entries
diff --git a/etc/TODO b/etc/TODO
index bf304362705..f097e76b917 100644
--- a/etc/TODO
+++ b/etc/TODO
@@ -1,6 +1,6 @@
 Emacs TODO List                                                   -*-outline-*-
 
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/charsets/README b/etc/charsets/README
index e513fcb815e..4916972b2d6 100644
--- a/etc/charsets/README
+++ b/etc/charsets/README
@@ -1,6 +1,6 @@
 # README file for charset mapping files in this directory.
 
-# Copyright (C) 2003-2022 Free Software Foundation, Inc.
+# Copyright (C) 2003-2023 Free Software Foundation, Inc.
 # 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/etc/compilation.txt b/etc/compilation.txt
index fc254dd3d77..672cbebafff 100644
--- a/etc/compilation.txt
+++ b/etc/compilation.txt
@@ -688,7 +688,7 @@ Compilation segmentation fault at Thu Jul 13 10:55:49
 Compilation finished at Thu Jul 21 15:02:15
 
 
-Copyright (C) 2004-2022 Free Software Foundation, Inc.
+Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/edt-user.el b/etc/edt-user.el
index fbeadc8789d..1a9216adaed 100644
--- a/etc/edt-user.el
+++ b/etc/edt-user.el
@@ -1,6 +1,6 @@
 ;;; edt-user.el --- Sample user customizations for Emacs EDT emulation -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1986, 1992-1993, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1986, 1992-1993, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Kevin Gallagher <kevin.gal@verizon.net>
diff --git a/etc/emacs-buffer.gdb b/etc/emacs-buffer.gdb
index 96320b157a9..dd01d48855c 100644
--- a/etc/emacs-buffer.gdb
+++ b/etc/emacs-buffer.gdb
@@ -1,6 +1,6 @@
 # emacs-buffer.gdb --- gdb macros for recovering buffers from emacs coredumps
 
-# Copyright (C) 2005-2022 Free Software Foundation, Inc.
+# Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 # Author: Noah Friedman <friedman@splode.com>
 # Created: 2005-04-28
diff --git a/etc/emacs.metainfo.xml b/etc/emacs.metainfo.xml
index 11df8a7159c..65b0eda62ec 100644
--- a/etc/emacs.metainfo.xml
+++ b/etc/emacs.metainfo.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2014-2022 Free Software Foundation, Inc. -->
+<!-- Copyright (C) 2014-2023 Free Software Foundation, Inc. -->
 <component type="desktop-application">
  <id>org.gnu.emacs</id>
  <metadata_license>GFDL-1.3+</metadata_license>
diff --git a/etc/emacs_lldb.py b/etc/emacs_lldb.py
index a2329e6ea4f..609815613bf 100644
--- a/etc/emacs_lldb.py
+++ b/etc/emacs_lldb.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2022 Free Software Foundation, Inc.
+# Copyright (C) 2022-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/etc/emacsclient-mail.desktop b/etc/emacsclient-mail.desktop
index b575a41758a..91df122c594 100644
--- a/etc/emacsclient-mail.desktop
+++ b/etc/emacsclient-mail.desktop
@@ -1,7 +1,7 @@
 [Desktop Entry]
 Categories=Network;Email;
 Comment=GNU Emacs is an extensible, customizable text editor - and more
-Exec=sh -c "exec emacsclient --alternate-editor= --display=\\"\\$DISPLAY\\" 
--eval \\\\(message-mailto\\\\ \\\\\\"%u\\\\\\"\\\\)"
+Exec=sh -c "exec emacsclient --alternate-editor= --display=\\"\\$DISPLAY\\" 
--eval \\"(message-mailto \\\\\\"\\$1\\\\\\")\\"" sh %u
 Icon=emacs
 Name=Emacs (Mail, Client)
 MimeType=x-scheme-handler/mailto;
@@ -13,7 +13,7 @@ Actions=new-window;new-instance;
 
 [Desktop Action new-window]
 Name=New Window
-Exec=emacsclient --alternate-editor= --create-frame --eval "(message-mailto 
\\"%u\\")"
+Exec=sh -c "exec emacsclient --alternate-editor= --create-frame --eval 
\\"(message-mailto \\\\\\"\\$1\\\\\\")\\"" sh %u
 
 [Desktop Action new-instance]
 Name=New Instance
diff --git a/etc/emacsclient.desktop b/etc/emacsclient.desktop
index 1ecdecffafd..a9f840c7033 100644
--- a/etc/emacsclient.desktop
+++ b/etc/emacsclient.desktop
@@ -3,7 +3,7 @@ Name=Emacs (Client)
 GenericName=Text Editor
 Comment=Edit text
 
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
-Exec=sh -c "if [ -n \\"\\$*\\" ]; then exec emacsclient --alternate-editor= 
--display=\\"\\$DISPLAY\\" \\"\\$@\\"; else exec emacsclient 
--alternate-editor= --create-frame; fi" placeholder %F
+Exec=sh -c "if [ -n \\"\\$*\\" ]; then exec emacsclient --alternate-editor= 
--display=\\"\\$DISPLAY\\" \\"\\$@\\"; else exec emacsclient 
--alternate-editor= --create-frame; fi" sh %F
 Icon=emacs
 Type=Application
 Terminal=false
diff --git a/etc/enriched.txt b/etc/enriched.txt
index 2d970d197b8..5828a6e68a7 100644
--- a/etc/enriched.txt
+++ b/etc/enriched.txt
@@ -259,7 +259,7 @@ it.</indent>
 
 
 
-Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/forms/forms-d2.el b/etc/forms/forms-d2.el
index a333441f344..afdf5119bb4 100644
--- a/etc/forms/forms-d2.el
+++ b/etc/forms/forms-d2.el
@@ -1,6 +1,6 @@
 ;;; forms-d2.el --- demo forms-mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1991, 1994-1997, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1991, 1994-1997, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Johan Vromans <jvromans@squirrel.nl>
diff --git a/etc/gnus-tut.txt b/etc/gnus-tut.txt
index 8ab718f5d2f..9212a81be27 100644
--- a/etc/gnus-tut.txt
+++ b/etc/gnus-tut.txt
@@ -24,7 +24,7 @@ was done by moi, yours truly, your humble servant, Lars Magne
 Ingebrigtsen.  If you have a WWW browser, you can investigate to your
 heart's delight at <URL:http://www.ifi.uio.no/~larsi/larsi.html>.
 
-;; Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
 ;; Keywords: news
diff --git a/etc/grep.txt b/etc/grep.txt
index ff90553d88b..99e6d3641be 100644
--- a/etc/grep.txt
+++ b/etc/grep.txt
@@ -104,7 +104,7 @@ grep -nH -e "xyzxyz" ../info/*
 
 * Miscellaneous
 
-Copyright (C) 2005-2022 Free Software Foundation, Inc.
+Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/images/README b/etc/images/README
index 858f33e40ba..5886f641536 100644
--- a/etc/images/README
+++ b/etc/images/README
@@ -27,19 +27,19 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 File: mh-logo.xpm
   Author: Satyaki Das
-  Copyright (C) 2003-2022 Free Software Foundation, Inc.
+  Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 Files: gnus.pbm
   Author: Luis Fernandes <elf@ee.ryerson.ca>
-  Copyright (C) 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 Files: splash.png, splash.svg, splash.pbm, splash.xpm
   Author: Francesc Rocher <francesc.rocher@gmail.com>
-  Copyright (C) 2008-2022 Free Software Foundation, Inc.
+  Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 Files: checked.xpm, unchecked.xpm
   Author: Chong Yidong <cyd@stupidchicken.com>
-  Copyright (C) 2010-2022 Free Software Foundation, Inc.
+  Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 
 * The following icons are from GTK+ 2.x. They are not part of Emacs, but
diff --git a/etc/images/custom/README b/etc/images/custom/README
index 4238d3d1334..7ed66523ecd 100644
--- a/etc/images/custom/README
+++ b/etc/images/custom/README
@@ -6,5 +6,5 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 Files: down.xpm down-pushed.xpm right.xpm right-pushed.xpm
 Author: Juri Linkov
-Copyright (C) 2008-2022 Free Software Foundation, Inc.
+Copyright (C) 2008-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/ezimage/README b/etc/images/ezimage/README
index 80f128ae997..4d2482de515 100644
--- a/etc/images/ezimage/README
+++ b/etc/images/ezimage/README
@@ -7,5 +7,5 @@ Files: bits.xpm bitsbang.xpm box-minus.xpm box-plus.xpm
        tag-gt.xpm tag-minus.xpm tag-plus.xpm tag-type.xpm tag-v.xpm
        tag.xpm unlock.xpm
 Author: Eric M. Ludlam
-Copyright (C) 1999-2022 Free Software Foundation, Inc.
+Copyright (C) 1999-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/gnus/README b/etc/images/gnus/README
index db039d792dc..f05cf0f7f10 100644
--- a/etc/images/gnus/README
+++ b/etc/images/gnus/README
@@ -7,7 +7,7 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 Files: important.xpm, unimportant.xpm
 Author: Simon Josefsson <simon@josefsson.org>
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 Files: catchup.pbm catchup.xpm cu-exit.pbm cu-exit.xpm
   describe-group.pbm describe-group.xpm exit-gnus.pbm exit-gnus.xpm
@@ -21,11 +21,11 @@ Files: catchup.pbm catchup.xpm cu-exit.pbm cu-exit.xpm
   unsubscribe.pbm unsubscribe.xpm uu-decode.pbm uu-decode.xpm
   uu-post.pbm uu-post.xpm
 Author: Luis Fernandes <elf@ee.ryerson.ca>
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 Files: gnus.png, gnus.svg
   Author: Francesc Rocher <rocher@member.fsf.org>
-  Copyright (C) 2008-2022 Free Software Foundation, Inc.
+  Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 
 * The following icons are from GNOME 2.x. They are not part of Emacs,
diff --git a/etc/images/gnus/gnus.svg b/etc/images/gnus/gnus.svg
index 1733af900bb..14f96da5e55 100644
--- a/etc/images/gnus/gnus.svg
+++ b/etc/images/gnus/gnus.svg
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!-- Gnu Emacs Logo
 
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    Author: Francesc Rocher <f.rocher@member.fsf.org>
 
diff --git a/etc/images/gud/README b/etc/images/gud/README
index c56c3fc0ee3..6a06a2671ac 100644
--- a/etc/images/gud/README
+++ b/etc/images/gud/README
@@ -1,7 +1,7 @@
 COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 The following icons were created by Nick Roberts <nickrob@snap.net.nz>.
-Copyright (C) 2002-2022 Free Software Foundation, Inc.
+Copyright (C) 2002-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
   break.pbm, nexti.pbm, go.pbm, pp.pbm, print.pbm, pstar.pbm, remove.pbm
diff --git a/etc/images/icons/README b/etc/images/icons/README
index ca2d3733ed6..bb455980ca7 100644
--- a/etc/images/icons/README
+++ b/etc/images/icons/README
@@ -6,7 +6,7 @@ Files: hicolor/16x16/apps/emacs.png hicolor/24x24/apps/emacs.png
        hicolor/scalable/mimetypes/emacs-document.svg
 
 Author: Nicolas Petton <nicolas@petton.fr>
-Copyright (C) 2015-2022 Free Software Foundation, Inc.
+Copyright (C) 2015-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
 Files: hicolor/16x16/apps/emacs23.png hicolor/24x24/apps/emacs23.png
@@ -14,7 +14,7 @@ Files: hicolor/16x16/apps/emacs23.png 
hicolor/24x24/apps/emacs23.png
        hicolor/128x128/apps/emacs23.png hicolor/scalable/apps/emacs23.svg
 
 Author: Kentaro Ohkouchi <nanasess@fsm.ne.jp>
-Copyright (C) 2007-2022 Free Software Foundation, Inc.
+Copyright (C) 2007-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
 
@@ -22,7 +22,7 @@ Files: hicolor/16x16/apps/emacs22.png 
hicolor/24x24/apps/emacs22.png
        hicolor/32x32/apps/emacs22.png hicolor/48x48/apps/emacs22.png
 
 Author: Andrew Zhilin <andrew_zhilin@yahoo.com>
-Copyright (C) 2005-2022 Free Software Foundation, Inc.
+Copyright (C) 2005-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
 Files: allout-widgets-dark-bg/closed.png
@@ -71,5 +71,5 @@ Files: allout-widgets-dark-bg/closed.png
        allout-widgets-light-bg/through-descender.xpm
 
 Author: Ken Manheimer <ken.manheimer@gmail.com>
-Copyright (C) 2011-2022 Free Software Foundation, Inc.
+Copyright (C) 2011-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/icons/hicolor/scalable/apps/emacs.svg 
b/etc/images/icons/hicolor/scalable/apps/emacs.svg
index 6a2c77ed6a7..a7da237a720 100644
--- a/etc/images/icons/hicolor/scalable/apps/emacs.svg
+++ b/etc/images/icons/hicolor/scalable/apps/emacs.svg
@@ -15,7 +15,7 @@
      id="metadata70"><rdf:RDF><cc:Work
          rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage"; 
/><dc:title></dc:title></cc:Work></rdf:RDF></metadata><!-- Gnu Emacs Icon
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    Author: Nicolas Petton <nicolas@petton.fr>
 
diff --git a/etc/images/icons/hicolor/scalable/apps/emacs23.svg 
b/etc/images/icons/hicolor/scalable/apps/emacs23.svg
index 95f732a66ed..966c265ffcf 100644
--- a/etc/images/icons/hicolor/scalable/apps/emacs23.svg
+++ b/etc/images/icons/hicolor/scalable/apps/emacs23.svg
@@ -10,7 +10,7 @@
    id="svg4768"
    xml:space="preserve">
 <!-- Gnu Emacs Icon
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    This file is part of GNU Emacs.
 
diff --git a/etc/images/icons/hicolor/scalable/mimetypes/emacs-document23.svg 
b/etc/images/icons/hicolor/scalable/mimetypes/emacs-document23.svg
index 04e4c084df3..23373c6ad08 100644
--- a/etc/images/icons/hicolor/scalable/mimetypes/emacs-document23.svg
+++ b/etc/images/icons/hicolor/scalable/mimetypes/emacs-document23.svg
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!-- Gnu Emacs Document Icon
 
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    This file is part of GNU Emacs.
 
diff --git a/etc/images/mpc/README b/etc/images/mpc/README
index bf84c769093..27e1b356dc5 100644
--- a/etc/images/mpc/README
+++ b/etc/images/mpc/README
@@ -2,5 +2,5 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 Files: add.xpm ffwd.xpm next.xpm pause.xpm play.xpm prev.xpm rewind.xpm 
stop.xpm
 Author: Stefan Monnier <monnier@iro.umontreal.ca>
-Copyright (C) 2009-2022 Free Software Foundation, Inc.
+Copyright (C) 2009-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/newsticker/README b/etc/images/newsticker/README
index 19e042db638..dafa77ea186 100644
--- a/etc/images/newsticker/README
+++ b/etc/images/newsticker/README
@@ -4,5 +4,5 @@ Files: browse-url.xpm get-all.xpm mark-immortal.xpm 
mark-read.xpm
        narrow.xpm next-feed.xpm next-item.xpm prev-feed.xpm
        prev-item.xpm rss-feed.png rss-feed.svg update.xpm
 Author: Ulf Jasper
-Copyright (C) 2011-2022 Free Software Foundation, Inc.
+Copyright (C) 2011-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/smilies/README b/etc/images/smilies/README
index a454f27313d..20a17376bf7 100644
--- a/etc/images/smilies/README
+++ b/etc/images/smilies/README
@@ -3,5 +3,5 @@ Files: blink.pbm blink.xpm braindamaged.xpm cry.xpm dead.xpm 
evil.xpm
        sad.xpm smile.pbm smile.xpm wry.pbm wry.xpm
 Authors: Reiner Steib, Simon Josefsson, Kai Grossjohann, Alex
          Schroeder, Oliver Scholz, Per Abrahamsen, Kim F. Storm.
-Copyright (C) 1999-2022 Free Software Foundation, Inc.
+Copyright (C) 1999-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/smilies/grayscale/README 
b/etc/images/smilies/grayscale/README
index f4ead742caa..5b3422866dd 100644
--- a/etc/images/smilies/grayscale/README
+++ b/etc/images/smilies/grayscale/README
@@ -3,5 +3,5 @@ Files: blink.xpm braindamaged.xpm cry.xpm dead.xpm evil.xpm 
forced.xpm
        frown.xpm grin.xpm indifferent.xpm reverse-smile.xpm sad.xpm
        smile.xpm wry.xpm
 Author: Adam Sjøgren
-Copyright (C) 2007-2022 Free Software Foundation, Inc.
+Copyright (C) 2007-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/smilies/medium/README b/etc/images/smilies/medium/README
index f4ead742caa..5b3422866dd 100644
--- a/etc/images/smilies/medium/README
+++ b/etc/images/smilies/medium/README
@@ -3,5 +3,5 @@ Files: blink.xpm braindamaged.xpm cry.xpm dead.xpm evil.xpm 
forced.xpm
        frown.xpm grin.xpm indifferent.xpm reverse-smile.xpm sad.xpm
        smile.xpm wry.xpm
 Author: Adam Sjøgren
-Copyright (C) 2007-2022 Free Software Foundation, Inc.
+Copyright (C) 2007-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/splash.svg b/etc/images/splash.svg
index 4c583aa1028..cfb027b8f94 100644
--- a/etc/images/splash.svg
+++ b/etc/images/splash.svg
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!-- Gnu Emacs Logo
 
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    Author: Francesc Rocher <francesc.rocher@gmail.com>
    Based on the original work by Luis Fernandes <elf@ee.ryerson.ca>
diff --git a/etc/images/tabs/README b/etc/images/tabs/README
index 4d9083fca5d..d9a1b814b72 100644
--- a/etc/images/tabs/README
+++ b/etc/images/tabs/README
@@ -4,5 +4,5 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 Files: close.xpm new.xpm left-arrow.xpm right-arrow.xpm
 Author: Juri Linkov <juri@linkov.net>
-Copyright (C) 2019-2022 Free Software Foundation, Inc.
+Copyright (C) 2019-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/tree-widget/default/README 
b/etc/images/tree-widget/default/README
index 561cde9d56c..88e9328d52e 100644
--- a/etc/images/tree-widget/default/README
+++ b/etc/images/tree-widget/default/README
@@ -5,5 +5,5 @@ Files: close.png close.xpm empty.png empty.xpm end-guide.png 
end-guide.xpm
        no-guide.png no-guide.xpm no-handle.png no-handle.xpm open.png
        open.xpm
 Author: David Ponce <david.ponce@wanadoo.fr>
-Copyright (C) 2004-2022 Free Software Foundation, Inc.
+Copyright (C) 2004-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/tree-widget/folder/README 
b/etc/images/tree-widget/folder/README
index 41983108d9d..992159dff2a 100644
--- a/etc/images/tree-widget/folder/README
+++ b/etc/images/tree-widget/folder/README
@@ -5,5 +5,5 @@ Files:  close.png close.xpm empty.png empty.xpm end-guide.png
         leaf.png leaf.xpm no-guide.png no-guide.xpm no-handle.png
         no-handle.xpm open.png open.xpm
 Author: David Ponce <david.ponce@wanadoo.fr>
-Copyright (C) 2004-2022 Free Software Foundation, Inc.
+Copyright (C) 2004-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/org.gnu.emacs.defaults.gschema.xml 
b/etc/org.gnu.emacs.defaults.gschema.xml
index d4299c25c9c..06ff42c438f 100644
--- a/etc/org.gnu.emacs.defaults.gschema.xml
+++ b/etc/org.gnu.emacs.defaults.gschema.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2019-2020, 2022 Free Software Foundation, Inc. -->
+<!-- Copyright (C) 2019-2020, 2022-2023 Free Software Foundation, Inc. -->
 <schemalist>
 
   <schema id="org.gnu.emacs.defaults">
diff --git a/etc/org/README b/etc/org/README
index af15f95ab0d..3737c8df9ac 100644
--- a/etc/org/README
+++ b/etc/org/README
@@ -1,7 +1,7 @@
 The files OrgOdtContentTemplate.xml and OrgOdtStyles.xml have the
 following copyright information:
 
-Copyright (C) 2010-2022 Free Software Foundation, Inc.
+Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 These files are part of GNU Emacs.
 
diff --git a/etc/package-keyring.gpg b/etc/package-keyring.gpg
index 490dee41a92..563acbb16b6 100644
Binary files a/etc/package-keyring.gpg and b/etc/package-keyring.gpg differ
diff --git a/etc/ps-prin0.ps b/etc/ps-prin0.ps
index 53f4cac3553..ba35337e4e4 100644
--- a/etc/ps-prin0.ps
+++ b/etc/ps-prin0.ps
@@ -1,7 +1,7 @@
 % === BEGIN ps-print prologue 0
 % version: 6.0
 
-% Copyright (C) 2000-2022 Free Software Foundation, Inc.
+% Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 % This file is part of GNU Emacs.
 
diff --git a/etc/ps-prin1.ps b/etc/ps-prin1.ps
index a9e6615dac7..37512a86ab9 100644
--- a/etc/ps-prin1.ps
+++ b/etc/ps-prin1.ps
@@ -1,7 +1,7 @@
 % === BEGIN ps-print prologue 1
 % version: 6.1
 
-% Copyright (C) 2000-2022 Free Software Foundation, Inc.
+% Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 % This file is part of GNU Emacs.
 
diff --git a/etc/publicsuffix.txt b/etc/publicsuffix.txt
index 60d72fd0d53..54988c7187c 100644
--- a/etc/publicsuffix.txt
+++ b/etc/publicsuffix.txt
@@ -7171,7 +7171,7 @@ org.zw
 
 // newGTLDs
 
-// List of new gTLDs imported from 
https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 
2022-11-29T15:14:18Z
+// List of new gTLDs imported from 
https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 
2022-12-07T15:13:11Z
 // This list is auto-generated, don't edit it manually.
 // aaa : 2015-02-26 American Automobile Association, Inc.
 aaa
@@ -10461,9 +10461,6 @@ xin
 // xn--jlq480n2rg : 2019-12-19 Amazon Registry Services, Inc.
 亚马逊
 
-// xn--jlq61u9w7b : 2015-01-08 Nokia Corporation
-诺基亚
-
 // xn--jvr189m : 2015-02-26 Amazon Registry Services, Inc.
 食品
 
diff --git a/etc/refcards/Makefile b/etc/refcards/Makefile
index 4c5daa9f44c..9bc7564395a 100644
--- a/etc/refcards/Makefile
+++ b/etc/refcards/Makefile
@@ -1,6 +1,6 @@
 ### Makefile for Emacs refcards
 
-## Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+## Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 #
diff --git a/etc/refcards/README b/etc/refcards/README
index 8e5eb5c89c8..7e3c7d65d6c 100644
--- a/etc/refcards/README
+++ b/etc/refcards/README
@@ -1,4 +1,4 @@
-Copyright (C) 2013-2022 Free Software Foundation, Inc.
+Copyright (C) 2013-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/refcards/calccard.tex b/etc/refcards/calccard.tex
index 987ab394116..ce70b6271e5 100644
--- a/etc/refcards/calccard.tex
+++ b/etc/refcards/calccard.tex
@@ -20,7 +20,7 @@
 % Typical command to format:  tex calccard.tex
 % Typical command to print (3 cols):  dvips -t landscape calccard.dvi
 
-% Copyright (C) 1987, 1992, 2001--2022 Free Software Foundation, Inc.
+% Copyright (C) 1987, 1992, 2001--2023 Free Software Foundation, Inc.
 
 % This document is free software: you can redistribute it and/or modify
 % it under the terms of the GNU General Public License as published by
diff --git a/etc/refcards/cs-dired-ref.tex b/etc/refcards/cs-dired-ref.tex
index 689ceff3665..6f865ca26c7 100644
--- a/etc/refcards/cs-dired-ref.tex
+++ b/etc/refcards/cs-dired-ref.tex
@@ -1,6 +1,6 @@
 % Reference Card for Dired -*- coding: utf-8 -*-
 
-% Copyright (C) 2000--2022 Free Software Foundation, Inc.
+% Copyright (C) 2000--2023 Free Software Foundation, Inc.
 
 % Author: Evgeny Roubinchtein <eroubinc@u.washington.edu>
 % Czech translation: Pavel Janík <Pavel@Janik.cz>, March 2001
diff --git a/etc/refcards/cs-refcard.tex b/etc/refcards/cs-refcard.tex
index e598caeec48..a949b3d19d2 100644
--- a/etc/refcards/cs-refcard.tex
+++ b/etc/refcards/cs-refcard.tex
@@ -1,6 +1,6 @@
 % Reference Card for GNU Emacs -*- coding: utf-8 -*-
 
-% Copyright (C) 1987, 1993, 1996--1997, 2001--2022 Free Software
+% Copyright (C) 1987, 1993, 1996--1997, 2001--2023 Free Software
 % Foundation, Inc.
 
 % Author: Stephen Gildea <stepheng+emacs@gildea.com>
diff --git a/etc/refcards/cs-survival.tex b/etc/refcards/cs-survival.tex
index 542195c7fb4..59885e92654 100644
--- a/etc/refcards/cs-survival.tex
+++ b/etc/refcards/cs-survival.tex
@@ -1,6 +1,6 @@
 % Title:  GNU Emacs Survival Card -*- coding: utf-8 -*-
 
-% Copyright (C) 2000--2022 Free Software Foundation, Inc.
+% Copyright (C) 2000--2023 Free Software Foundation, Inc.
 
 % Author: Włodek Bzyl <matwb@univ.gda.pl>
 % Czech translation: Pavel Janík <Pavel@Janik.cz>, March 2001
diff --git a/etc/refcards/de-refcard.tex b/etc/refcards/de-refcard.tex
index 7eaf1fcf2b6..e0088bc6c7c 100644
--- a/etc/refcards/de-refcard.tex
+++ b/etc/refcards/de-refcard.tex
@@ -1,6 +1,6 @@
 % Reference Card for GNU Emacs
 
-% Copyright (C) 1987, 1993, 1996, 2000--2022 Free Software Foundation,
+% Copyright (C) 1987, 1993, 1996, 2000--2023 Free Software Foundation,
 % Inc.
 
 % Author: Stephen Gildea <stepheng+emacs@gildea.com>
diff --git a/etc/refcards/dired-ref.tex b/etc/refcards/dired-ref.tex
index 7841daabffe..3ebd422ed09 100644
--- a/etc/refcards/dired-ref.tex
+++ b/etc/refcards/dired-ref.tex
@@ -1,6 +1,6 @@
 % Reference Card for Dired
 
-% Copyright (C) 2000--2022 Free Software Foundation, Inc.
+% Copyright (C) 2000--2023 Free Software Foundation, Inc.
 
 % Author: Evgeny Roubinchtein <eroubinc@u.washington.edu>
 
diff --git a/etc/refcards/emacsver.tex.in b/etc/refcards/emacsver.tex.in
index e8bd43e354b..d1f15f18c85 100644
--- a/etc/refcards/emacsver.tex.in
+++ b/etc/refcards/emacsver.tex.in
@@ -2,4 +2,4 @@
 \def\versionemacs{@majorversion@}           % major version of emacs
 %% This one should not be automatically updated;
 %% M-x set-copyright in admin.el handles it.
-\def\year{2022}                             % latest copyright year
+\def\year{2023}                             % latest copyright year
diff --git a/etc/refcards/fr-dired-ref.tex b/etc/refcards/fr-dired-ref.tex
index e0eebe05e6e..9a0df984ad1 100644
--- a/etc/refcards/fr-dired-ref.tex
+++ b/etc/refcards/fr-dired-ref.tex
@@ -1,6 +1,6 @@
 % Reference Card for Dired -*- coding: utf-8 -*-
 
-% Copyright (C) 2000--2022 Free Software Foundation, Inc.
+% Copyright (C) 2000--2023 Free Software Foundation, Inc.
 
 % Author: Evgeny Roubinchtein <eroubinc@u.washington.edu>
 % French translation: Eric Jacoboni
diff --git a/etc/refcards/fr-refcard.tex b/etc/refcards/fr-refcard.tex
index 039e42c905c..b7b70721f90 100644
--- a/etc/refcards/fr-refcard.tex
+++ b/etc/refcards/fr-refcard.tex
@@ -1,6 +1,6 @@
 % Reference Card for GNU Emacs
 
-% Copyright (C) 1987, 1993, 1996--1997, 2001--2022 Free Software
+% Copyright (C) 1987, 1993, 1996--1997, 2001--2023 Free Software
 % Foundation, Inc.
 
 % Author: Stephen Gildea <stepheng+emacs@gildea.com>
diff --git a/etc/refcards/fr-survival.tex b/etc/refcards/fr-survival.tex
index 14686226110..abc49b61895 100644
--- a/etc/refcards/fr-survival.tex
+++ b/etc/refcards/fr-survival.tex
@@ -1,7 +1,7 @@
 %&tex
 % Title:  GNU Emacs Survival Card
 
-% Copyright (C) 2000--2022 Free Software Foundation, Inc.
+% Copyright (C) 2000--2023 Free Software Foundation, Inc.
 
 % Author: Włodek Bzyl <matwb@univ.gda.pl>
 % French translation:  \'Eric Jacoboni <jaco@teaser.fr>, November 2001
diff --git a/etc/refcards/gnus-logo.eps b/etc/refcards/gnus-logo.eps
index cd38c2ba220..3bd785d6825 100644
--- a/etc/refcards/gnus-logo.eps
+++ b/etc/refcards/gnus-logo.eps
@@ -1,5 +1,5 @@
 %!PS-Adobe-2.0 EPSF-2.0
-% Copyright (C) 2000-2022 Free Software Foundation, Inc.
+% Copyright (C) 2000-2023 Free Software Foundation, Inc.
 %
 % Author: Luis Fernandes <elf@ee.ryerson.ca>
 %
diff --git a/etc/refcards/gnus-refcard.tex b/etc/refcards/gnus-refcard.tex
index 93191f23afd..1064af089a4 100644
--- a/etc/refcards/gnus-refcard.tex
+++ b/etc/refcards/gnus-refcard.tex
@@ -120,7 +120,7 @@
 %% Gnus logo by Luis Fernandes.
 \newcommand{\Copyright}{%
   \begin{center}
-    Copyright \copyright\ 1995, 2000, 2002--2022 Free Software Foundation, 
Inc.\\*
+    Copyright \copyright\ 1995, 2000, 2002--2023 Free Software Foundation, 
Inc.\\*
   \end{center}
 
   Released under the terms of the GNU General Public License version 3 or 
later.
diff --git a/etc/refcards/orgcard.tex b/etc/refcards/orgcard.tex
index 654d76ced89..04d46756155 100644
--- a/etc/refcards/orgcard.tex
+++ b/etc/refcards/orgcard.tex
@@ -17,7 +17,7 @@
 \pdflayout=(0l)
 
 % Nothing else needs to be changed below this line.
-% Copyright (C) 1987, 1993, 1996--1997, 2001--2022 Free Software
+% Copyright (C) 1987, 1993, 1996--1997, 2001--2023 Free Software
 % Foundation, Inc.
 
 % This document is free software: you can redistribute it and/or modify
diff --git a/etc/refcards/pdflayout.sty b/etc/refcards/pdflayout.sty
index 1bc7fbdb555..284f4d74cc7 100644
--- a/etc/refcards/pdflayout.sty
+++ b/etc/refcards/pdflayout.sty
@@ -1,4 +1,4 @@
-% Copyright (C) 2007-2022 Free Software Foundation, Inc.
+% Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 % This file is part of GNU Emacs.
 
diff --git a/etc/refcards/pl-refcard.tex b/etc/refcards/pl-refcard.tex
index a9978c4cc3c..1fbdeab1be9 100644
--- a/etc/refcards/pl-refcard.tex
+++ b/etc/refcards/pl-refcard.tex
@@ -1,7 +1,7 @@
 %&mex
 % Reference Card for GNU Emacs
 
-% Copyright (C) 1999, 2001--2022 Free Software Foundation, Inc.
+% Copyright (C) 1999, 2001--2023 Free Software Foundation, Inc.
 
 % Author: Stephen Gildea <stepheng+emacs@gildea.com>
 % Polish translation: Włodek Bzyl <matwb@univ.gda.pl>
diff --git a/etc/refcards/pt-br-refcard.tex b/etc/refcards/pt-br-refcard.tex
index 2a3316a5be5..20f7e16d230 100644
--- a/etc/refcards/pt-br-refcard.tex
+++ b/etc/refcards/pt-br-refcard.tex
@@ -1,6 +1,6 @@
 % Reference Card for GNU Emacs
 
-% Copyright (C) 1987, 1993, 1996--1997, 2002--2004, 2006--2022 Free
+% Copyright (C) 1987, 1993, 1996--1997, 2002--2004, 2006--2023 Free
 % Software Foundation, Inc.
 
 % Author: Stephen Gildea <stepheng+emacs@gildea.com>
diff --git a/etc/refcards/refcard.tex b/etc/refcards/refcard.tex
index 3da3e4902e6..ac802fdc4c3 100644
--- a/etc/refcards/refcard.tex
+++ b/etc/refcards/refcard.tex
@@ -1,6 +1,6 @@
 % Reference Card for GNU Emacs
 
-% Copyright (C) 1987, 1993, 1996--1997, 2001--2022 Free Software
+% Copyright (C) 1987, 1993, 1996--1997, 2001--2023 Free Software
 % Foundation, Inc.
 
 % Author: Stephen Gildea <stepheng+emacs@gildea.com>
diff --git a/etc/refcards/ru-refcard.tex b/etc/refcards/ru-refcard.tex
index 50a22891a6b..815a2db2f6d 100644
--- a/etc/refcards/ru-refcard.tex
+++ b/etc/refcards/ru-refcard.tex
@@ -1,4 +1,4 @@
-% Copyright (C) 1997, 2002--2022 Free Software Foundation, Inc.
+% Copyright (C) 1997, 2002--2023 Free Software Foundation, Inc.
 
 % Author: Stephen Gildea <stepheng+emacs@gildea.com>
 % Russian translation: Alex Ott <alexott@gmail.com>
@@ -41,7 +41,7 @@
 \setlength{\ColThreeWidth}{25mm}
 
 \newcommand{\versionemacs}[0]{30} % version of Emacs this is for
-\newcommand{\cyear}[0]{2022}       % copyright year
+\newcommand{\cyear}[0]{2023}       % copyright year
 
 \newcommand\shortcopyrightnotice[0]{\vskip 1ex plus 2 fill
   \centerline{\footnotesize \copyright\ \cyear\ Free Software Foundation, Inc.
diff --git a/etc/refcards/sk-dired-ref.tex b/etc/refcards/sk-dired-ref.tex
index ce2cc07c81c..b353bd74404 100644
--- a/etc/refcards/sk-dired-ref.tex
+++ b/etc/refcards/sk-dired-ref.tex
@@ -1,6 +1,6 @@
 % Reference Card for Dired -*- coding: utf-8 -*-
 
-% Copyright (C) 2000--2022 Free Software Foundation, Inc.
+% Copyright (C) 2000--2023 Free Software Foundation, Inc.
 
 % Author: Evgeny Roubinchtein <eroubinc@u.washington.edu>
 % Czech translation: Pavel Janík <Pavel@Janik.cz>, March 2001
diff --git a/etc/refcards/sk-refcard.tex b/etc/refcards/sk-refcard.tex
index b3fbde8cebc..fe3d352c5b4 100644
--- a/etc/refcards/sk-refcard.tex
+++ b/etc/refcards/sk-refcard.tex
@@ -1,6 +1,6 @@
 % Reference Card for GNU Emacs -*- coding: utf-8 -*-
 
-% Copyright (C) 1987, 1993, 1996--1997, 2001--2022 Free Software
+% Copyright (C) 1987, 1993, 1996--1997, 2001--2023 Free Software
 % Foundation, Inc.
 
 % Author: Stephen Gildea <stepheng+emacs@gildea.com>
diff --git a/etc/refcards/sk-survival.tex b/etc/refcards/sk-survival.tex
index 04bf17650c2..f7a9ee20722 100644
--- a/etc/refcards/sk-survival.tex
+++ b/etc/refcards/sk-survival.tex
@@ -1,6 +1,6 @@
 % Title:  GNU Emacs Survival Card -*- coding: utf-8 -*-
 
-% Copyright (C) 2000--2022 Free Software Foundation, Inc.
+% Copyright (C) 2000--2023 Free Software Foundation, Inc.
 
 % Author: Włodek Bzyl <matwb@univ.gda.pl>
 % Czech translation: Pavel Janík <Pavel@Janik.cz>, March 2001
diff --git a/etc/refcards/survival.tex b/etc/refcards/survival.tex
index 354ad9cb6c2..cfa1be8b915 100644
--- a/etc/refcards/survival.tex
+++ b/etc/refcards/survival.tex
@@ -1,7 +1,7 @@
 %&tex
 % Title:  GNU Emacs Survival Card
 
-% Copyright (C) 2000--2022 Free Software Foundation, Inc.
+% Copyright (C) 2000--2023 Free Software Foundation, Inc.
 
 % Author: Włodek Bzyl <matwb@univ.gda.pl>
 
diff --git a/etc/refcards/vipcard.tex b/etc/refcards/vipcard.tex
index f44ccc03c6b..d780a8b1ae8 100644
--- a/etc/refcards/vipcard.tex
+++ b/etc/refcards/vipcard.tex
@@ -1,6 +1,6 @@
 % Quick Reference Card for VIP
 
-% Copyright (C) 1987, 2001--2022 Free Software Foundation, Inc.
+% Copyright (C) 1987, 2001--2023 Free Software Foundation, Inc.
 
 % Author: Masahiko Sato <ms@sail.stanford.edu>, 
<masahiko@sato.riec.tohoku.junet>
 
diff --git a/etc/refcards/viperCard.tex b/etc/refcards/viperCard.tex
index 0794ea1d420..8376179be09 100644
--- a/etc/refcards/viperCard.tex
+++ b/etc/refcards/viperCard.tex
@@ -1,6 +1,6 @@
 % ViperCard -- The Reference Card for Viper under GNU Emacs
 
-% Copyright (C) 1995--1997, 2001--2022 Free Software Foundation, Inc.
+% Copyright (C) 1995--1997, 2001--2023 Free Software Foundation, Inc.
 
 % Author: Michael Kifer <kifer@cs.stonybrook.edu> (Viper)
 %      Aamod Sane <sane@cs.uiuc.edu> (VIP 4.3)
diff --git a/etc/schema/locate.rnc b/etc/schema/locate.rnc
index 2889acbf3fb..10addaeaa33 100644
--- a/etc/schema/locate.rnc
+++ b/etc/schema/locate.rnc
@@ -1,4 +1,4 @@
-# Copyright (C) 2003-2004, 2007-2022 Free Software Foundation, Inc.
+# Copyright (C) 2003-2004, 2007-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/etc/schema/relaxng.rnc b/etc/schema/relaxng.rnc
index 7a86d58ba95..7489dd58c40 100644
--- a/etc/schema/relaxng.rnc
+++ b/etc/schema/relaxng.rnc
@@ -1,6 +1,6 @@
 # RELAX NG XML syntax expressed in RELAX NG Compact syntax.
 
-# Copyright (C) 2003-2004, 2007-2022 Free Software Foundation, Inc.
+# Copyright (C) 2003-2004, 2007-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/etc/schema/schemas.xml b/etc/schema/schemas.xml
index 678621f7bd3..8ac208790bf 100644
--- a/etc/schema/schemas.xml
+++ b/etc/schema/schemas.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2003-2004, 2007-2022 Free Software Foundation, Inc.
+<!-- Copyright (C) 2003-2004, 2007-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/etc/ses-example.ses b/etc/ses-example.ses
index f6f0dff27f2..43793721d7c 100644
--- a/etc/ses-example.ses
+++ b/etc/ses-example.ses
@@ -205,7 +205,7 @@ Sales summary - Acme fundraising
 ;;; ses--symbolic-formulas: (("Eastern area") ("West-district") 
("North&South") ("Other"))
 ;;; End:
 
-;;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;;; COPYING PERMISSIONS:
 ;;; 
diff --git a/etc/srecode/c.srt b/etc/srecode/c.srt
index e36caef307e..398e9b559b3 100644
--- a/etc/srecode/c.srt
+++ b/etc/srecode/c.srt
@@ -1,6 +1,6 @@
 ;;; c.srt --- SRecode templates for c-mode
 
-;; Copyright (C) 2007-2010, 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2010, 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/cpp.srt b/etc/srecode/cpp.srt
index d35adaf4b70..ad8618b51be 100644
--- a/etc/srecode/cpp.srt
+++ b/etc/srecode/cpp.srt
@@ -1,6 +1,6 @@
 ;;; cpp.srt --- SRecode templates for c++-mode
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/default.srt b/etc/srecode/default.srt
index 04ca2e30230..d07f7abf562 100644
--- a/etc/srecode/default.srt
+++ b/etc/srecode/default.srt
@@ -1,6 +1,6 @@
 ;;; default.srt --- SRecode templates for srecode-template-mode
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/doc-cpp.srt b/etc/srecode/doc-cpp.srt
index e11623dc048..ea2370e089d 100644
--- a/etc/srecode/doc-cpp.srt
+++ b/etc/srecode/doc-cpp.srt
@@ -1,6 +1,6 @@
 ;; doc-c.srt --- SRecode templates for "document" applications
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/doc-default.srt b/etc/srecode/doc-default.srt
index edd18c26fcc..cbaa599147d 100644
--- a/etc/srecode/doc-default.srt
+++ b/etc/srecode/doc-default.srt
@@ -1,6 +1,6 @@
 ;; doc-default.srt --- SRecode templates for "document" applications
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/doc-java.srt b/etc/srecode/doc-java.srt
index a94392b6738..a1015572507 100644
--- a/etc/srecode/doc-java.srt
+++ b/etc/srecode/doc-java.srt
@@ -1,6 +1,6 @@
 ;; doc-java.srt --- SRecode templates for "document" applications
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/ede-autoconf.srt b/etc/srecode/ede-autoconf.srt
index 51656eb73c4..833cd6359ea 100644
--- a/etc/srecode/ede-autoconf.srt
+++ b/etc/srecode/ede-autoconf.srt
@@ -1,6 +1,6 @@
 ;;; ede/templates/autoconf.srt --- Templates for autoconf used by EDE
 
-;; Copyright (C) 2010, 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010, 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/ede-make.srt b/etc/srecode/ede-make.srt
index c01054e0420..5f16dfc9baa 100644
--- a/etc/srecode/ede-make.srt
+++ b/etc/srecode/ede-make.srt
@@ -1,6 +1,6 @@
 ;; ede-make.srt --- SRecode templates for Makefiles used by EDE.
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/el.srt b/etc/srecode/el.srt
index 9078f4d334b..44c7aff6d7e 100644
--- a/etc/srecode/el.srt
+++ b/etc/srecode/el.srt
@@ -1,6 +1,6 @@
 ;;; el.srt --- SRecode templates for Emacs Lisp mode
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/getset-cpp.srt b/etc/srecode/getset-cpp.srt
index f53b4101264..f000680ab40 100644
--- a/etc/srecode/getset-cpp.srt
+++ b/etc/srecode/getset-cpp.srt
@@ -1,6 +1,6 @@
 ;;; getset-cpp.srt --- SRecode templates for C++ class getter/setters.
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/java.srt b/etc/srecode/java.srt
index 5c4f7d80727..23210b85dfa 100644
--- a/etc/srecode/java.srt
+++ b/etc/srecode/java.srt
@@ -1,6 +1,6 @@
 ;; java.srt
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/make.srt b/etc/srecode/make.srt
index 436e067c500..8857de87b5a 100644
--- a/etc/srecode/make.srt
+++ b/etc/srecode/make.srt
@@ -1,6 +1,6 @@
 ;; make.srt
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/proj-test.srt b/etc/srecode/proj-test.srt
index 62eb0befdfb..b8469542119 100644
--- a/etc/srecode/proj-test.srt
+++ b/etc/srecode/proj-test.srt
@@ -1,6 +1,6 @@
 ;; proj-test.srt --- SRecode template for testing project scoping.
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/template.srt b/etc/srecode/template.srt
index b6590f5f0b9..ded8ce3f705 100644
--- a/etc/srecode/template.srt
+++ b/etc/srecode/template.srt
@@ -1,6 +1,6 @@
 ;;; template.srt --- Templates for Semantic Recoders
 
-;; Copyright (C) 2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/test.srt b/etc/srecode/test.srt
index 186376b58a6..127c4f47672 100644
--- a/etc/srecode/test.srt
+++ b/etc/srecode/test.srt
@@ -1,6 +1,6 @@
 ;; test.srt --- SRecode templates for testing
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/texi.srt b/etc/srecode/texi.srt
index 611ef65a8cb..4a0a20a2267 100644
--- a/etc/srecode/texi.srt
+++ b/etc/srecode/texi.srt
@@ -1,6 +1,6 @@
 ;; texi.srt --- SRecode templates for Texinfo
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/wisent.srt b/etc/srecode/wisent.srt
index 83553c3dca0..e42ca5c979c 100644
--- a/etc/srecode/wisent.srt
+++ b/etc/srecode/wisent.srt
@@ -1,6 +1,6 @@
 ;; wisent.srt --- SRecode templates for Emacs/WISENT grammar files.
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/themes/adwaita-theme.el b/etc/themes/adwaita-theme.el
index 6ad84055595..108a9165961 100644
--- a/etc/themes/adwaita-theme.el
+++ b/etc/themes/adwaita-theme.el
@@ -1,6 +1,6 @@
 ;;; adwaita-theme.el --- Tango-based custom theme for faces  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: William Stevenson <yhvh2000@gmail.com>
 
diff --git a/etc/themes/deeper-blue-theme.el b/etc/themes/deeper-blue-theme.el
index 48ed9ba061d..40d5f18a011 100644
--- a/etc/themes/deeper-blue-theme.el
+++ b/etc/themes/deeper-blue-theme.el
@@ -1,6 +1,6 @@
 ;;; deeper-blue-theme.el --- Custom theme for faces  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Scott Frazer <frazer.scott@gmail.com>
 
diff --git a/etc/themes/dichromacy-theme.el b/etc/themes/dichromacy-theme.el
index c9d73983b59..c59fe8e0dfa 100644
--- a/etc/themes/dichromacy-theme.el
+++ b/etc/themes/dichromacy-theme.el
@@ -1,6 +1,6 @@
 ;;; dichromacy-theme.el --- color theme suitable for color-blind users  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <cyd@stupidchicken>
 
diff --git a/etc/themes/leuven-dark-theme.el b/etc/themes/leuven-dark-theme.el
index 08978a26682..fda00f1282f 100644
--- a/etc/themes/leuven-dark-theme.el
+++ b/etc/themes/leuven-dark-theme.el
@@ -1,6 +1,6 @@
 ;;; leuven-dark-theme.el --- Awesome Emacs color theme on dark background  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Fabrice Niessen <(concat "fniessen" at-sign "pirilampo.org")>
 ;; Contributor: Thibault Polge <(concat "thibault" at-sign "thb.lt")>
diff --git a/etc/themes/leuven-theme.el b/etc/themes/leuven-theme.el
index e712a79adf1..7747d1e7315 100644
--- a/etc/themes/leuven-theme.el
+++ b/etc/themes/leuven-theme.el
@@ -1,6 +1,6 @@
 ;;; leuven-theme.el --- Awesome Emacs color theme on white background  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Fabrice Niessen <(concat "fniessen" at-sign "pirilampo.org")>
 ;; URL: https://github.com/fniessen/emacs-leuven-theme
diff --git a/etc/themes/light-blue-theme.el b/etc/themes/light-blue-theme.el
index 808fcbfeb2d..f3850537617 100644
--- a/etc/themes/light-blue-theme.el
+++ b/etc/themes/light-blue-theme.el
@@ -1,6 +1,6 @@
 ;;; light-blue-theme.el --- Custom theme for faces  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Drew Adams <drew.adams@oracle.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/etc/themes/manoj-dark-theme.el b/etc/themes/manoj-dark-theme.el
index f9aaa97c258..1c3e23908d1 100644
--- a/etc/themes/manoj-dark-theme.el
+++ b/etc/themes/manoj-dark-theme.el
@@ -1,6 +1,6 @@
 ;;; manoj-dark-theme.el --- A dark theme from Manoj  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Manoj Srivastava <srivasta@ieee.org>
 ;; Keywords: lisp, faces
diff --git a/etc/themes/misterioso-theme.el b/etc/themes/misterioso-theme.el
index 3fd6cdb5afb..685951ce1a7 100644
--- a/etc/themes/misterioso-theme.el
+++ b/etc/themes/misterioso-theme.el
@@ -1,6 +1,6 @@
 ;;; misterioso-theme.el --- Custom face theme for Emacs  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Sebastian Hermida
 
diff --git a/etc/themes/modus-operandi-deuteranopia-theme.el 
b/etc/themes/modus-operandi-deuteranopia-theme.el
new file mode 100644
index 00000000000..2bee995c570
--- /dev/null
+++ b/etc/themes/modus-operandi-deuteranopia-theme.el
@@ -0,0 +1,420 @@
+;;; modus-operandi-deuteranopia-theme.el --- Elegant, highly legible and 
customizable light theme -*- lexical-binding:t -*-
+
+;; Copyright (C) 2019-2023  Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+;; URL: https://git.sr.ht/~protesilaos/modus-themes
+;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
+;; Keywords: faces, theme, accessibility
+
+;; 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:
+;;
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA).  Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
+
+;;; Code:
+
+
+
+(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))
+
+  (deftheme modus-operandi-deuteranopia
+    "Elegant, highly legible and customizable light theme.
+This variant is optimized for users with red-green color
+deficiency (deuteranopia).  It conforms with the highest
+legibility standard for color contrast between background and
+foreground in any given piece of text, which corresponds to a
+minimum contrast in relative luminance of 7:1 (WCAG AAA
+standard).")
+
+  (defconst modus-operandi-deuteranopia-palette
+    '(
+;;; Basic values
+
+      (bg-main          "#ffffff")
+      (bg-dim           "#f0f0f0")
+      (fg-main          "#000000")
+      (fg-dim           "#595959")
+      (fg-alt           "#193668")
+      (bg-active        "#c4c4c4")
+      (bg-inactive      "#e0e0e0")
+      (border           "#9f9f9f")
+
+;;; Common accent foregrounds
+
+      (red             "#a60000")
+      (red-warmer      "#972500")
+      (red-cooler      "#a0132f")
+      (red-faint       "#7f0000")
+      (red-intense     "#d00000")
+      (green           "#006800")
+      (green-warmer    "#316500")
+      (green-cooler    "#00663f")
+      (green-faint     "#2a5045")
+      (green-intense   "#008900")
+      (yellow          "#7b5000")
+      (yellow-warmer   "#884900")
+      (yellow-cooler   "#7a4f2f")
+      (yellow-faint    "#624416")
+      (yellow-intense  "#808000")
+      (blue            "#0031a9")
+      (blue-warmer     "#354fcf")
+      (blue-cooler     "#0000b0")
+      (blue-faint      "#003497")
+      (blue-intense    "#0000ff")
+      (magenta         "#721045")
+      (magenta-warmer  "#8f0075")
+      (magenta-cooler  "#531ab6")
+      (magenta-faint   "#7c318f")
+      (magenta-intense "#dd22dd")
+      (cyan            "#005e8b")
+      (cyan-warmer     "#3f578f")
+      (cyan-cooler     "#005f5f")
+      (cyan-faint      "#005077")
+      (cyan-intense    "#008899")
+
+;;; Uncommon accent foregrounds
+
+      (rust       "#8a290f")
+      (gold       "#80601f")
+      (olive      "#56692d")
+      (slate      "#2f3f83")
+      (indigo     "#4a3a8a")
+      (maroon     "#731c52")
+      (pink       "#7b435c")
+
+;;; Common accent backgrounds
+
+      (bg-red-intense     "#ff8f88")
+      (bg-green-intense   "#8adf80")
+      (bg-yellow-intense  "#f3d000")
+      (bg-blue-intense    "#bfc9ff")
+      (bg-magenta-intense "#dfa0f0")
+      (bg-cyan-intense    "#a4d5f9")
+
+      (bg-red-subtle      "#ffcfbf")
+      (bg-green-subtle    "#b3fabf")
+      (bg-yellow-subtle   "#fff576")
+      (bg-blue-subtle     "#ccdfff")
+      (bg-magenta-subtle  "#ffddff")
+      (bg-cyan-subtle     "#bfefff")
+
+      (bg-red-nuanced     "#fff1f0")
+      (bg-green-nuanced   "#ecf7ed")
+      (bg-yellow-nuanced  "#fff3da")
+      (bg-blue-nuanced    "#f3f3ff")
+      (bg-magenta-nuanced "#fdf0ff")
+      (bg-cyan-nuanced    "#ebf6fa")
+
+;;; Uncommon accent backgrounds
+
+      (bg-ochre    "#f0e0cc")
+      (bg-lavender "#dfdbfa")
+      (bg-sage     "#c0e7d4")
+
+;;; Graphs
+
+      (bg-graph-red-0     "#b0b029")
+      (bg-graph-red-1     "#e0cab4")
+      (bg-graph-green-0   "#90b7c0")
+      (bg-graph-green-1   "#a3dfe5")
+      (bg-graph-yellow-0  "#ffcf00")
+      (bg-graph-yellow-1  "#f9ff00")
+      (bg-graph-blue-0    "#7f9fff")
+      (bg-graph-blue-1    "#9fc6ff")
+      (bg-graph-magenta-0 "#b0b0d0")
+      (bg-graph-magenta-1 "#d0dfdf")
+      (bg-graph-cyan-0    "#6faad9")
+      (bg-graph-cyan-1    "#bfe0ff")
+
+;;; Special purpose
+
+      (bg-completion       "#c0deff")
+      (bg-hover            "#97dfed")
+      (bg-hover-secondary  "#f5d0a0")
+      (bg-hl-line          "#d0d6ec")
+      (bg-region           "#bdbdbd")
+      (fg-region           "#000000")
+
+      (bg-char-0 "#7feaff")
+      (bg-char-1 "#ffaaff")
+      (bg-char-2 "#dff000")
+
+      (bg-mode-line-active        "#d0d6ff")
+      (fg-mode-line-active        "#0f0f0f")
+      (border-mode-line-active    "#4f4f74")
+      (bg-mode-line-inactive      "#e6e6e6")
+      (fg-mode-line-inactive      "#585858")
+      (border-mode-line-inactive  "#a3a3a3")
+
+      (modeline-err     "#603a00")
+      (modeline-warning "#454500")
+      (modeline-info    "#023d92")
+
+      (bg-tab-bar      "#dfdfdf")
+      (bg-tab-current  "#ffffff")
+      (bg-tab-other    "#c2c2c2")
+
+;;; Diffs
+
+      (bg-added           "#d5d5ff")
+      (bg-added-faint     "#e6e6ff")
+      (bg-added-refine    "#b5b5ef")
+      (bg-added-intense   "#579acc")
+      (fg-added           "#333399")
+      (fg-added-intense   "#3333cc")
+
+      (bg-changed         "#eecfdf")
+      (bg-changed-faint   "#f0dde5")
+      (bg-changed-refine  "#e0b0d0")
+      (bg-changed-intense "#9f7abf")
+      (fg-changed         "#6f1343")
+      (fg-changed-intense "#7f1f5f")
+
+      (bg-removed         "#fff585")
+      (bg-removed-faint   "#f2f2bb")
+      (bg-removed-refine  "#f0e068")
+      (bg-removed-intense "#d7c20a")
+      (fg-removed         "#553d00")
+      (fg-removed-intense "#655000")
+
+;;; Paren match
+
+      (bg-paren-match        "#5fcfff")
+      (bg-paren-expression   "#efd3f5")
+      (underline-paren-match unspecified)
+
+;;; Mappings
+
+;;;; General mappings
+
+      (fringe bg-dim)
+      (cursor blue-intense)
+
+      (keybind blue-cooler)
+      (name blue-cooler)
+      (identifier yellow-faint)
+
+      (err yellow-warmer)
+      (warning yellow-cooler)
+      (info blue)
+
+      (underline-err yellow-intense)
+      (underline-warning magenta-faint)
+      (underline-note cyan)
+
+;;;; Code mappings
+
+      (builtin magenta-warmer)
+      (comment yellow)
+      (constant blue-cooler)
+      (docstring green-faint)
+      (docmarkup magenta-faint)
+      (fnname magenta)
+      (keyword magenta-cooler)
+      (preprocessor red-cooler)
+      (string blue-warmer)
+      (type cyan-cooler)
+      (variable cyan)
+      (rx-construct yellow-cooler)
+      (rx-backslash blue-cooler)
+
+;;;; Accent mappings
+
+      (accent-0 blue)
+      (accent-1 yellow-warmer)
+      (accent-2 cyan)
+      (accent-3 magenta-cooler)
+
+;;;; Button mappings
+
+      (fg-button-active fg-main)
+      (fg-button-inactive fg-dim)
+      (bg-button-active bg-active)
+      (bg-button-inactive bg-dim)
+
+;;;; Completion mappings
+
+      (fg-completion-match-0 blue)
+      (fg-completion-match-1 yellow-warmer)
+      (fg-completion-match-2 cyan)
+      (fg-completion-match-3 magenta-cooler)
+      (bg-completion-match-0 unspecified)
+      (bg-completion-match-1 unspecified)
+      (bg-completion-match-2 unspecified)
+      (bg-completion-match-3 unspecified)
+
+;;;; Date mappings
+
+      (date-common cyan)
+      (date-deadline yellow-warmer)
+      (date-event fg-alt)
+      (date-holiday yellow-warmer)
+      (date-now blue-faint)
+      (date-scheduled yellow-cooler)
+      (date-weekday cyan)
+      (date-weekend yellow-faint)
+
+;;;; Line number mappings
+
+      (fg-line-number-inactive fg-dim)
+      (fg-line-number-active fg-main)
+      (bg-line-number-inactive bg-dim)
+      (bg-line-number-active bg-active)
+
+;;;; Link mappings
+
+      (fg-link blue-warmer)
+      (bg-link unspecified)
+      (underline-link blue-warmer)
+
+      (fg-link-symbolic cyan)
+      (bg-link-symbolic unspecified)
+      (underline-link-symbolic cyan)
+
+      (fg-link-visited yellow-faint)
+      (bg-link-visited unspecified)
+      (underline-link-visited yellow-faint)
+
+;;;; Mail mappings
+
+      (mail-cite-0 blue-warmer)
+      (mail-cite-1 yellow)
+      (mail-cite-2 blue-cooler)
+      (mail-cite-3 yellow-faint)
+      (mail-part blue)
+      (mail-recipient blue)
+      (mail-subject yellow-warmer)
+      (mail-other cyan-faint)
+
+;;;; Prompt mappings
+
+      (fg-prompt blue)
+      (bg-prompt unspecified)
+
+;;;; Prose mappings
+
+      (prose-block fg-dim)
+      (prose-code cyan-cooler)
+      (prose-done blue)
+      (prose-macro magenta-cooler)
+      (prose-metadata fg-dim)
+      (prose-metadata-value fg-alt)
+      (prose-table fg-alt)
+      (prose-tag magenta-faint)
+      (prose-todo yellow-warmer)
+      (prose-verbatim magenta-warmer)
+
+;;;; Rainbow mappings
+
+      (rainbow-0 blue)
+      (rainbow-1 yellow)
+      (rainbow-2 blue-warmer)
+      (rainbow-3 yellow-cooler)
+      (rainbow-4 blue-cooler)
+      (rainbow-5 yellow-warmer)
+      (rainbow-6 blue-faint)
+      (rainbow-7 yellow-faint)
+      (rainbow-8 cyan)
+
+;;;; Heading mappings
+
+      (fg-heading-0 cyan-cooler)
+      (fg-heading-1 fg-main)
+      (fg-heading-2 yellow-faint)
+      (fg-heading-3 fg-alt)
+      (fg-heading-4 magenta)
+      (fg-heading-5 green-faint)
+      (fg-heading-6 red-faint)
+      (fg-heading-7 cyan-warmer)
+      (fg-heading-8 fg-dim)
+
+      (bg-heading-0 unspecified)
+      (bg-heading-1 unspecified)
+      (bg-heading-2 unspecified)
+      (bg-heading-3 unspecified)
+      (bg-heading-4 unspecified)
+      (bg-heading-5 unspecified)
+      (bg-heading-6 unspecified)
+      (bg-heading-7 unspecified)
+      (bg-heading-8 unspecified)
+
+      (overline-heading-0 unspecified)
+      (overline-heading-1 unspecified)
+      (overline-heading-2 unspecified)
+      (overline-heading-3 unspecified)
+      (overline-heading-4 unspecified)
+      (overline-heading-5 unspecified)
+      (overline-heading-6 unspecified)
+      (overline-heading-7 unspecified)
+      (overline-heading-8 unspecified))
+    "The entire palette of the `modus-operandi-deuteranopia' theme.
+
+Named colors have the form (COLOR-NAME HEX-VALUE) with the former
+as a symbol and the latter as a string.
+
+Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
+with both as symbols.  The latter is a named color that already
+exists in the palette and is associated with a HEX-VALUE.
+
+Semantic color mappings cannot be recursive: their value must be
+either COLOR-NAME or HEX-VALUE.")
+
+  (defcustom modus-operandi-deuteranopia-palette-overrides nil
+    "Overrides for `modus-operandi-deuteranopia-palette'.
+
+Mirror the elements of the aforementioned palette, overriding
+their value.
+
+For overrides that are shared across all of the Modus themes,
+refer to `modus-themes-common-palette-overrides'.
+
+Theme-specific overrides take precedence over shared overrides.
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red.  Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+    :group 'modus-themes
+    :package-version '(modus-themes . "4.0.0")
+    :version "30.1"
+    :type '(repeat (list symbol (choice symbol string)))
+    :set #'modus-themes--set-option
+    :initialize #'custom-initialize-default
+    :link '(info-link "(modus-themes) Palette overrides"))
+
+  (modus-themes-theme modus-operandi-deuteranopia
+                      modus-operandi-deuteranopia-palette
+                      modus-operandi-deuteranopia-palette-overrides)
+
+  (provide-theme 'modus-operandi-deuteranopia))
+
+;;;###theme-autoload
+(put 'modus-operandi-deuteranopia 'theme-properties '(:background-mode light 
:kind color-scheme :family modus))
+
+;;; modus-operandi-deuteranopia-theme.el ends here
diff --git a/etc/themes/modus-operandi-theme.el 
b/etc/themes/modus-operandi-theme.el
index 6ea92f8559a..09ca8888073 100644
--- a/etc/themes/modus-operandi-theme.el
+++ b/etc/themes/modus-operandi-theme.el
@@ -1,13 +1,11 @@
 ;;; modus-operandi-theme.el --- Elegant, highly legible and customizable light 
theme -*- lexical-binding:t -*-
 
-;; Copyright (C) 2019-2022  Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023  Free Software Foundation, Inc.
 
 ;; Author: Protesilaos Stavrou <info@protesilaos.com>
 ;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
 ;; URL: https://git.sr.ht/~protesilaos/modus-themes
 ;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
-;; Version: 3.0.0
-;; Package-Requires: ((emacs "27.1"))
 ;; Keywords: faces, theme, accessibility
 
 ;; This file is part of GNU Emacs.
@@ -27,26 +25,11 @@
 
 ;;; Commentary:
 ;;
-;; Modus Operandi is the light variant of the Modus themes (Modus
-;; Vivendi is the dark one).  The themes are designed for color-contrast
-;; accessibility.  More specifically:
-;;
-;;     1. Provide a consistent minimum contrast ratio between background
-;;     and foreground values of 7:1 or higher.  This meets the highest
-;;     such accessibility criterion per the guidelines of the Worldwide
-;;     Web Consortium's Working Group on Accessibility (WCAG AAA
-;;     standard).
-;;
-;;     2. Offer as close to full face coverage as possible.  The list is
-;;     already quite long, with more additions to follow as part of the
-;;     ongoing development process.
-;;
-;; For a complete view of the project, also refer to the following files
-;; (should be distributed in the same repository/directory as the
-;; current item):
-;;
-;; - modus-themes.el            (Main code shared between the themes)
-;; - modus-vivendi-theme.el     (Dark theme)
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA).  Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
 
 ;;; Code:
 
@@ -67,7 +50,365 @@ between background and foreground in any given piece of 
text,
 which corresponds to a minimum contrast in relative luminance of
 7:1 (WCAG AAA standard).")
 
-  (modus-themes-theme modus-operandi)
+  (defconst modus-operandi-palette
+    '(
+;;; Basic values
+
+      (bg-main          "#ffffff")
+      (bg-dim           "#f0f0f0")
+      (fg-main          "#000000")
+      (fg-dim           "#595959")
+      (fg-alt           "#193668")
+      (bg-active        "#c4c4c4")
+      (bg-inactive      "#e0e0e0")
+      (border           "#9f9f9f")
+
+;;; Common accent foregrounds
+
+      (red             "#a60000")
+      (red-warmer      "#972500")
+      (red-cooler      "#a0132f")
+      (red-faint       "#7f0000")
+      (red-intense     "#d00000")
+      (green           "#006800")
+      (green-warmer    "#316500")
+      (green-cooler    "#00663f")
+      (green-faint     "#2a5045")
+      (green-intense   "#008900")
+      (yellow          "#6f5500")
+      (yellow-warmer   "#884900")
+      (yellow-cooler   "#7a4f2f")
+      (yellow-faint    "#624416")
+      (yellow-intense  "#808000")
+      (blue            "#0031a9")
+      (blue-warmer     "#354fcf")
+      (blue-cooler     "#0000b0")
+      (blue-faint      "#003497")
+      (blue-intense    "#0000ff")
+      (magenta         "#721045")
+      (magenta-warmer  "#8f0075")
+      (magenta-cooler  "#531ab6")
+      (magenta-faint   "#7c318f")
+      (magenta-intense "#dd22dd")
+      (cyan            "#005e8b")
+      (cyan-warmer     "#3f578f")
+      (cyan-cooler     "#005f5f")
+      (cyan-faint      "#005077")
+      (cyan-intense    "#008899")
+
+;;; Uncommon accent foregrounds
+
+      (rust       "#8a290f")
+      (gold       "#80601f")
+      (olive      "#56692d")
+      (slate      "#2f3f83")
+      (indigo     "#4a3a8a")
+      (maroon     "#731c52")
+      (pink       "#7b435c")
+
+;;; Common accent backgrounds
+
+      (bg-red-intense     "#ff8f88")
+      (bg-green-intense   "#8adf80")
+      (bg-yellow-intense  "#f3d000")
+      (bg-blue-intense    "#bfc9ff")
+      (bg-magenta-intense "#dfa0f0")
+      (bg-cyan-intense    "#a4d5f9")
+
+      (bg-red-subtle      "#ffcfbf")
+      (bg-green-subtle    "#b3fabf")
+      (bg-yellow-subtle   "#fff576")
+      (bg-blue-subtle     "#ccdfff")
+      (bg-magenta-subtle  "#ffddff")
+      (bg-cyan-subtle     "#bfefff")
+
+      (bg-red-nuanced     "#fff1f0")
+      (bg-green-nuanced   "#ecf7ed")
+      (bg-yellow-nuanced  "#fff3da")
+      (bg-blue-nuanced    "#f3f3ff")
+      (bg-magenta-nuanced "#fdf0ff")
+      (bg-cyan-nuanced    "#ebf6fa")
+
+;;; Uncommon accent backgrounds
+
+      (bg-ochre    "#f0e0cc")
+      (bg-lavender "#dfdbfa")
+      (bg-sage     "#c0e7d4")
+
+;;; Graphs
+
+      (bg-graph-red-0     "#ef7969")
+      (bg-graph-red-1     "#ffaab4")
+      (bg-graph-green-0   "#4faa09")
+      (bg-graph-green-1   "#8fef00")
+      (bg-graph-yellow-0  "#ffcf00")
+      (bg-graph-yellow-1  "#f9ff00")
+      (bg-graph-blue-0    "#7090ff")
+      (bg-graph-blue-1    "#9fc6ff")
+      (bg-graph-magenta-0 "#e07fff")
+      (bg-graph-magenta-1 "#fad0ff")
+      (bg-graph-cyan-0    "#70d3f0")
+      (bg-graph-cyan-1    "#afefff")
+
+;;; Special purpose
+
+      (bg-completion       "#c0deff")
+      (bg-hover            "#94d4ff")
+      (bg-hover-secondary  "#f5d0a0")
+      (bg-hl-line          "#d0d6ec")
+      (bg-region           "#bdbdbd")
+      (fg-region           "#000000")
+
+      (bg-char-0 "#7feaff")
+      (bg-char-1 "#ffaaff")
+      (bg-char-2 "#dff000")
+
+      (bg-mode-line-active        "#c8c8c8")
+      (fg-mode-line-active        "#000000")
+      (border-mode-line-active    "#5a5a5a")
+      (bg-mode-line-inactive      "#e6e6e6")
+      (fg-mode-line-inactive      "#585858")
+      (border-mode-line-inactive  "#a3a3a3")
+
+      (modeline-err     "#7f0000")
+      (modeline-warning "#5f0070")
+      (modeline-info    "#002580")
+
+      (bg-tab-bar      "#dfdfdf")
+      (bg-tab-current  "#ffffff")
+      (bg-tab-other    "#c2c2c2")
+
+;;; Diffs
+
+      (bg-added           "#c1f2d1")
+      (bg-added-faint     "#d8f8e1")
+      (bg-added-refine    "#aee5be")
+      (bg-added-intense   "#8cca8c")
+      (fg-added           "#005000")
+      (fg-added-intense   "#006700")
+
+      (bg-changed         "#ffdfa9")
+      (bg-changed-faint   "#ffefbf")
+      (bg-changed-refine  "#fac090")
+      (bg-changed-intense "#d7c20a")
+      (fg-changed         "#553d00")
+      (fg-changed-intense "#655000")
+
+      (bg-removed         "#ffd8d5")
+      (bg-removed-faint   "#ffe9e9")
+      (bg-removed-refine  "#f3b5af")
+      (bg-removed-intense "#d84a4f")
+      (fg-removed         "#8f1313")
+      (fg-removed-intense "#aa2222")
+
+;;; Paren match
+
+      (bg-paren-match        "#5fcfff")
+      (bg-paren-expression   "#efd3f5")
+      (underline-paren-match unspecified)
+
+;;; Mappings
+
+;;;; General mappings
+
+      (fringe bg-dim)
+      (cursor fg-main)
+
+      (keybind blue-cooler)
+      (name magenta)
+      (identifier yellow-cooler)
+
+      (err red)
+      (warning yellow-warmer)
+      (info cyan-cooler)
+
+      (underline-err red-intense)
+      (underline-warning yellow-intense)
+      (underline-note cyan-intense)
+
+;;;; Code mappings
+
+      (builtin magenta-warmer)
+      (comment fg-dim)
+      (constant blue-cooler)
+      (docstring green-faint)
+      (docmarkup magenta-faint)
+      (fnname magenta)
+      (keyword magenta-cooler)
+      (preprocessor red-cooler)
+      (string blue-warmer)
+      (type cyan-cooler)
+      (variable cyan)
+      (rx-construct green-cooler)
+      (rx-backslash magenta)
+
+;;;; Accent mappings
+
+      (accent-0 blue)
+      (accent-1 magenta-warmer)
+      (accent-2 cyan)
+      (accent-3 red)
+
+;;;; Button mappings
+
+      (fg-button-active fg-main)
+      (fg-button-inactive fg-dim)
+      (bg-button-active bg-active)
+      (bg-button-inactive bg-dim)
+
+;;;; Completion mappings
+
+      (fg-completion-match-0 blue)
+      (fg-completion-match-1 magenta-warmer)
+      (fg-completion-match-2 cyan)
+      (fg-completion-match-3 red)
+      (bg-completion-match-0 unspecified)
+      (bg-completion-match-1 unspecified)
+      (bg-completion-match-2 unspecified)
+      (bg-completion-match-3 unspecified)
+
+;;;; Date mappings
+
+      (date-common cyan)
+      (date-deadline red)
+      (date-event fg-alt)
+      (date-holiday magenta)
+      (date-now fg-main)
+      (date-scheduled yellow-warmer)
+      (date-weekday cyan)
+      (date-weekend red-faint)
+
+;;;; Line number mappings
+
+      (fg-line-number-inactive fg-dim)
+      (fg-line-number-active fg-main)
+      (bg-line-number-inactive bg-dim)
+      (bg-line-number-active bg-active)
+
+;;;; Link mappings
+
+      (fg-link blue-warmer)
+      (bg-link unspecified)
+      (underline-link blue-warmer)
+
+      (fg-link-symbolic cyan)
+      (bg-link-symbolic unspecified)
+      (underline-link-symbolic cyan)
+
+      (fg-link-visited magenta)
+      (bg-link-visited unspecified)
+      (underline-link-visited magenta)
+
+;;;; Mail mappings
+
+      (mail-cite-0 blue-faint)
+      (mail-cite-1 yellow-warmer)
+      (mail-cite-2 cyan-cooler)
+      (mail-cite-3 red-cooler)
+      (mail-part cyan)
+      (mail-recipient magenta-cooler)
+      (mail-subject magenta-warmer)
+      (mail-other magenta-faint)
+
+;;;; Prompt mappings
+
+      (fg-prompt cyan-cooler)
+      (bg-prompt unspecified)
+
+;;;; Prose mappings
+
+      (prose-block fg-dim)
+      (prose-code green-cooler)
+      (prose-done green)
+      (prose-macro magenta-cooler)
+      (prose-metadata fg-dim)
+      (prose-metadata-value fg-alt)
+      (prose-table fg-alt)
+      (prose-tag magenta-faint)
+      (prose-todo red)
+      (prose-verbatim magenta-warmer)
+
+;;;; Rainbow mappings
+
+      (rainbow-0 fg-main)
+      (rainbow-1 magenta-intense)
+      (rainbow-2 cyan-intense)
+      (rainbow-3 red-warmer)
+      (rainbow-4 yellow-intense)
+      (rainbow-5 magenta-cooler)
+      (rainbow-6 green-intense)
+      (rainbow-7 blue-warmer)
+      (rainbow-8 magenta-warmer)
+
+;;;; Heading mappings
+
+      (fg-heading-0 cyan-cooler)
+      (fg-heading-1 fg-main)
+      (fg-heading-2 yellow-faint)
+      (fg-heading-3 fg-alt)
+      (fg-heading-4 magenta)
+      (fg-heading-5 green-faint)
+      (fg-heading-6 red-faint)
+      (fg-heading-7 cyan-warmer)
+      (fg-heading-8 fg-dim)
+
+      (bg-heading-0 unspecified)
+      (bg-heading-1 unspecified)
+      (bg-heading-2 unspecified)
+      (bg-heading-3 unspecified)
+      (bg-heading-4 unspecified)
+      (bg-heading-5 unspecified)
+      (bg-heading-6 unspecified)
+      (bg-heading-7 unspecified)
+      (bg-heading-8 unspecified)
+
+      (overline-heading-0 unspecified)
+      (overline-heading-1 unspecified)
+      (overline-heading-2 unspecified)
+      (overline-heading-3 unspecified)
+      (overline-heading-4 unspecified)
+      (overline-heading-5 unspecified)
+      (overline-heading-6 unspecified)
+      (overline-heading-7 unspecified)
+      (overline-heading-8 unspecified))
+    "The entire palette of the `modus-operandi' theme.
+
+Named colors have the form (COLOR-NAME HEX-VALUE) with the former
+as a symbol and the latter as a string.
+
+Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
+with both as symbols.  The latter is a named color that already
+exists in the palette and is associated with a HEX-VALUE.
+
+Semantic color mappings cannot be recursive: their value must be
+either COLOR-NAME or HEX-VALUE.")
+
+  (defcustom modus-operandi-palette-overrides nil
+    "Overrides for `modus-operandi-palette'.
+
+Mirror the elements of the aforementioned palette, overriding
+their value.
+
+For overrides that are shared across all of the Modus themes,
+refer to `modus-themes-common-palette-overrides'.
+
+Theme-specific overrides take precedence over shared overrides.
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red.  Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+    :group 'modus-themes
+    :package-version '(modus-themes . "4.0.0")
+    :version "30.1"
+    :type '(repeat (list symbol (choice symbol string)))
+    :set #'modus-themes--set-option
+    :initialize #'custom-initialize-default
+    :link '(info-link "(modus-themes) Palette overrides"))
+
+  (modus-themes-theme modus-operandi
+                      modus-operandi-palette
+                      modus-operandi-palette-overrides)
 
   (provide-theme 'modus-operandi))
 
diff --git a/etc/themes/modus-operandi-tinted-theme.el 
b/etc/themes/modus-operandi-tinted-theme.el
new file mode 100644
index 00000000000..52024ceee95
--- /dev/null
+++ b/etc/themes/modus-operandi-tinted-theme.el
@@ -0,0 +1,417 @@
+;;; modus-operandi-tinted-theme.el --- Elegant, highly legible and 
customizable light theme -*- lexical-binding:t -*-
+
+;; Copyright (C) 2019-2023  Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+;; URL: https://git.sr.ht/~protesilaos/modus-themes
+;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
+
+;; 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:
+;;
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA).  Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
+
+;;; Code:
+
+
+
+(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))
+
+  (deftheme modus-operandi-tinted
+    "Elegant, highly legible and customizable light theme.
+Conforms with the highest legibility standard for color contrast
+between background and foreground in any given piece of text,
+which corresponds to a minimum contrast in relative luminance of
+7:1 (WCAG AAA standard).")
+
+  (defconst modus-operandi-tinted-palette
+    '(
+;;; Basic values
+
+      (bg-main          "#fbf7f0")
+      (bg-dim           "#ede7db")
+      (fg-main          "#000000")
+      (fg-dim           "#595959")
+      (fg-alt           "#193668")
+      (bg-active        "#c9b9b0")
+      (bg-inactive      "#dfd5cf")
+      (border           "#9f9690")
+
+;;; Common accent foregrounds
+
+      (red             "#a60000")
+      (red-warmer      "#972500")
+      (red-cooler      "#a0132f")
+      (red-faint       "#7f0000")
+      (red-intense     "#d00000")
+      (green           "#006800")
+      (green-warmer    "#316500")
+      (green-cooler    "#00663f")
+      (green-faint     "#2a5045")
+      (green-intense   "#008900")
+      (yellow          "#6f5500")
+      (yellow-warmer   "#884900")
+      (yellow-cooler   "#7a4f2f")
+      (yellow-faint    "#624416")
+      (yellow-intense  "#808000")
+      (blue            "#0031a9")
+      (blue-warmer     "#354fcf")
+      (blue-cooler     "#0000b0")
+      (blue-faint      "#003497")
+      (blue-intense    "#0000ff")
+      (magenta         "#721045")
+      (magenta-warmer  "#8f0075")
+      (magenta-cooler  "#531ab6")
+      (magenta-faint   "#7c318f")
+      (magenta-intense "#dd22dd")
+      (cyan            "#005e8b")
+      (cyan-warmer     "#3f578f")
+      (cyan-cooler     "#005f5f")
+      (cyan-faint      "#005077")
+      (cyan-intense    "#008899")
+
+;;; Uncommon accent foregrounds
+
+      (rust       "#8a290f")
+      (gold       "#80601f")
+      (olive      "#56692d")
+      (slate      "#2f3f83")
+      (indigo     "#4a3a8a")
+      (maroon     "#731c52")
+      (pink       "#7b435c")
+
+;;; Common accent backgrounds
+
+      (bg-red-intense     "#ff8f88")
+      (bg-green-intense   "#8adf80")
+      (bg-yellow-intense  "#f3d000")
+      (bg-blue-intense    "#bfc9ff")
+      (bg-magenta-intense "#dfa0f0")
+      (bg-cyan-intense    "#a4d5f9")
+
+      (bg-red-subtle      "#ffcfbf")
+      (bg-green-subtle    "#b3fabf")
+      (bg-yellow-subtle   "#fff576")
+      (bg-blue-subtle     "#ccdfff")
+      (bg-magenta-subtle  "#ffddff")
+      (bg-cyan-subtle     "#bfefff")
+
+      (bg-red-nuanced     "#fff1f0")
+      (bg-green-nuanced   "#ecf7ed")
+      (bg-yellow-nuanced  "#fff3da")
+      (bg-blue-nuanced    "#f3f3ff")
+      (bg-magenta-nuanced "#fdf0ff")
+      (bg-cyan-nuanced    "#ebf6fa")
+
+;;; Uncommon accent backgrounds
+
+      (bg-ochre    "#f0e0cc")
+      (bg-lavender "#dfdbfa")
+      (bg-sage     "#c0e7d4")
+
+;;; Graphs
+
+      (bg-graph-red-0     "#ef7969")
+      (bg-graph-red-1     "#ffaab4")
+      (bg-graph-green-0   "#4faa09")
+      (bg-graph-green-1   "#8fef00")
+      (bg-graph-yellow-0  "#ffcf00")
+      (bg-graph-yellow-1  "#f9ff00")
+      (bg-graph-blue-0    "#7090ff")
+      (bg-graph-blue-1    "#9fc6ff")
+      (bg-graph-magenta-0 "#e07fff")
+      (bg-graph-magenta-1 "#fad0ff")
+      (bg-graph-cyan-0    "#70d3f0")
+      (bg-graph-cyan-1    "#afefff")
+
+;;; Special purpose
+
+      (bg-completion       "#f0c1cf")
+      (bg-hover            "#94d4ff")
+      (bg-hover-secondary  "#f5d0a0")
+      (bg-hl-line          "#f1d5d0")
+      (bg-region           "#c2bcb5")
+      (fg-region           "#000000")
+
+      (bg-char-0 "#7feaff")
+      (bg-char-1 "#ffaaff")
+      (bg-char-2 "#dff000")
+
+      (bg-mode-line-active        "#cab9b2")
+      (fg-mode-line-active        "#000000")
+      (border-mode-line-active    "#545454")
+      (bg-mode-line-inactive      "#dfd9cf")
+      (fg-mode-line-inactive      "#585858")
+      (border-mode-line-inactive  "#a59a94")
+
+      (modeline-err     "#7f0000")
+      (modeline-warning "#5f0070")
+      (modeline-info    "#002580")
+
+      (bg-tab-bar      "#e0d4ce")
+      (bg-tab-current  "#fbf7f0")
+      (bg-tab-other    "#c8b8b2")
+
+;;; Diffs
+
+      (bg-added           "#c3ebc1")
+      (bg-added-faint     "#dcf8d1")
+      (bg-added-refine    "#acd6a5")
+      (bg-added-intense   "#8cca8c")
+      (fg-added           "#005000")
+      (fg-added-intense   "#006700")
+
+      (bg-changed         "#ffdfa9")
+      (bg-changed-faint   "#ffefbf")
+      (bg-changed-refine  "#fac090")
+      (bg-changed-intense "#d7c20a")
+      (fg-changed         "#553d00")
+      (fg-changed-intense "#655000")
+
+      (bg-removed         "#f4d0cf")
+      (bg-removed-faint   "#ffe9e5")
+      (bg-removed-refine  "#f3b5a7")
+      (bg-removed-intense "#d84a4f")
+      (fg-removed         "#8f1313")
+      (fg-removed-intense "#aa2222")
+
+;;; Paren match
+
+      (bg-paren-match        "#7fdfcf")
+      (bg-paren-expression   "#efd3f5")
+      (underline-paren-match unspecified)
+
+;;; Mappings
+
+;;;; General mappings
+
+      (fringe bg-dim)
+      (cursor red)
+
+      (keybind blue-cooler)
+      (name magenta)
+      (identifier yellow-cooler)
+
+      (err red)
+      (warning yellow-warmer)
+      (info cyan-cooler)
+
+      (underline-err red-intense)
+      (underline-warning yellow-intense)
+      (underline-note cyan-intense)
+
+;;;; Code mappings
+
+      (builtin magenta-warmer)
+      (comment red-faint)
+      (constant blue-cooler)
+      (docstring green-faint)
+      (docmarkup magenta-faint)
+      (fnname magenta)
+      (keyword magenta-cooler)
+      (preprocessor red-cooler)
+      (string blue-warmer)
+      (type cyan-cooler)
+      (variable cyan)
+      (rx-construct green-cooler)
+      (rx-backslash magenta)
+
+;;;; Accent mappings
+
+      (accent-0 blue)
+      (accent-1 magenta-warmer)
+      (accent-2 cyan)
+      (accent-3 red)
+
+;;;; Button mappings
+
+      (fg-button-active fg-main)
+      (fg-button-inactive fg-dim)
+      (bg-button-active bg-active)
+      (bg-button-inactive bg-dim)
+
+;;;; Completion mappings
+
+      (fg-completion-match-0 blue)
+      (fg-completion-match-1 magenta-warmer)
+      (fg-completion-match-2 cyan)
+      (fg-completion-match-3 red)
+      (bg-completion-match-0 unspecified)
+      (bg-completion-match-1 unspecified)
+      (bg-completion-match-2 unspecified)
+      (bg-completion-match-3 unspecified)
+
+;;;; Date mappings
+
+      (date-common cyan)
+      (date-deadline red)
+      (date-event fg-alt)
+      (date-holiday magenta)
+      (date-now fg-main)
+      (date-scheduled yellow-warmer)
+      (date-weekday cyan)
+      (date-weekend red-faint)
+
+;;;; Line number mappings
+
+      (fg-line-number-inactive fg-dim)
+      (fg-line-number-active fg-main)
+      (bg-line-number-inactive bg-dim)
+      (bg-line-number-active bg-active)
+
+;;;; Link mappings
+
+      (fg-link blue-warmer)
+      (bg-link unspecified)
+      (underline-link blue-warmer)
+
+      (fg-link-symbolic cyan)
+      (bg-link-symbolic unspecified)
+      (underline-link-symbolic cyan)
+
+      (fg-link-visited magenta)
+      (bg-link-visited unspecified)
+      (underline-link-visited magenta)
+
+;;;; Mail mappings
+
+      (mail-cite-0 blue-faint)
+      (mail-cite-1 yellow-warmer)
+      (mail-cite-2 cyan-cooler)
+      (mail-cite-3 red-cooler)
+      (mail-part cyan)
+      (mail-recipient magenta-cooler)
+      (mail-subject magenta-warmer)
+      (mail-other magenta-faint)
+
+;;;; Prompt mappings
+
+      (fg-prompt cyan-cooler)
+      (bg-prompt unspecified)
+
+;;;; Prose mappings
+
+      (prose-block fg-dim)
+      (prose-code green-cooler)
+      (prose-done green)
+      (prose-macro magenta-cooler)
+      (prose-metadata fg-dim)
+      (prose-metadata-value fg-alt)
+      (prose-table fg-alt)
+      (prose-tag magenta-faint)
+      (prose-todo red)
+      (prose-verbatim magenta-warmer)
+
+;;;; Rainbow mappings
+
+      (rainbow-0 fg-main)
+      (rainbow-1 magenta-intense)
+      (rainbow-2 cyan-intense)
+      (rainbow-3 red-warmer)
+      (rainbow-4 yellow-intense)
+      (rainbow-5 magenta-cooler)
+      (rainbow-6 green-intense)
+      (rainbow-7 blue-warmer)
+      (rainbow-8 magenta-warmer)
+
+;;;; Heading mappings
+
+      (fg-heading-0 cyan-cooler)
+      (fg-heading-1 fg-main)
+      (fg-heading-2 yellow-faint)
+      (fg-heading-3 fg-alt)
+      (fg-heading-4 magenta)
+      (fg-heading-5 green-faint)
+      (fg-heading-6 red-faint)
+      (fg-heading-7 cyan-warmer)
+      (fg-heading-8 fg-dim)
+
+      (bg-heading-0 unspecified)
+      (bg-heading-1 unspecified)
+      (bg-heading-2 unspecified)
+      (bg-heading-3 unspecified)
+      (bg-heading-4 unspecified)
+      (bg-heading-5 unspecified)
+      (bg-heading-6 unspecified)
+      (bg-heading-7 unspecified)
+      (bg-heading-8 unspecified)
+
+      (overline-heading-0 unspecified)
+      (overline-heading-1 unspecified)
+      (overline-heading-2 unspecified)
+      (overline-heading-3 unspecified)
+      (overline-heading-4 unspecified)
+      (overline-heading-5 unspecified)
+      (overline-heading-6 unspecified)
+      (overline-heading-7 unspecified)
+      (overline-heading-8 unspecified))
+    "The entire palette of the `modus-operandi-tinted' theme.
+
+Named colors have the form (COLOR-NAME HEX-VALUE) with the former
+as a symbol and the latter as a string.
+
+Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
+with both as symbols.  The latter is a named color that already
+exists in the palette and is associated with a HEX-VALUE.
+
+Semantic color mappings cannot be recursive: their value must be
+either COLOR-NAME or HEX-VALUE.")
+
+  (defcustom modus-operandi-tinted-palette-overrides nil
+    "Overrides for `modus-operandi-tinted-palette'.
+
+Mirror the elements of the aforementioned palette, overriding
+their value.
+
+For overrides that are shared across all of the Modus themes,
+refer to `modus-themes-common-palette-overrides'.
+
+Theme-specific overrides take precedence over shared overrides.
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red.  Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+    :group 'modus-themes
+    :package-version '(modus-themes . "4.0.0")
+    :version "30.1"
+    :type '(repeat (list symbol (choice symbol string)))
+    :set #'modus-themes--set-option
+    :initialize #'custom-initialize-default
+    :link '(info-link "(modus-themes) Palette overrides"))
+
+  (modus-themes-theme modus-operandi-tinted
+                      modus-operandi-tinted-palette
+                      modus-operandi-tinted-palette-overrides)
+
+  (provide-theme 'modus-operandi-tinted))
+
+;;;###theme-autoload
+(put 'modus-operandi-tinted 'theme-properties '(:background-mode light :kind 
color-scheme :family modus))
+
+;;; modus-operandi-tinted-theme.el ends here
diff --git a/etc/themes/modus-themes.el b/etc/themes/modus-themes.el
index a9d0d53cba9..f4f33aa36e0 100644
--- a/etc/themes/modus-themes.el
+++ b/etc/themes/modus-themes.el
@@ -1,12 +1,12 @@
 ;;; modus-themes.el --- Elegant, highly legible and customizable themes -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2019-2022  Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023  Free Software Foundation, Inc.
 
 ;; Author: Protesilaos Stavrou <info@protesilaos.com>
 ;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
 ;; URL: https://git.sr.ht/~protesilaos/modus-themes
 ;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
-;; Version: 3.0.0
+;; Version: 4.0.1
 ;; Package-Requires: ((emacs "27.1"))
 ;; Keywords: faces, theme, accessibility
 
@@ -27,57 +27,11 @@
 
 ;;; Commentary:
 ;;
-;; The Modus themes conform with the highest standard for color-contrast
-;; accessibility between background and foreground values (WCAG AAA).
-;; This file contains all customization variables, helper functions,
-;; interactive commands, and face specifications.  Please refer to the
-;; official Info manual for further documentation (distributed with the
-;; themes, or available at: <https://protesilaos.com/emacs/modus-themes>).
-;;
-;; The themes share the following customization variables:
-;;
-;;     modus-themes-completions                    (alist)
-;;     modus-themes-headings                       (alist)
-;;     modus-themes-org-agenda                     (alist)
-;;     modus-themes-bold-constructs                (boolean)
-;;     modus-themes-deuteranopia                   (boolean)
-;;     modus-themes-inhibit-reload                 (boolean)
-;;     modus-themes-intense-mouseovers             (boolean)
-;;     modus-themes-italic-constructs              (boolean)
-;;     modus-themes-mixed-fonts                    (boolean)
-;;     modus-themes-subtle-line-numbers            (boolean)
-;;     modus-themes-variable-pitch-ui              (boolean)
-;;     modus-themes-box-buttons                    (choice)
-;;     modus-themes-diffs                          (choice)
-;;     modus-themes-fringes                        (choice)
-;;     modus-themes-hl-line                        (choice)
-;;     modus-themes-lang-checkers                  (choice)
-;;     modus-themes-links                          (choice)
-;;     modus-themes-mail-citations                 (choice)
-;;     modus-themes-markup                         (choice)
-;;     modus-themes-mode-line                      (choice)
-;;     modus-themes-org-blocks                     (choice)
-;;     modus-themes-paren-match                    (choice)
-;;     modus-themes-prompts                        (choice)
-;;     modus-themes-region                         (choice)
-;;     modus-themes-syntax                         (choice)
-;;
-;; There also exist two unique customization variables for overriding
-;; color palette values.  The specifics are documented in the manual.
-;; The symbols are:
-;;
-;;     modus-themes-operandi-color-overrides       (alist)
-;;     modus-themes-vivendi-color-overrides        (alist)
-;;
-;; Check the manual for all supported packages (there are hundreds of
-;; them).
-;;
-;; For a complete view of the project, also refer to the following files
-;; (should be distributed in the same repository/directory as the
-;; current item):
-;;
-;; - modus-operandi-theme.el    (Light theme)
-;; - modus-vivendi-theme.el     (Dark theme)
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA).  Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
 
 ;;; Code:
 
@@ -88,7 +42,7 @@
   (require 'subr-x))
 
 (defgroup modus-themes ()
-  "Options for `modus-operandi', `modus-vivendi' themes.
+  "User options for the Modus themes.
 The Modus themes conform with the WCAG AAA standard for color
 contrast between background and foreground combinations (a
 minimum contrast of 7:1---the highest standard of its kind).  The
@@ -103,1139 +57,148 @@ cover the blue-cyan-magenta side of the spectrum."
   :tag "Modus Themes")
 
 (defgroup modus-themes-faces ()
-  "Faces defined by `modus-operandi' and `modus-vivendi' themes."
+  "Faces defined by the Modus themes."
   :group 'modus-themes
   :link '(info-link "(modus-themes) Top")
   :prefix "modus-themes-"
   :tag "Modus Themes Faces")
 
-(defvar modus-themes--version "3.0.0"
-  "Current version of the Modus themes.
-
-The version either is the last tagged release, such as '1.0.0',
-or an in-development version like '1.1.0-dev'.  As we use
-semantic versioning, tags of the '1.0.1' sort are not reported:
-those would count as part of '1.1.0-dev'.")
-
-;;;###autoload
-(defun modus-themes-version (&optional insert)
-  "Print `modus-themes--version' in the echo area.
-If optional INSERT argument is provided from Lisp or as a prefix
-argument, insert the `modus-themes--version' at point."
-  (interactive "P")
-  (funcall (if insert 'insert 'message) modus-themes--version))
-
-;;;###autoload
-(defun modus-themes-report-bug ()
-  "Submit a bug report or issue to the Modus themes developers."
-  (interactive)
-  (reporter-submit-bug-report
-   "~protesilaos/modus-themes@lists.sr.ht"
-   (format "modus-themes (%s)\n" modus-themes--version)
-   ;; I am just getting started with this.  Let's first see what people
-   ;; think about it.
-   nil nil nil nil))
-
-;;; Variables for each theme variant
-
-;;;; Modus Operandi
-
-(defconst modus-themes-operandi-colors
-  '(;; base values
-    (bg-main . "#ffffff") (fg-main . "#000000")
-    (bg-dim . "#f8f8f8") (fg-dim . "#282828")
-    (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; 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
-    ;; on their name or each can be combined with {fg,bg}-{main,alt,dim}
-    ;; always in accordance with their role as background or foreground
-    (bg-special-cold . "#dde3f4") (bg-special-faint-cold . "#f0f1ff") 
(fg-special-cold . "#093060")
-    (bg-special-mild . "#c4ede0") (bg-special-faint-mild . "#ebf5eb") 
(fg-special-mild . "#184034")
-    (bg-special-warm . "#f0e0d4") (bg-special-faint-warm . "#fef2ea") 
(fg-special-warm . "#5d3026")
-    (bg-special-calm . "#f8ddea") (bg-special-faint-calm . "#faeff9") 
(fg-special-calm . "#61284f")
-    ;; foregrounds that can be combined with bg-main, bg-dim, bg-alt
-    (red . "#a60000")
-    (red-alt . "#972500")
-    (red-alt-other . "#a0132f")
-    (red-faint . "#7f1010")
-    (red-alt-faint . "#702f00")
-    (red-alt-other-faint . "#7f002f")
-    (green . "#005e00")
-    (green-alt . "#315b00")
-    (green-alt-other . "#145c33")
-    (green-faint . "#104410")
-    (green-alt-faint . "#30440f")
-    (green-alt-other-faint . "#0f443f")
-    (yellow . "#813e00")
-    (yellow-alt . "#70480f")
-    (yellow-alt-other . "#863927")
-    (yellow-faint . "#5f4400")
-    (yellow-alt-faint . "#5d5000")
-    (yellow-alt-other-faint . "#5e3a20")
-    (blue . "#0031a9")
-    (blue-alt . "#2544bb")
-    (blue-alt-other . "#0000c0")
-    (blue-faint . "#003497")
-    (blue-alt-faint . "#0f3d8c")
-    (blue-alt-other-faint . "#001087")
-    (magenta . "#721045")
-    (magenta-alt . "#8f0075")
-    (magenta-alt-other . "#5317ac")
-    (magenta-faint . "#752f50")
-    (magenta-alt-faint . "#7b206f")
-    (magenta-alt-other-faint . "#55348e")
-    (cyan . "#00538b")
-    (cyan-alt . "#30517f")
-    (cyan-alt-other . "#005a5f")
-    (cyan-faint . "#005077")
-    (cyan-alt-faint . "#354f6f")
-    (cyan-alt-other-faint . "#125458")
-    ;; these foreground values can only be combined with bg-main and are
-    ;; thus not suitable for general purpose highlighting
-    (red-intense . "#b60000")
-    (orange-intense . "#904200")
-    (green-intense . "#006800")
-    (yellow-intense . "#605b00")
-    (blue-intense . "#1f1fce")
-    (magenta-intense . "#a8007f")
-    (purple-intense . "#7f10d0")
-    (cyan-intense . "#005f88")
-    ;; those foregrounds are meant exclusively for bg-active, bg-inactive
-    (red-active . "#8a0000")
-    (green-active . "#004c2e")
-    (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 . "#ff9f9f")
-    (green-subtle-bg . "#aecf90")
-    (green-intense-bg . "#5ada88")
-    (yellow-subtle-bg . "#e4c340")
-    (yellow-intense-bg . "#f5df23")
-    (blue-subtle-bg . "#b5d0ff")
-    (blue-intense-bg . "#77baff")
-    (magenta-subtle-bg . "#f0d3ff")
-    (magenta-intense-bg . "#d5baff")
-    (cyan-subtle-bg . "#c0efff")
-    (cyan-intense-bg . "#42cbd4")
-    ;; those background values must be combined with fg-main and should
-    ;; only be used for indicators that are placed on the fringes
-    (red-fringe-bg . "#f08290")
-    (green-fringe-bg . "#62c86a")
-    (yellow-fringe-bg . "#dbba3f")
-    (blue-fringe-bg . "#82afff")
-    (magenta-fringe-bg . "#e0a3ff")
-    (cyan-fringe-bg . "#2fcddf")
-    ;; those background values should only be used for graphs or similar
-    ;; applications where colored blocks are expected to be positioned
-    ;; next to each other
-    (red-graph-0-bg . "#ef7969")
-    (red-graph-1-bg . "#ffaab4")
-    (green-graph-0-bg . "#4faa09")
-    (green-graph-1-bg . "#8fef00")
-    (yellow-graph-0-bg . "#ffcf00")
-    (yellow-graph-1-bg . "#f9ff00")
-    (blue-graph-0-bg . "#7090ff")
-    (blue-graph-1-bg . "#9fc6ff")
-    (magenta-graph-0-bg . "#e07fff")
-    (magenta-graph-1-bg . "#fad0ff")
-    (cyan-graph-0-bg . "#70d3f0")
-    (cyan-graph-1-bg . "#afefff")
-    ;; the following are for cases where both the foreground and the
-    ;; background need to have a similar hue and so must be combined
-    ;; with themselves, even though the foregrounds can be paired with
-    ;; any of the base backgrounds
-    (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 . "#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
-    ;; foregrounds, as well as those included here, while the "nuanced"
-    ;; foregrounds can in turn also be combined with bg-main, bg-dim,
-    ;; bg-alt
-    (red-nuanced-bg . "#fff1f0") (red-nuanced-fg . "#5f0000")
-    (green-nuanced-bg . "#ecf7ed") (green-nuanced-fg . "#004000")
-    (yellow-nuanced-bg . "#fff3da") (yellow-nuanced-fg . "#3f3000")
-    (blue-nuanced-bg . "#f3f3ff") (blue-nuanced-fg . "#201f55")
-    (magenta-nuanced-bg . "#fdf0ff") (magenta-nuanced-fg . "#541f4f")
-    (cyan-nuanced-bg . "#ebf6fa") (cyan-nuanced-fg . "#0f3360")
-    ;; the following are reserved for specific cases
-    ;;
-    ;; bg-hl-line is between bg-dim and bg-alt, so it should
-    ;; 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 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,
-    ;; 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-completion-* and bg-char-* variants are meant to be combined
-    ;; with fg-main
-    ;;
-    ;; fg-escape-char-construct and fg-escape-char-backslash can
-    ;; be combined bg-main, bg-dim, bg-alt
-    ;;
-    ;; fg-lang-error, fg-lang-warning, fg-lang-note can be
-    ;; combined with bg-main, bg-dim, bg-alt
-    ;;
-    ;; fg-mark-sel, fg-mark-del, fg-mark-alt can be combined
-    ;; with bg-main, bg-dim, bg-alt, bg-hl-line
-    ;;
-    ;; fg-unfocused must be combined with bg-main
-    ;;
-    ;; fg-docstring, fg-comment-yellow can be combined with
-    ;; bg-main, bg-dim, bg-alt
-    ;;
-    ;; the window divider colors apply to faces with just an fg value
-    ;;
-    ;; all pairs are combinable with themselves
-    (bg-hl-line . "#f2eff3")
-    (bg-hl-line-intense . "#e0e0e0")
-    (bg-hl-line-intense-accent . "#cfe2ff")
-    (bg-hl-alt . "#fbeee0")
-    (bg-hl-alt-intense . "#e8dfd1")
-    (bg-paren-match . "#e0af82")
-    (bg-paren-match-intense . "#c488ff")
-    (bg-paren-expression . "#dff0ff")
-    (bg-region . "#bcbcbc")
-    (bg-region-accent . "#afafef")
-    (bg-region-accent-subtle . "#efdfff")
-
-    (bg-completion . "#b7dbff")
-    (bg-completion-subtle . "#def3ff")
-
-    (bg-char-0 . "#7feaff")
-    (bg-char-1 . "#ffaaff")
-    (bg-char-2 . "#dff000")
-
-    (bg-tab-active . "#f6f6f6")
-    (bg-tab-inactive . "#b7b7b7")
-    (bg-tab-inactive-accent . "#a9b4f6")
-    (bg-tab-inactive-alt . "#9f9f9f")
-    (bg-tab-inactive-alt-accent . "#9fa6d0")
-
-    (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")
-
-    (fg-lang-error . "#9f004f")
-    (fg-lang-warning . "#604f0f")
-    (fg-lang-note . "#4040ae")
-    (fg-lang-underline-error . "#ef4f54")
-    (fg-lang-underline-warning . "#cf9f00")
-    (fg-lang-underline-note . "#3f6fef")
-
-    (fg-window-divider-inner . "#888888")
-    (fg-window-divider-outer . "#585858")
-
-    (fg-unfocused . "#56576d")
-
-    (fg-docstring . "#2a486a")
-    (fg-comment-yellow . "#794319")
-
-    (bg-header . "#e5e5e5") (fg-header . "#2a2a2a")
-
-    (bg-whitespace . "#f5efef") (fg-whitespace . "#624956")
-
-    (bg-diff-heading . "#b7cfe0") (fg-diff-heading . "#041645")
-    (bg-diff-added . "#d4fad4") (fg-diff-added . "#004500")
-    (bg-diff-added-deuteran . "#daefff") (fg-diff-added-deuteran . "#002044")
-    (bg-diff-changed . "#fcefcf") (fg-diff-changed . "#524200")
-    (bg-diff-removed . "#ffe8ef") (fg-diff-removed . "#691616")
-
-    (bg-diff-refine-added . "#94cf94") (fg-diff-refine-added . "#002a00")
-    (bg-diff-refine-added-deuteran . "#77c0ef") (fg-diff-refine-added-deuteran 
. "#000035")
-    (bg-diff-refine-changed . "#cccf8f") (fg-diff-refine-changed . "#302010")
-    (bg-diff-refine-removed . "#daa2b0") (fg-diff-refine-removed . "#400000")
-
-    (bg-diff-focus-added . "#bbeabb") (fg-diff-focus-added . "#002c00")
-    (bg-diff-focus-added-deuteran . "#bacfff") (fg-diff-focus-added-deuteran . 
"#001755")
-    (bg-diff-focus-changed . "#ecdfbf") (fg-diff-focus-changed . "#392900")
-    (bg-diff-focus-removed . "#efcbcf") (fg-diff-focus-removed . "#4a0000")
-
-    (bg-mark-sel . "#a0f0cf") (fg-mark-sel . "#005040")
-    (bg-mark-del . "#ffccbb") (fg-mark-del . "#840040")
-    (bg-mark-alt . "#f5d88f") (fg-mark-alt . "#782900"))
-  "The entire palette of the `modus-operandi' theme.
-Each element has the form (NAME . HEX) with the former as a
-symbol and the latter as a string.")
-
-;;;; Modus Vivendi
-
-(defconst modus-themes-vivendi-colors
-  '(;; base values
-    (bg-main . "#000000") (fg-main . "#ffffff")
-    (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; 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
-    ;; on their name or each can be combined with {fg,bg}-{main,alt,dim}
-    ;; always in accordance with their role as background or foreground
-    (bg-special-cold . "#203448") (bg-special-faint-cold . "#0e183a") 
(fg-special-cold . "#c6eaff")
-    (bg-special-mild . "#00322e") (bg-special-faint-mild . "#001f1a") 
(fg-special-mild . "#bfebe0")
-    (bg-special-warm . "#382f27") (bg-special-faint-warm . "#241613") 
(fg-special-warm . "#f8dec0")
-    (bg-special-calm . "#392a48") (bg-special-faint-calm . "#251232") 
(fg-special-calm . "#fbd6f4")
-    ;; foregrounds that can be combined with bg-main, bg-dim, bg-alt
-    (red . "#ff8059")
-    (red-alt . "#ef8b50")
-    (red-alt-other . "#ff9077")
-    (red-faint . "#ffa0a0")
-    (red-alt-faint . "#f5aa80")
-    (red-alt-other-faint . "#ff9fbf")
-    (green . "#44bc44")
-    (green-alt . "#70b900")
-    (green-alt-other . "#00c06f")
-    (green-faint . "#78bf78")
-    (green-alt-faint . "#99b56f")
-    (green-alt-other-faint . "#88bf99")
-    (yellow . "#d0bc00")
-    (yellow-alt . "#c0c530")
-    (yellow-alt-other . "#d3b55f")
-    (yellow-faint . "#d2b580")
-    (yellow-alt-faint . "#cabf77")
-    (yellow-alt-other-faint . "#d0ba95")
-    (blue . "#2fafff")
-    (blue-alt . "#79a8ff" )
-    (blue-alt-other . "#00bcff")
-    (blue-faint . "#82b0ec")
-    (blue-alt-faint . "#a0acef")
-    (blue-alt-other-faint . "#80b2f0")
-    (magenta . "#feacd0")
-    (magenta-alt . "#f78fe7")
-    (magenta-alt-other . "#b6a0ff")
-    (magenta-faint . "#e0b2d6")
-    (magenta-alt-faint . "#ef9fe4")
-    (magenta-alt-other-faint . "#cfa6ff")
-    (cyan . "#00d3d0")
-    (cyan-alt . "#4ae2f0")
-    (cyan-alt-other . "#6ae4b9")
-    (cyan-faint . "#90c4ed")
-    (cyan-alt-faint . "#a0bfdf")
-    (cyan-alt-other-faint . "#a4d0bb")
-    ;; these foreground values can only be combined with bg-main and are
-    ;; thus not suitable for general purpose highlighting
-    (red-intense . "#fe6060")
-    (orange-intense . "#fba849")
-    (green-intense . "#4fe42f")
-    (yellow-intense . "#f0dd60")
-    (blue-intense . "#4fafff")
-    (magenta-intense . "#ff62d4")
-    (purple-intense . "#9f80ff")
-    (cyan-intense . "#3fdfd0")
-    ;; those foregrounds are meant exclusively for bg-active, bg-inactive
-    (red-active . "#ffa7ba")
-    (green-active . "#70d73f")
-    (yellow-active . "#dbbe5f")
-    (blue-active . "#34cfff")
-    (magenta-active . "#d5b1ff")
-    (cyan-active . "#00d8b4")
-    ;; the "subtle" values below be combined with fg-dim, while the
-    ;; "intense" should be paired with fg-main
-    (red-subtle-bg . "#762422")
-    (red-intense-bg . "#a4202a")
-    (green-subtle-bg . "#2f4a00")
-    (green-intense-bg . "#006800")
-    (yellow-subtle-bg . "#604200")
-    (yellow-intense-bg . "#874900")
-    (blue-subtle-bg . "#10387c")
-    (blue-intense-bg . "#2a40b8")
-    (magenta-subtle-bg . "#49366e")
-    (magenta-intense-bg . "#7042a2")
-    (cyan-subtle-bg . "#00415e")
-    (cyan-intense-bg . "#005f88")
-    ;; those background values must be combined with fg-main and should
-    ;; only be used for indicators that are placed on the fringes
-    (red-fringe-bg . "#8f1f4b")
-    (green-fringe-bg . "#006700")
-    (yellow-fringe-bg . "#6f4f00")
-    (blue-fringe-bg . "#3f33af")
-    (magenta-fringe-bg . "#6f2f89")
-    (cyan-fringe-bg . "#004f8f")
-    ;; those background values should only be used for graphs or similar
-    ;; applications where colored blocks are expected to be positioned
-    ;; next to each other
-    (red-graph-0-bg . "#b52c2c")
-    (red-graph-1-bg . "#702020")
-    (green-graph-0-bg . "#4fd100")
-    (green-graph-1-bg . "#007800")
-    (yellow-graph-0-bg . "#f1e00a")
-    (yellow-graph-1-bg . "#b08600")
-    (blue-graph-0-bg . "#2fafef")
-    (blue-graph-1-bg . "#1f2f8f")
-    (magenta-graph-0-bg . "#bf94fe")
-    (magenta-graph-1-bg . "#5f509f")
-    (cyan-graph-0-bg . "#47dfea")
-    (cyan-graph-1-bg . "#00808f")
-    ;; the following are for cases where both the foreground and the
-    ;; background need to have a similar hue and so must be combined
-    ;; with themselves, even though the foregrounds can be paired with
-    ;; any of the base backgrounds
-    (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 . "#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
-    ;; foregrounds, as well as those included here, while the "nuanced"
-    ;; foregrounds can in turn also be combined with bg-main, bg-dim,
-    ;; bg-alt
-    (red-nuanced-bg . "#2c0614") (red-nuanced-fg . "#ffcccc")
-    (green-nuanced-bg . "#001904") (green-nuanced-fg . "#b8e2b8")
-    (yellow-nuanced-bg . "#221000") (yellow-nuanced-fg . "#dfdfb0")
-    (blue-nuanced-bg . "#0f0e39") (blue-nuanced-fg . "#bfd9ff")
-    (magenta-nuanced-bg . "#230631") (magenta-nuanced-fg . "#e5cfef")
-    (cyan-nuanced-bg . "#041529") (cyan-nuanced-fg . "#a8e5e5")
-    ;; the following are reserved for specific cases
-    ;;
-    ;; bg-hl-line is between bg-dim and bg-alt, so it should
-    ;; 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 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,
-    ;; 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-completion-* and bg-char-* variants are meant to be combined
-    ;; with fg-main
-    ;;
-    ;; fg-escape-char-construct and fg-escape-char-backslash can
-    ;; be combined bg-main, bg-dim, bg-alt
-    ;;
-    ;; fg-lang-error, fg-lang-warning, fg-lang-note can be
-    ;; combined with bg-main, bg-dim, bg-alt
-    ;;
-    ;; fg-mark-sel, fg-mark-del, fg-mark-alt can be combined
-    ;; with bg-main, bg-dim, bg-alt, bg-hl-line
-    ;;
-    ;; fg-unfocused must be combined with bg-main
-    ;;
-    ;; fg-docstring, fg-comment-yellow can be combined with
-    ;; bg-main, bg-dim, bg-alt
-    ;;
-    ;; the window divider colors apply to faces with just an fg value
-    ;;
-    ;; all pairs are combinable with themselves
-    (bg-hl-line . "#151823")
-    (bg-hl-line-intense . "#292929")
-    (bg-hl-line-intense-accent . "#002a4f")
-    (bg-hl-alt . "#181732")
-    (bg-hl-alt-intense . "#282e46")
-    (bg-paren-match . "#6f3355")
-    (bg-paren-match-intense . "#7416b5")
-    (bg-paren-expression . "#221044")
-    (bg-region . "#3c3c3c")
-    (bg-region-accent . "#4f3d88")
-    (bg-region-accent-subtle . "#240f55")
-
-    (bg-completion . "#142f69")
-    (bg-completion-subtle . "#0e194b")
-
-    (bg-char-0 . "#0050af")
-    (bg-char-1 . "#7f1f7f")
-    (bg-char-2 . "#625a00")
-
-    (bg-tab-active . "#0e0e0e")
-    (bg-tab-inactive . "#424242")
-    (bg-tab-inactive-accent . "#35398f")
-    (bg-tab-inactive-alt . "#595959")
-    (bg-tab-inactive-alt-accent . "#505588")
-
-    (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")
-
-    (fg-lang-error . "#ef8690")
-    (fg-lang-warning . "#b0aa00")
-    (fg-lang-note . "#9d9def")
-    (fg-lang-underline-error . "#ff4a6f")
-    (fg-lang-underline-warning . "#d0de00")
-    (fg-lang-underline-note . "#5f6fff")
-
-    (fg-window-divider-inner . "#646464")
-    (fg-window-divider-outer . "#969696")
-
-    (fg-unfocused . "#93959b")
-
-    (fg-docstring . "#b0d6f5")
-    (fg-comment-yellow . "#d0a070")
-
-    (bg-header . "#212121") (fg-header . "#dddddd")
-
-    (bg-whitespace . "#101424") (fg-whitespace . "#aa9e9f")
-
-    (bg-diff-heading . "#304466") (fg-diff-heading . "#dae7ff")
-    (bg-diff-added . "#0a280a") (fg-diff-added . "#94ba94")
-    (bg-diff-added-deuteran . "#001a3f") (fg-diff-added-deuteran . "#c4cdf2")
-    (bg-diff-changed . "#2a2000") (fg-diff-changed . "#b0ba9f")
-    (bg-diff-removed . "#40160f") (fg-diff-removed . "#c6adaa")
-
-    (bg-diff-refine-added . "#005a36") (fg-diff-refine-added . "#e0f6e0")
-    (bg-diff-refine-added-deuteran . "#234f8f") (fg-diff-refine-added-deuteran 
. "#dde4ff")
-    (bg-diff-refine-changed . "#585800") (fg-diff-refine-changed . "#ffffcc")
-    (bg-diff-refine-removed . "#852828") (fg-diff-refine-removed . "#ffd9eb")
-
-    (bg-diff-focus-added . "#1d3c25") (fg-diff-focus-added . "#b4ddb4")
-    (bg-diff-focus-added-deuteran . "#003959") (fg-diff-focus-added-deuteran . 
"#bfe4ff")
-    (bg-diff-focus-changed . "#424200") (fg-diff-focus-changed . "#d0daaf")
-    (bg-diff-focus-removed . "#601f29") (fg-diff-focus-removed . "#eebdba")
-
-    (bg-mark-sel . "#002f2f") (fg-mark-sel . "#60cfa2")
-    (bg-mark-del . "#5a0000") (fg-mark-del . "#ff99aa")
-    (bg-mark-alt . "#3f2210") (fg-mark-alt . "#f0aa20"))
-  "The entire palette of the `modus-vivendi' theme.
-Each element has the form (NAME . HEX) with the former as a
-symbol and the latter as a string.")
+(make-obsolete-variable 'modus-themes-operandi-colors nil "4.0.0")
+(make-obsolete-variable 'modus-themes-vivendi-colors nil "4.0.0")
+(make-obsolete-variable 'modus-themes-version nil "4.0.0")
+(make-obsolete 'modus-themes-report-bug nil "4.0.0")
 
 
 
-;;; Custom faces
+;;;; Custom faces
 
 ;; These faces are used internally to ensure consistency between various
 ;; groups and to streamline the evaluation of relevant customization
 ;; options.
-(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'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-subtle-green nil
-  "Subtle green background combined with a dimmed foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-subtle-yellow nil
-  "Subtle yellow background combined with a dimmed foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-subtle-blue nil
-  "Subtle blue background combined with a dimmed foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-subtle-magenta nil
-  "Subtle magenta background combined with a dimmed foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-subtle-cyan nil
-  "Subtle cyan background combined with a dimmed foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-subtle-neutral nil
-  "Subtle gray background combined with a dimmed foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-intense-red nil
-  "Intense red background combined with the main foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-intense-green nil
-  "Intense green background combined with the main foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-intense-yellow nil
-  "Intense yellow background combined with the main foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-intense-blue nil
-  "Intense blue background combined with the main foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-intense-magenta nil
-  "Intense magenta background combined with the main foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-intense-cyan nil
-  "Intense cyan background combined with the main foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-intense-neutral nil
-  "Intense gray background combined with the main foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-refine-red nil
-  "Combination of accented red background and foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-refine-green nil
-  "Combination of accented green background and foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-refine-yellow nil
-  "Combination of accented yellow background and foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-refine-blue nil
-  "Combination of accented blue background and foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-refine-magenta nil
-  "Combination of accented magenta background and foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-refine-cyan nil
-  "Combination of accented cyan background and foreground.
-This is used for general purpose highlighting, mostly in buffers
-or for completion interfaces.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-active-red nil
-  "A red background meant for use on the mode line or similar.
-This is combined with the mode lines primary foreground value.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-active-green nil
-  "A green background meant for use on the mode line or similar.
-This is combined with the mode lines primary foreground value.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-active-yellow nil
-  "A yellow background meant for use on the mode line or similar.
-This is combined with the mode lines primary foreground value.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-active-blue nil
-  "A blue background meant for use on the mode line or similar.
-This is combined with the mode lines primary foreground value.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-active-magenta nil
-  "A magenta background meant for use on the mode line or similar.
-This is combined with the mode lines primary foreground value.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-active-cyan nil
-  "A cyan background meant for use on the mode line or similar.
-This is combined with the mode lines primary foreground value.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-fringe-red nil
-  "A red background meant for use on the fringe or similar.
-This is combined with the main foreground value.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-fringe-green nil
-  "A green background meant for use on the fringe or similar.
-This is combined with the main foreground value.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-fringe-yellow nil
-  "A yellow background meant for use on the fringe or similar.
-This is combined with the main foreground value.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-fringe-blue nil
-  "A blue background meant for use on the fringe or similar.
-This is combined with the main foreground value.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-fringe-magenta nil
-  "A magenta background meant for use on the fringe or similar.
-This is combined with the main foreground value.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-fringe-cyan nil
-  "A cyan background meant for use on the fringe or similar.
-This is combined with the main foreground value.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(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 other surface that needs to retain the colors
-on display.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(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 other surface that needs to retain the colors
-on display.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(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 other surface that needs to retain the colors
-on display.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(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 other surface that needs to retain the colors
-on display.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(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 other surface that needs to retain the colors
-on display.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(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 other surface that needs to retain the colors
-on display.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(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 appropriate.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(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 appropriate.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(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 appropriate.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(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 appropriate.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-diff-added nil
-  "Combines green colors for the added state in diffs.
-The applied colors are contingent on the value assigned to
-`modus-themes-diffs'.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-diff-changed nil
-  "Combines yellow colors for the changed state in diffs.
-The applied colors are contingent on the value assigned to
-`modus-themes-diffs'.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-diff-removed nil
-  "Combines red colors for the removed state in diffs.
-The applied colors are contingent on the value assigned to
-`modus-themes-diffs'.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-diff-refine-added nil
-  "Combines green colors for word-wise added state in diffs.
-The applied colors are contingent on the value assigned to
-`modus-themes-diffs'.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-diff-refine-changed nil
-  "Combines yellow colors for word-wise changed state in diffs.
-The applied colors are contingent on the value assigned to
-`modus-themes-diffs'.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-diff-refine-removed nil
-  "Combines red colors for word-wise removed state in diffs.
-The applied colors are contingent on the value assigned to
-`modus-themes-diffs'.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-diff-focus-added nil
-  "Combines green colors for the focused added state in diffs.
-The applied colors are contingent on the value assigned to
-`modus-themes-diffs'.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-diff-focus-changed nil
-  "Combines yellow colors for the focused 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'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-diff-focus-removed nil
-  "Combines red colors for the focused removed state in diffs.
-The applied colors are contingent on the value assigned to
-`modus-themes-diffs'.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-diff-heading nil
-  "Combines blue colors for the diff hunk heading.
-The applied colors are contingent on the value assigned to
-`modus-themes-diffs'.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-pseudo-header nil
-  "Generic style for some elements that function like headings.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
 
-(defface modus-themes-mark-alt nil
-  "Combines yellow colors for marking special lines.
-This is intended for use in modes such as Dired, Ibuffer, Proced.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-mark-del nil
-  "Combines red colors for marking deletable lines.
-This is intended for use in modes such as Dired, Ibuffer, Proced.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-mark-sel nil
-  "Combines green colors for marking lines.
-This is intended for use in modes such as Dired, Ibuffer, Proced.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-mark-symbol nil
-  "Applies a blue color and other styles for mark indicators.
-This is intended for use in modes such as Dired, Ibuffer, Proced.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-heading-0 nil
-  "General purpose face for use as the document's title.
-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'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-heading-1 nil
-  "General purpose face for use in headings level 1.
-The exact attributes assigned to this face are contingent on the
-values assigned to the `modus-themes-headings' variable.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-heading-2 nil
-  "General purpose face for use in headings level 2.
-The exact attributes assigned to this face are contingent on the
-values assigned to the `modus-themes-headings' variable.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-heading-3 nil
-  "General purpose face for use in headings level 3.
-The exact attributes assigned to this face are contingent on the
-values assigned to the `modus-themes-headings' variable.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-heading-4 nil
-  "General purpose face for use in headings level 4.
-The exact attributes assigned to this face are contingent on the
-values assigned to the `modus-themes-headings' variable.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-heading-5 nil
-  "General purpose face for use in headings level 5.
-The exact attributes assigned to this face are contingent on the
-values assigned to the `modus-themes-headings' variable.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-heading-6 nil
-  "General purpose face for use in headings level 6.
-The exact attributes assigned to this face are contingent on the
-values assigned to the `modus-themes-headings' variable.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-heading-7 nil
-  "General purpose face for use in headings level 7.
-The exact attributes assigned to this face are contingent on the
-values assigned to the `modus-themes-headings' variable.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-heading-8 nil
-  "General purpose face for use in headings level 8.
-The exact attributes assigned to this face are contingent on the
-values assigned to the `modus-themes-headings' variable.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-hl-line nil
-  "General purpose face for the current line.
-The exact attributes assigned to this face are contingent on the
-values assigned to the `modus-themes-hl-line' variable.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
+(dolist (color '( red green blue yellow magenta cyan
+                  red-warmer green-warmer blue-warmer yellow-warmer 
magenta-warmer cyan-warmer
+                  red-cooler green-cooler blue-cooler yellow-cooler 
magenta-cooler cyan-cooler
+                  red-faint green-faint blue-faint yellow-faint magenta-faint 
cyan-faint
+                  red-intense green-intense blue-intense yellow-intense 
magenta-intense cyan-intense))
+  (custom-declare-face
+   (intern (format "modus-themes-fg-%s" color))
+   nil (format "Face with %s foreground." color)
+   :package-version '(modus-themes . "4.0.0")
+   :version "30.1"
+   :group 'modus-themes-faces))
+
+(dolist (color '(red green yellow blue magenta cyan))
+  (custom-declare-face
+   (intern (format "modus-themes-subtle-%s" color))
+   nil (format "Subtle %s background." color)
+   :package-version '(modus-themes . "4.0.0")
+   :version "30.1"
+   :group 'modus-themes-faces))
+
+(dolist (color '(red green yellow blue magenta cyan))
+  (custom-declare-face
+   (intern (format "modus-themes-intense-%s" color))
+   nil (format "Intense %s background." color)
+   :package-version '(modus-themes . "4.0.0")
+   :version "30.1"
+   :group 'modus-themes-faces))
+
+(dolist (scope '(alt del sel))
+  (custom-declare-face
+   (intern (format "modus-themes-mark-%s" scope))
+   nil (format "Mark of type %s." scope)
+   :package-version '(modus-themes . "4.0.0")
+   :version "30.1"
+   :group 'modus-themes-faces))
+
+(dolist (scope '(note warning error))
+  (custom-declare-face
+   (intern (format "modus-themes-lang-%s" scope))
+   nil (format "Linter or spell check of type %s." scope)
+   :package-version '(modus-themes . "4.0.0")
+   :version "30.1"
+   :group 'modus-themes-faces))
+
+(dolist (scope '(current lazy))
+  (custom-declare-face
+   (intern (format "modus-themes-search-%s" scope))
+   nil (format "Search of type %s." scope)
+   :package-version '(modus-themes . "4.0.0")
+   :version "30.1"
+   :group 'modus-themes-faces))
+
+(define-obsolete-variable-alias
+  'modus-themes-search-success
+  'modus-themes-search-current
+  "4.0.0")
+
+(define-obsolete-variable-alias
+  'modus-themes-search-success-lazy
+  'modus-themes-search-lazy
+  "4.0.0")
+
+(dolist (scope '(code macro verbatim))
+  (custom-declare-face
+   (intern (format "modus-themes-prose-%s" scope))
+   nil (format "Construct of type %s for prose." scope)
+   :package-version '(modus-themes . "4.0.0")
+   :version "30.1"
+   :group 'modus-themes-faces))
+
+(define-obsolete-variable-alias
+  'modus-themes-markup-code
+  'modus-themes-prose-code
+  "4.0.0")
+
+(define-obsolete-variable-alias
+  'modus-themes-markup-macro
+  'modus-themes-prose-macro
+  "4.0.0")
+
+(define-obsolete-variable-alias
+  'modus-themes-markup-verbatim
+  'modus-themes-prose-verbatim
+  "4.0.0")
+
+(dotimes (n 9)
+  (custom-declare-face
+   (intern (format "modus-themes-heading-%d" n))
+   nil (format "Level %d heading." n)
+   :package-version '(modus-themes . "4.0.0")
+   :version "30.1"
+   :group 'modus-themes-faces))
 
 (defface modus-themes-bold nil
   "Generic face for applying a conditional bold weight.
-This behaves in accordance with `modus-themes-bold-constructs'.
-
-The actual styling of the face is done by `modus-themes-faces'."
+This behaves in accordance with `modus-themes-bold-constructs'."
+  :package-version '(modus-themes . "4.0.0")
+  :version "30.1"
   :group 'modus-themes-faces)
 
 (defface modus-themes-slant nil
   "Generic face for applying a conditional slant (italics).
-This behaves in accordance with `modus-themes-italic-constructs'.
-
-The actual styling of the face is done by `modus-themes-faces'."
+This behaves in accordance with `modus-themes-italic-constructs'."
+  :package-version '(modus-themes . "4.0.0")
+  :version "30.1"
   :group 'modus-themes-faces)
 
-(defface modus-themes-variable-pitch nil
-  "Generic face for applying a conditional `variable-pitch'.
-This behaves in accordance with `modus-themes-mixed-fonts' and/or
-`modus-themes-variable-pitch-ui'.
-
-The actual styling of the face is done by `modus-themes-faces'."
+(defface modus-themes-key-binding nil
+  "Face for key bindings."
+  :package-version '(modus-themes . "4.0.0")
+  :version "30.1"
   :group 'modus-themes-faces)
 
 (defface modus-themes-fixed-pitch nil
-  "Generic face for applying a conditional `fixed-pitch'.
-This behaves in accordance with `modus-themes-mixed-fonts'.
-
-The actual styling of the face is done by `modus-themes-faces'."
+  "Face for `fixed-pitch' if `modus-themes-mixed-fonts' is non-nil."
+  :package-version '(modus-themes . "4.0.0")
+  :version "30.1"
   :group 'modus-themes-faces)
 
 (defface modus-themes-ui-variable-pitch nil
-  "Face for `modus-themes-variable-pitch-ui'.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-lang-note nil
-  "Generic face for linter or spell checker notes.
-The exact attributes and color combinations are controlled by
-`modus-themes-lang-checkers'.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-lang-warning nil
-  "Generic face for linter or spell checker warnings.
-The exact attributes and color combinations are controlled by
-`modus-themes-lang-checkers'.
-
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-lang-error nil
-  "Generic face for linter or spell checker errors.
-The exact attributes and color combinations are controlled by
-`modus-themes-lang-checkers'.
-
-The actual styling of the face is done by `modus-themes-faces'."
+  "Face for `variable-pitch' if `modus-themes-variable-pitch-ui' is non-nil."
+  :package-version '(modus-themes . "4.0.0")
+  :version "30.1"
   :group 'modus-themes-faces)
 
 (defface modus-themes-reset-soft nil
@@ -1243,231 +206,178 @@ The actual styling of the face is done by 
`modus-themes-faces'."
 
 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'."
-  :group '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'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-key-binding nil
-  "Generic face for key bindings.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-search-success nil
-  "Generic face for successful search.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-search-success-modeline nil
-  "Generic mode line indicator for successful search.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-search-success-lazy nil
-  "Generic face for successful, lazily highlighted search.
-The actual styling of the face is done by `modus-themes-faces'."
+text should not be underlined as well) yet still blend in."
   :group 'modus-themes-faces)
 
 (defface modus-themes-prompt nil
-  "Generic face for command prompts.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-;; "Grue" is "green" and "blue".
-(defface modus-themes-grue nil
-  "Generic face for `modus-themes-deuteranopia' foreground.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-grue-active nil
-  "Face for `modus-themes-deuteranopia' active foreground.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-grue-nuanced nil
-  "Face for `modus-themes-deuteranopia' nuanced foreground.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-grue-background-active nil
-  "Face for `modus-themes-deuteranopia' active background.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-grue-background-intense nil
-  "Face for `modus-themes-deuteranopia' intense background.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-grue-background-subtle nil
-  "Face for `modus-themes-deuteranopia' subtle background.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-grue-background-refine nil
-  "Face for `modus-themes-deuteranopia' refined background.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-link-symlink nil
-  "Face for `modus-themes-links' symbolic link.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-link-broken nil
-  "Face for `modus-themes-links' broken link.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-tab-backdrop nil
-  "Face of backdrop in tabbed interfaces.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-tab-active nil
-  "Face of active tab.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-tab-inactive nil
-  "Face of inactive tab.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-markup-code nil
-  "Face of inline code markup.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-markup-macro nil
-  "Face of macro markup.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-markup-verbatim nil
-  "Face of verbatim markup.
-The actual styling of the face is done by `modus-themes-faces'."
+  "Generic face for command prompts."
   :group 'modus-themes-faces)
 
 (defface modus-themes-completion-selected nil
-  "Face for current selection in completion UIs.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-completion-selected-popup nil
-  "Face for current selection in completion UI popups.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-completion-match-0 nil
-  "Face for completions matches 0.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-completion-match-1 nil
-  "Face for completions matches 1.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-completion-match-2 nil
-  "Face for completions matches 2.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-completion-match-3 nil
-  "Face for completions matches 3.
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-box-button nil
-  "Face for widget buttons (e.g. in the Custom UI).
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
-
-(defface modus-themes-box-button-pressed nil
-  "Face for pressed widget buttons (e.g. in the Custom UI).
-The actual styling of the face is done by `modus-themes-faces'."
-  :group 'modus-themes-faces)
+  "Face for current selection in completion UIs."
+  :group 'modus-themes-faces)
+
+(defface modus-themes-button nil
+  "Face for graphical buttons."
+  :group 'modus-themes-faces)
+
+(dotimes (n 4)
+  (custom-declare-face
+   (intern (format "modus-themes-completion-match-%d" n))
+   nil (format "Completions match level %d." n)
+   :package-version '(modus-themes . "4.0.0")
+   :version "30.1"
+   :group 'modus-themes-faces))
+
+(make-obsolete-variable 'modus-themes-reset-hard nil "4.0.0")
+(make-obsolete-variable 'modus-themes-subtle-neutral nil "4.0.0")
+(make-obsolete-variable 'modus-themes-intense-neutral nil "4.0.0")
+(make-obsolete-variable 'modus-themes-refine-red nil "4.0.0")
+(make-obsolete-variable 'modus-themes-refine-green nil "4.0.0")
+(make-obsolete-variable 'modus-themes-refine-yellow nil "4.0.0")
+(make-obsolete-variable 'modus-themes-refine-blue nil "4.0.0")
+(make-obsolete-variable 'modus-themes-refine-magenta nil "4.0.0")
+(make-obsolete-variable 'modus-themes-refine-cyan nil "4.0.0")
+(make-obsolete-variable 'modus-themes-active-red nil "4.0.0")
+(make-obsolete-variable 'modus-themes-active-green nil "4.0.0")
+(make-obsolete-variable 'modus-themes-active-yellow nil "4.0.0")
+(make-obsolete-variable 'modus-themes-active-blue nil "4.0.0")
+(make-obsolete-variable 'modus-themes-active-magenta nil "4.0.0")
+(make-obsolete-variable 'modus-themes-active-cyan nil "4.0.0")
+(make-obsolete-variable 'modus-themes-fringe-red nil "4.0.0")
+(make-obsolete-variable 'modus-themes-fringe-green nil "4.0.0")
+(make-obsolete-variable 'modus-themes-fringe-yellow nil "4.0.0")
+(make-obsolete-variable 'modus-themes-fringe-blue nil "4.0.0")
+(make-obsolete-variable 'modus-themes-fringe-magenta nil "4.0.0")
+(make-obsolete-variable 'modus-themes-fringe-cyan nil "4.0.0")
+(make-obsolete-variable 'modus-themes-grue nil "4.0.0")
+(make-obsolete-variable 'modus-themes-grue-nuanced nil "4.0.0")
+(make-obsolete-variable 'modus-themes-red-nuanced nil "4.0.0")
+(make-obsolete-variable 'modus-themes-green-nuanced nil "4.0.0")
+(make-obsolete-variable 'modus-themes-yellow-nuanced nil "4.0.0")
+(make-obsolete-variable 'modus-themes-blue-nuanced nil "4.0.0")
+(make-obsolete-variable 'modus-themes-magenta-nuanced nil "4.0.0")
+(make-obsolete-variable 'modus-themes-cyan-nuanced nil "4.0.0")
+(make-obsolete-variable 'modus-themes-special-calm nil "4.0.0")
+(make-obsolete-variable 'modus-themes-special-cold nil "4.0.0")
+(make-obsolete-variable 'modus-themes-special-mild nil "4.0.0")
+(make-obsolete-variable 'modus-themes-special-warm nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-added nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-changed nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-removed nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-refine-added nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-refine-changed nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-refine-removed nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-focus-added nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-focus-changed nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-focus-removed nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-heading nil "4.0.0")
+(make-obsolete-variable 'modus-themes-pseudo-header nil "4.0.0")
+(make-obsolete-variable 'modus-themes-mark-symbol nil "4.0.0")
+(make-obsolete-variable 'modus-themes-hl-line nil "4.0.0")
+(make-obsolete-variable 'modus-themes-search-success-modeline nil "4.0.0")
+(make-obsolete-variable 'modus-themes-grue-active nil "4.0.0")
+(make-obsolete-variable 'modus-themes-grue-background-active nil "4.0.0")
+(make-obsolete-variable 'modus-themes-grue-background-intense nil "4.0.0")
+(make-obsolete-variable 'modus-themes-grue-background-subtle nil "4.0.0")
+(make-obsolete-variable 'modus-themes-grue-background-refine nil "4.0.0")
+(make-obsolete-variable 'modus-themes-link-broken nil "4.0.0")
+(make-obsolete-variable 'modus-themes-link-symlink nil "4.0.0")
+(make-obsolete-variable 'modus-themes-tab-backdrop nil "4.0.0")
+(make-obsolete-variable 'modus-themes-tab-active nil "4.0.0")
+(make-obsolete-variable 'modus-themes-tab-inactive nil "4.0.0")
+(make-obsolete-variable 'modus-themes-completion-selected-popup nil "4.0.0")
+(make-obsolete-variable 'modus-themes-box-button nil "4.0.0")
+(make-obsolete-variable 'modus-themes-box-button-pressed nil "4.0.0")
 
 
 
-;;; Customization variables
+;;;; Customization variables
+
+(defcustom modus-themes-custom-auto-reload t
+  "Automatically reload theme after setting options with Customize.
 
-(defcustom modus-themes-inhibit-reload t
-  "Control theme reload when setting options with Customize.
+All theme user options take effect when a theme is loaded.  Any
+subsequent changes require the theme to be reloaded.
 
-By default, customizing a theme-related user option through the
-Custom interfaces or with `customize-set-variable' will not
-reload the currently active Modus theme.
+When this variable has a non-nil value, any change made via the
+Custom UI or related functions such as `customize-set-variable'
+and `setopt' (Emacs 29), will trigger a reload automatically.
 
-Enable this behavior by setting this variable to nil."
+With a nil value, changes to user options have no further
+consequences.  The user must manually reload the theme."
   :group 'modus-themes
-  :package-version '(modus-themes . "1.5.0")
-  :version "28.1"
+  :package-version '(modus-themes . "4.0.0")
+  :version "30.1"
   :type 'boolean
   :link '(info-link "(modus-themes) Custom reload theme"))
 
+(make-obsolete-variable 'modus-themes-inhibit-reload 
'modus-themes-custom-auto-reload "4.0.0")
+
 (defun modus-themes--set-option (sym val)
   "Custom setter for theme related user options.
 Will set SYM to VAL, and reload the current theme, unless
-`modus-themes-inhibit-reload' is non-nil."
+`modus-themes-custom-auto-reload' is nil."
   (set-default sym val)
-  (unless (or modus-themes-inhibit-reload
-              ;; Check if a theme is being loaded, in which case we
-              ;; don't want to reload a theme if the setter is
-              ;; invoked. `custom--inhibit-theme-enable' is set to nil
-              ;; by `enable-theme'.
-              (null (bound-and-true-p custom--inhibit-theme-enable)))
-    (let ((modus-themes-inhibit-reload t))
-      (pcase (modus-themes--current-theme)
-        ('modus-operandi (modus-themes-load-operandi))
-        ('modus-vivendi (modus-themes-load-vivendi))))))
-
-(defcustom modus-themes-operandi-color-overrides nil
-  "Override colors in the Modus Operandi palette.
-
-For form, see `modus-themes-operandi-colors'."
-  :group 'modus-themes
-  :package-version '(modus-themes . "1.1.0")
-  :version "28.1"
-  :type '(alist :key-type symbol :value-type color)
+  (when (and modus-themes-custom-auto-reload
+             ;; Check if a theme is being loaded, in which case we
+             ;; don't want to reload a theme if the setter is
+             ;; invoked. `custom--inhibit-theme-enable' is set to nil
+             ;; by `enable-theme'.
+             (bound-and-true-p custom--inhibit-theme-enable))
+    (when-let* ((modus-themes-custom-auto-reload t)
+                (theme (modus-themes--current-theme)))
+      (modus-themes-load-theme theme))))
+
+(defconst modus-themes-items
+  '( modus-operandi modus-vivendi
+     modus-operandi-tinted modus-vivendi-tinted
+     modus-operandi-deuteranopia modus-vivendi-deuteranopia)
+  "Symbols of the Modus themes.")
+
+(defcustom modus-themes-to-toggle '(modus-operandi modus-vivendi)
+  "Specify two Modus themes for `modus-themes-toggle' command.
+The variable `modus-themes-items' contains the symbols of all
+official themes that form part of this collection.
+
+The default value of this user option includes the original
+themes: `modus-operandi' (light) and `modus-vivendi' (dark).
+
+If the value is nil or otherwise does not specify two valid Modus
+themes, the command `modus-themes-toggle' reverts to selecting a
+theme from the list of available Modus themes.  In effect, it is
+the same as using the command `modus-themes-select'."
+  :type `(choice
+          (const :tag "No toggle" nil)
+          (list :tag "Pick two themes to toggle between"
+                (choice :tag "Theme one of two"
+                        ,@(mapcar (lambda (theme)
+                                    (list 'const theme))
+                                  modus-themes-items))
+                (choice :tag "Theme two of two"
+                        ,@(mapcar (lambda (theme)
+                                    (list 'const theme))
+                                  modus-themes-items))))
+  :package-version '(modus-themes . "4.0.0")
+  :version "30.1"
   :set #'modus-themes--set-option
   :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Override colors"))
+  :group 'modus-themes)
 
-(defcustom modus-themes-vivendi-color-overrides nil
-  "Override colors in the Modus Vivendi palette.
+(defvaralias 'modus-themes-post-load-hook 'modus-themes-after-load-theme-hook)
 
-For form, see `modus-themes-vivendi-colors'."
-  :group 'modus-themes
-  :package-version '(modus-themes . "1.1.0")
-  :version "28.1"
-  :type '(alist :key-type symbol :value-type color)
+(defcustom modus-themes-after-load-theme-hook nil
+  "Hook that runs after loading a Modus theme.
+This is used by the command `modus-themes-toggle'."
+  :type 'hook
+  :package-version '(modus-themes . "4.0.0")
+  :version "30.1"
   :set #'modus-themes--set-option
   :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Override colors"))
-
-;; The byte compiler complains when a defcustom isn't a top level form
-(let* ((names (mapcar (lambda (pair)
-                        (symbol-name (car pair)))
-                      modus-themes-operandi-colors))
-       (colors (mapcar #'intern (sort names #'string<))))
-  (put 'modus-themes-operandi-color-overrides
-       'custom-options (copy-sequence colors))
-  (put 'modus-themes-vivendi-color-overrides
-       'custom-options (copy-sequence colors)))
+  :group 'modus-themes)
+
+(make-obsolete-variable 'modus-themes-operandi-color-overrides nil "4.0.0")
+(make-obsolete-variable 'modus-themes-vivendi-color-overrides nil "4.0.0")
 
 (defvaralias 'modus-themes-slanted-constructs 'modus-themes-italic-constructs)
 
@@ -1510,7 +420,9 @@ tables and code blocks, to remain monospaced when users 
opt for
 something like the command `variable-pitch-mode'.
 
 Users may need to explicitly configure the font family of
-`fixed-pitch' in order to get a consistent experience."
+`fixed-pitch' in order to get a consistent experience with their
+typography (also check the `fontaine' package on GNU ELPA (by
+Protesilaos))."
   :group 'modus-themes
   :package-version '(modus-themes . "1.7.0")
   :version "29.1"
@@ -1519,68 +431,60 @@ Users may need to explicitly configure the font family of
   :initialize #'custom-initialize-default
   :link '(info-link "(modus-themes) Mixed fonts"))
 
-(defcustom modus-themes-intense-mouseovers nil
-  "When non-nil use more intense style for mouse hover effects.
-
-This affects the generic `highlight' face which, strictly
-speaking, is not limited to mouse usage."
-  :group 'modus-themes
-  :package-version '(modus-themes . "2.3.0")
-  :version "29.1"
-  :type 'boolean
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Mouse hover effects"))
-
-(defconst modus-themes--headings-choice
-  '(set :tag "Properties" :greedy t
-        (const :tag "Background color" background)
+(make-obsolete-variable 'modus-themes-intense-mouseovers nil "4.0.0")
+
+(defconst modus-themes--weight-widget
+  '(choice :tag "Font weight (must be supported by the typeface)"
+           (const :tag "Unspecified (use whatever the default is)" nil)
+           (const :tag "Thin" thin)
+           (const :tag "Ultra-light" ultralight)
+           (const :tag "Extra-light" extralight)
+           (const :tag "Light" light)
+           (const :tag "Semi-light" semilight)
+           (const :tag "Regular" regular)
+           (const :tag "Medium" medium)
+           (const :tag "Semi-bold" semibold)
+           (const :tag "Bold" bold)
+           (const :tag "Extra-bold" extrabold)
+           (const :tag "Ultra-bold" ultrabold))
+  "List of supported font weights used by `defcustom' forms.")
+
+(defconst modus-themes--headings-widget
+  `(set :tag "Properties" :greedy t
         (const :tag "Proportionately spaced font (variable-pitch)" 
variable-pitch)
-        (const :tag "Overline" overline)
-        (choice :tag "Font weight (must be supported by the typeface)"
-                (const :tag "Bold (default)" nil)
-                (const :tag "Thin" thin)
-                (const :tag "Ultra-light" ultralight)
-                (const :tag "Extra-light" extralight)
-                (const :tag "Light" light)
-                (const :tag "Semi-light" semilight)
-                (const :tag "Regular" regular)
-                (const :tag "Medium" medium)
-                (const :tag "Semi-bold" semibold)
-                (const :tag "Extra-bold" extrabold)
-                (const :tag "Ultra-bold" ultrabold))
+        ,modus-themes--weight-widget
         (radio :tag "Height"
                (float :tag "Floating point to adjust height by")
                (cons :tag "Cons cell of `(height . FLOAT)'"
                      (const :tag "The `height' key (constant)" height)
-                     (float :tag "Floating point")))
-        (choice :tag "Colors"
-                (const :tag "Subtle colors" nil)
-                (const :tag "Rainbow colors" rainbow)
-                (const :tag "Monochrome" monochrome)))
+                     (float :tag "Floating point"))))
   "Refer to the doc string of `modus-themes-headings'.
 This is a helper variable intended for internal use.")
 
 (defcustom modus-themes-headings nil
-  "Heading styles with optional list of values for levels 0-8.
+  "Heading styles with optional list of values per heading level.
 
-This is an alist that accepts a (key . list-of-values)
-combination.  The key is either a number, representing the
+This is an alist that accepts a (KEY . LIST-OF-VALUES)
+combination.  The KEY is either a number, representing the
 heading's level (0-8) or t, which pertains to the fallback style.
+The named keys `agenda-date' and `agenda-structure' apply to the
+Org agenda.
 
-Level 0 is a special heading: it is used for what counts as a
-document title or equivalent, such as the #+title construct we
-find in Org files.  Levels 1-8 are regular headings.
+Level 0 is used for what counts as a document title or
+equivalent, such as the #+title construct we find in Org files.
+Levels 1-8 are regular headings.
 
-The list of values covers symbols that refer to properties, as
-described below.  Here is a complete sample, followed by a
-presentation of all available properties:
+The LIST-OF-VALUES covers symbols that refer to properties, as
+described below.  Here is a complete sample with various
+stylistic combinations, followed by a presentation of all
+available properties:
 
     (setq modus-themes-headings
-          (quote ((1 . (background overline variable-pitch 1.5))
-                  (2 . (overline rainbow 1.3))
-                  (3 . (overline 1.1))
-                  (t . (monochrome)))))
+          (quote ((1 . (variable-pitch 1.5))
+                  (2 . (1.3))
+                  (agenda-date . (1.3))
+                  (agenda-structure . (variable-pitch light 1.8))
+                  (t . (1.1)))))
 
 By default (a nil value for this variable), all headings have a
 bold typographic weight, use a desaturated text color, have a
@@ -1588,20 +492,6 @@ font family that is the same as the `default' face 
(typically
 monospaced), and a height that is equal to the `default' face's
 height.
 
-A `rainbow' property makes the text color more saturated.
-
-An `overline' property draws a line above the area of the
-heading.
-
-A `background' property applies a subtle tinted color to the
-background of the heading.
-
-A `monochrome' property makes the heading the same as the base
-color, which is that of the `default' face's foreground.  When
-`background' is also set, `monochrome' changes its color to gray.
-If both `monochrome' and `rainbow' are set, the former takes
-precedence.
-
 A `variable-pitch' property changes the font family of the
 heading to that of the `variable-pitch' face (normally a
 proportionately spaced typeface).
@@ -1610,386 +500,74 @@ The symbol of a weight attribute adjusts the font of 
the heading
 accordingly, such as `light', `semibold', etc.  Valid symbols are
 defined in the variable `modus-themes-weights'.  The absence of a
 weight means that bold will be used by virtue of inheriting the
-`bold' face (check the manual for tweaking bold and italic
-faces).  For backward compatibility, the `no-bold' value is
-accepted, though users are encouraged to specify a `regular'
-weight instead.
-
-A number, expressed as a floating point (e.g. 1.5), adjusts the
-height of the heading to that many times the base font size.  The
-default height is the same as 1.0, though it need not be
-explicitly stated.  Instead of a floating point, an acceptable
-value can be in the form of a cons cell like (height . FLOAT)
-or (height FLOAT), where FLOAT is the given number.
-
-Combinations of any of those properties are expressed as a list,
-like in these examples:
-
-    (semibold)
-    (rainbow background)
-    (overline monochrome semibold 1.3)
-    (overline monochrome semibold (height 1.3)) ; same as above
-    (overline monochrome semibold (height . 1.3)) ; same as above
-
-The order in which the properties are set is not significant.
-
-In user configuration files the form may look like this:
-
-    (setq modus-themes-headings
-          (quote ((1 . (background overline rainbow 1.5))
-                  (2 . (background overline 1.3))
-                  (t . (overline semibold)))))
-
-When defining the styles per heading level, it is possible to
-pass a non-nil value (t) instead of a list of properties.  This
-will retain the original aesthetic for that level.  For example:
-
-    (setq modus-themes-headings
-          (quote ((1 . t)           ; keep the default style
-                  (2 . (background overline))
-                  (t . (rainbow))))) ; style for all other headings
-
-    (setq modus-themes-headings
-          (quote ((1 . (background overline))
-                  (2 . (rainbow semibold))
-                  (t . t)))) ; default style for all other levels
-
-For Org users, the extent of the heading depends on the variable
-`org-fontify-whole-heading-line'.  This affects the `overline'
-and `background' properties.  Depending on the version of Org,
-there may be others, such as `org-fontify-done-headline'."
-  :group 'modus-themes
-  :package-version '(modus-themes . "2.5.0")
-  :version "29.1"
-  :type `(alist
-          :options ,(mapcar (lambda (el)
-                              (list el modus-themes--headings-choice))
-                            '(0 1 2 3 4 5 6 7 8 t))
-          :key-type symbol
-          :value-type ,modus-themes--headings-choice)
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Heading styles"))
-
-(defcustom modus-themes-org-agenda nil
-  "Control the style of individual Org agenda constructs.
-
-This is an alist that accepts a (key . value) combination.  Here
-is a sample, followed by a description of all possible
-combinations:
-
-    (setq modus-themes-org-agenda
-          (quote ((header-block . (variable-pitch 1.5 semibold))
-                  (header-date . (grayscale workaholic bold-today 1.2))
-                  (event . (accented italic varied))
-                  (scheduled . uniform)
-                  (habit . traffic-light))))
-
-A `header-block' key applies to elements that concern the
-headings which demarcate blocks in the structure of the agenda.
-By default (a nil value) those are rendered in a bold typographic
-weight, plus a height that is slightly taller than the default
-font size.  Acceptable values come in the form of a list that can
-include either or both of those properties:
-
-- `variable-pitch' to use a proportionately spaced typeface;
-
-- A number as a floating point (e.g. 1.5) to set the height of
-  the text to that many times the default font height.  A float
-  of 1.0 or the symbol `no-scale' have the same effect of making
-  the font the same height as the rest of the buffer.  When
-  neither a number nor `no-scale' are present, the default is a
-  small increase in height (a value of 1.15).
-
-  Instead of a floating point, an acceptable value can be in the
-  form of a cons cell like (height . FLOAT) or (height FLOAT),
-  where FLOAT is the given number.
-
-- The symbol of a weight attribute adjusts the font of the
-  heading accordingly, such as `light', `semibold', etc.  Valid
-  symbols are defined in the variable `modus-themes-weights'.
-  The absence of a weight means that bold will be used by virtue
-  of inheriting the `bold' face (check the manual for tweaking
-  bold and italic faces).
-
-In case both a number and `no-scale' are in the list, the latter
-takes precedence.  If two numbers are specified, the first one is
-applied.
-
-Example usage:
-
-    (header-block . nil)
-    (header-block . (1.5))
-    (header-block . (no-scale))
-    (header-block . (variable-pitch 1.5))
-    (header-block . (variable-pitch 1.5 semibold))
-
-A `header-date' key covers date headings.  Dates use only a
-foreground color by default (a nil value), with weekdays and
-weekends having a slight difference in hueness.  The current date
-has an added gray background.  This key accepts a list of values
-that can include any of the following properties:
-
-- `grayscale' to make weekdays use the main foreground color and
-  weekends a more subtle gray;
-
-- `workaholic' to make weekdays and weekends look the same in
-  terms of color;
-
-- `bold-today' to apply a bold typographic weight to the current
-  date;
-
-- `bold-all' to render all date headings in a bold weight;
-
-- `underline-today' applies an underline to the current date
-  while removing the background it has by default;
-
-- A number as a floating point (e.g. 1.2) to set the height of
-  the text to that many times the default font height.  The
-  default is the same as the base font height (the equivalent of
-  1.0).  Instead of a floating point, an acceptable value can be
-  in the form of a cons cell like (height . FLOAT) or (height
-  FLOAT), where FLOAT is the given number.
-
-For example:
-
-    (header-date . nil)
-    (header-date . (workaholic))
-    (header-date . (grayscale bold-all))
-    (header-date . (grayscale workaholic))
-    (header-date . (grayscale workaholic bold-today))
-    (header-date . (grayscale workaholic bold-today 1.2))
-
-An `event' key covers (i) headings with a plain time stamp that
-are shown on the agenda, also known as events, (ii) entries
-imported from the diary, and (iii) other items that derive from a
-symbolic expression or sexp (phases of the moon, holidays, etc.).
-By default all those look the same and have a subtle foreground
-color (the default is a nil value or an empty list).  This key
-accepts a list of properties.  Those are:
-
-- `accented' applies an accent value to the event's foreground,
-  replacing the original gray.  It makes all entries stand out more.
-- `italic' adds a slant to the font's forms (italic or oblique
-  forms, depending on the typeface).
-- `varied' differentiates between events with a plain time stamp
-  and entries that are generated from either the diary or a
-  symbolic expression.  It generally puts more emphasis on
-  events.  When `varied' is combined with `accented', it makes
-  only events use an accent color, while diary/sexp entries
-  retain their original subtle foreground.  When `varied' is used
-  in tandem with `italic', it applies a slant only to diary and
-  sexp entries, not events.  And when `varied' is the sole
-  property passed to the `event' key, it has the same meaning as
-  the list (italic varied).  The combination of `varied',
-  `accented', `italic' covers all of the aforementioned cases.
-
-For example:
-
-    (event . nil)
-    (event . (italic))
-    (event . (accented italic))
-    (event . (accented italic varied))
-
-A `scheduled' key applies to tasks with a scheduled date.  By
-default (a nil value), these use varying shades of yellow to
-denote (i) a past or current date and (ii) a future date.  Valid
-values are symbols:
-
-- nil (default);
-- `uniform' to make all scheduled dates the same color;
-- `rainbow' to use contrasting colors for past, present, future
-  scheduled dates.
-
-For example:
-
-    (scheduled . nil)
-    (scheduled . uniform)
-    (scheduled . rainbow)
-
-A `habit' key applies to the `org-habit' graph.  All possible
-value are passed as a symbol.  Those are:
-
-- The default (nil) is meant to conform with the original
-  aesthetic of `org-habit'.  It employs all four color codes that
-  correspond to the org-habit states---clear, ready, alert, and
-  overdue---while distinguishing between their present and future
-  variants.  This results in a total of eight colors in use: red,
-  yellow, green, blue, in tinted and shaded versions.  They cover
-  the full set of information provided by the `org-habit'
-  consistency graph.
-
-- `simplified' is like the default except that it removes the
-  dichotomy between current and future variants by applying
-  uniform color-coded values.  It applies a total of four colors:
-  red, yellow, green, blue.  They produce a simplified
-  consistency graph that is more legible (or less \"busy\") than
-  the default.  The intent is to shift focus towards the
-  distinction between the four states of a habit task, rather
-  than each state's present/future outlook.
-
-- `traffic-light' further reduces the available colors to red,
-  yellow, and green.  As in `simplified', present and future
-  variants appear uniformly, but differently from it, the CLEAR
-  state is rendered in a green hue, instead of the original blue.
-  This is meant to capture the use-case where a habit task being
-  too early is less important than it being too late.  The
-  difference between READY and CLEAR states is attenuated by
-  painting both of them using shades of green.  This option thus
-  highlights the alert and overdue states.
-
-- When `modus-themes-deuteranopia' is non-nil the exact style of
-  the habit graph adapts to the needs of users with red-green
-  color deficiency by substituting every instance of green with
-  blue or cyan (depending on the specifics).
-
-For example:
-
-    (habit . nil)
-    (habit . simplified)
-    (habit . traffic-light)"
-  :group 'modus-themes
-  :package-version '(modus-themes . "2.3.0")
-  :version "29.1"
-  :type '(set
-          (cons :tag "Block header"
-                (const header-block)
-                (set :tag "Header presentation" :greedy t
-                     (choice :tag "Font style"
-                             (const :tag "Use the original typeface (default)" 
nil)
-                             (const :tag "Use `variable-pitch' font" 
variable-pitch))
-                     (choice :tag "Font weight (must be supported by the 
typeface)"
-                             (const :tag "Bold (default)" nil)
-                             (const :tag "Thin" thin)
-                             (const :tag "Ultra-light" ultralight)
-                             (const :tag "Extra-light" extralight)
-                             (const :tag "Light" light)
-                             (const :tag "Semi-light" semilight)
-                             (const :tag "Regular" regular)
-                             (const :tag "Medium" medium)
-                             (const :tag "Semi-bold" semibold)
-                             (const :tag "Extra-bold" extrabold)
-                             (const :tag "Ultra-bold" ultrabold))
-                     (radio :tag "Scaling"
-                             (const :tag "Slight increase in height (default)" 
nil)
-                             (const :tag "Do not scale" no-scale)
-                             (radio :tag "Number (float) to adjust height by"
-                                    (float :tag "Just the number")
-                                    (cons :tag "Cons cell of `(height . 
FLOAT)'"
-                                          (const :tag "The `height' key 
(constant)" height)
-                                          (float :tag "Floating point"))))))
-          (cons :tag "Date header" :greedy t
-                (const header-date)
-                (set :tag "Header presentation" :greedy t
-                     (const :tag "Use grayscale for date headers" grayscale)
-                     (const :tag "Do not differentiate weekdays from weekends" 
workaholic)
-                     (const :tag "Make today bold" bold-today)
-                     (const :tag "Make all dates bold" bold-all)
-                     (const :tag "Make today underlined; remove the 
background" underline-today)
-                     (radio :tag "Number (float) to adjust height by"
-                                    (float :tag "Just the number")
-                                    (cons :tag "Cons cell of `(height . 
FLOAT)'"
-                                          (const :tag "The `height' key 
(constant)" height)
-                                          (float :tag "Floating point")))))
-          (cons :tag "Event entry" :greedy t
-                (const event)
-                (set :tag "Text presentation" :greedy t
-                     (const :tag "Apply an accent color" accented)
-                     (const :tag "Italic font slant (oblique forms)" italic)
-                     (const :tag "Differentiate events from diary/sexp 
entries" varied)))
-          (cons :tag "Scheduled tasks"
-                (const scheduled)
-                (choice (const :tag "Yellow colors to distinguish current and 
future tasks (default)" nil)
-                        (const :tag "Uniform subtle warm color for all 
scheduled tasks" uniform)
-                        (const :tag "Rainbow-colored scheduled tasks" 
rainbow)))
-          (cons :tag "Habit graph"
-                (const habit)
-                (choice (const :tag "Follow the original design of `org-habit' 
(default)" nil)
-                        (const :tag "Do not distinguish between present and 
future variants" simplified)
-                        (const :tag "Use only red, yellow, green" 
traffic-light))))
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Org agenda"))
-
-(defcustom modus-themes-fringes 'subtle
-  "Control the visibility of fringes.
-
-When the value is nil, do not apply a distinct background color.
-
-With a value of `subtle' use a gray background color that is
-visible yet close to the main background color.
-
-With `intense' use a more pronounced gray background color."
-  :group 'modus-themes
-  :package-version '(modus-themes . "3.0.0")
-  :version "29.1"
-  :type '(choice
-          (const :format "[%v] %t\n" :tag "No visible fringes" nil)
-          (const :format "[%v] %t\n" :tag "Subtle gray background" subtle)
-          (const :format "[%v] %t\n" :tag "Intense gray background" intense))
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Fringes"))
-
-(defcustom modus-themes-lang-checkers nil
-  "Control the style of spelling and code checkers/linters.
-
-The value is a list of properties, each designated by a symbol.
-The default (nil) applies a color-coded underline to the affected
-text, while it leaves the original foreground intact.  If the
-display spec of Emacs has support for it, the underline's style
-is that of a wave, otherwise it is a straight line.
-
-The property `straight-underline' ensures that the underline
-under the affected text is always drawn as a straight line.
+`bold' face (check the manual for tweaking bold and italic
+faces).
 
-The property `text-also' applies the same color of the underline
-to the affected text.
+A number, expressed as a floating point (e.g. 1.5), adjusts the
+height of the heading to that many times the base font size.  The
+default height is the same as 1.0, though it need not be
+explicitly stated.  Instead of a floating point, an acceptable
+value can be in the form of a cons cell like (height . FLOAT)
+or (height FLOAT), where FLOAT is the given number.
 
-The property `background' adds a color-coded background.
+Combinations of any of those properties are expressed as a list,
+like in these examples:
 
-The property `intense' amplifies the applicable colors if
-`background' and/or `text-also' are set.  If `intense' is set on
-its own, then it implies `text-also'.
+    (semibold)
+    (variable-pitch semibold 1.3)
+    (variable-pitch semibold (height 1.3)) ; same as above
+    (variable-pitch semibold (height . 1.3)) ; same as above
 
-The property `faint' uses nuanced colors for the underline and
-for the foreground when `text-also' is included.  If both `faint'
-and `intense' are specified, the former takes precedence.
+The order in which the properties are set is not significant.
 
-Combinations of any of those properties can be expressed in a
-list, as in those examples:
+In user configuration files the form may look like this:
 
-    (background)
-    (straight-underline intense)
-    (background text-also straight-underline)
+    (setq modus-themes-headings
+          (quote ((1 . (variable-pitch 1.5))
+                  (2 . (1.3))
+                  (agenda-date . (1.3))
+                  (agenda-structure . (variable-pitch light 1.8))
+                  (t . (1.1)))))
 
-The order in which the properties are set is not significant.
+When defining the styles per heading level, it is possible to
+pass a non-nil value (t) instead of a list of properties.  This
+will retain the original aesthetic for that level.  For example:
 
-In user configuration files the form may look like this:
+    (setq modus-themes-headings
+          (quote ((1 . t)           ; keep the default style
+                  (2 . (semibold 1.2))
+                  (t . (variable-pitch))))) ; style for all other headings
 
-    (setq modus-themes-lang-checkers (quote (text-also background)))
+    (setq modus-themes-headings
+          (quote ((1 . (variable-pitch extrabold 1.5))
+                  (2 . (semibold))
+                  (t . t)))) ; default style for all other levels
 
-NOTE: The placement of the straight underline, though not the
-wave style, is controlled by the built-in variables
-`underline-minimum-offset', `x-underline-at-descent-line',
-`x-use-underline-position-properties'.
+Note that the text color of headings, of their background, and
+overline can all be set via the overrides.  It is possible to
+have any color combination for any heading level (something that
+could not be done in older versions of the themes).
 
-To disable fringe indicators for Flymake or Flycheck, refer to
-variables `flymake-fringe-indicator-position' and
-`flycheck-indication-mode', respectively."
+Read Info node `(modus-themes) Option for palette overrides' as
+well as Info node `(modus-themes) Make headings more or less
+colorful'.  Else check `modus-themes-common-palette-overrides'
+and related user options."
   :group 'modus-themes
-  :package-version '(modus-themes . "1.7.0")
-  :version "29.1"
-  :type '(set :tag "Properties" :greedy t
-              (const :tag "Straight underline" straight-underline)
-              (const :tag "Colorise text as well" text-also)
-              (const :tag "With background" background)
-              (choice :tag "Overall coloration"
-                      (const :tag "Intense colors" intense)
-                      (const :tag "Faint colors" faint)))
+  :package-version '(modus-themes . "4.0.0")
+  :version "30.1"
+  :type `(alist
+          :options ,(mapcar (lambda (el)
+                              (list el modus-themes--headings-widget))
+                            '(0 1 2 3 4 5 6 7 8 t agenda-date 
agenda-structure))
+          :key-type symbol
+          :value-type ,modus-themes--headings-widget)
   :set #'modus-themes--set-option
   :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Language checkers"))
+  :link '(info-link "(modus-themes) Heading styles"))
+
+(make-obsolete-variable 'modus-themes-org-agenda nil "4.0.0")
+(make-obsolete-variable 'modus-themes-fringes nil "4.0.0")
+(make-obsolete-variable 'modus-themes-lang-checkers nil "4.0.0")
 
 (defcustom modus-themes-org-blocks nil
   "Set the overall style of Org code blocks, quotes, and the like.
@@ -2004,208 +582,47 @@ block's contents.  It also affects the begin and end 
lines of the
 block as they get another shade of gray as their background,
 which differentiates them from the contents of the block.  All
 background colors extend to the edge of the window, giving the
-area a rectangular, \"blocky\" presentation.
+area a rectangular, \"blocky\" presentation.  If the begin/end
+lines do not extend in this way, check the value of the Org user
+option `org-fontify-whole-block-delimiter-line'.
 
-Option `tinted-background' uses a slightly colored background for
-the contents of the block.  The exact color will depend on the
+Option `tinted-background' uses a colored background for the
+contents of the block.  The exact color value will depend on the
 programming language and is controlled by the variable
 `org-src-block-faces' (refer to the theme's source code for the
 current association list).  For this to take effect, the Org
-buffer needs to be restarted with `org-mode-restart'.  In this
-scenario, it may be better to inhibit the extension of the
-delimiter lines' background to the edge of the window because Org
-does not provide a mechanism to update their colors depending on
-the contents of the block.  Disable the extension of such
-backgrounds by setting `org-fontify-whole-block-delimiter-line'
-to nil.
-
-Code blocks use their major mode's colors only when the variable
-`org-src-fontify-natively' is non-nil.  While quote/verse blocks
-require setting `org-fontify-quote-and-verse-blocks' to a non-nil
-value.
-
-Older versions of the themes provided options `grayscale' (or
-`greyscale') and `rainbow'.  Those will continue to work as they
-are aliases for `gray-background' and `tinted-background',
-respectively."
+buffer needs to be restarted with `org-mode-restart'.
+
+Code blocks use their major mode's fontification (syntax
+highlighting) only when the variable `org-src-fontify-natively'
+is non-nil.  While quote/verse blocks require setting
+`org-fontify-quote-and-verse-blocks' to a non-nil value."
   :group 'modus-themes
-  :package-version '(modus-themes . "2.1.0")
-  :version "28.1"
+  :package-version '(modus-themes . "4.0.0")
+  :version "30.1"
   :type '(choice
           (const :format "[%v] %t\n" :tag "No Org block background (default)" 
nil)
           (const :format "[%v] %t\n" :tag "Subtle gray block background" 
gray-background)
-          (const :format "[%v] %t\n" :tag "Alias for `gray-background'" 
grayscale) ; for backward compatibility
-          (const :format "[%v] %t\n" :tag "Alias for `gray-background'" 
greyscale)
-          (const :format "[%v] %t\n" :tag "Color-coded background per 
programming language" tinted-background)
-          (const :format "[%v] %t\n" :tag "Alias for `tinted-background'" 
rainbow)) ; back compat
+          (const :format "[%v] %t\n" :tag "Color-coded background per 
programming language" tinted-background))
   :set #'modus-themes--set-option
   :initialize #'custom-initialize-default
   :link '(info-link "(modus-themes) Org mode blocks"))
 
-(defcustom modus-themes-mode-line nil
-  "Control the overall style of the mode line.
-
-The value is a list of properties, each designated by a symbol.
-The default (a nil value or an empty list) is a two-dimensional
-rectangle with a border around it.  The active and the inactive
-mode lines use different shades of grayscale values for the
-background, foreground, border.
-
-The `3d' property applies a three-dimensional effect to the
-active mode line.  The inactive mode lines remain two-dimensional
-and are toned down a bit, relative to the default style.
-
-The `moody' property optimizes the mode line for use with the
-library of the same name (hereinafter referred to as Moody).
-In practice, it removes the box effect and replaces it with
-underline and overline properties.  It also tones down the
-inactive mode lines.  Despite its intended purpose, this option
-can also be used without the Moody library (please consult the
-themes' manual on this point for more details).  If both `3d' and
-`moody' properties are set, the latter takes precedence.
-
-The `borderless' property removes the color of the borders.  It
-does not actually remove the borders, but only makes their color
-the same as the background, effectively creating some padding.
-
-The `accented' property ensures that the active mode line uses a
-colored background instead of the standard shade of gray.
-
-A positive integer (natural number or natnum) applies a padding
-effect of NATNUM pixels at the boundaries of the mode lines.  The
-default value is 1 and does not need to be specified explicitly.
-The padding has no effect when the `moody' property is also used,
-because Moody already applies its own tweaks.  To ensure that the
-underline is placed at the bottom of the mode line, set
-`x-underline-at-descent-line' to non-nil (this is not needed when
-the `borderless' property is also set).  For users on Emacs 29,
-the `x-use-underline-position-properties' variable must also be
-set to nil.
-
-The padding can also be expressed as a cons cell in the form
-of (padding . NATNUM) or (padding NATNUM) where the key is
-constant and NATNUM is the desired natural number.
-
-A floating point (e.g. 0.9) applies an adjusted height to the
-mode line's text as a multiple of the main font size.  The
-default rate is 1.0 and does not need to be specified.  Apart
-from a floating point, the height may also be expressed as a cons
-cell in the form of (height . FLOAT) or (height FLOAT) where the
-key is constant and the FLOAT is the desired number.
-
-Combinations of any of those properties are expressed as a list,
-like in these examples:
-
-    (accented)
-    (borderless 3d)
-    (moody accented borderless)
-
-Same as above, using the padding and height as an example (these
-all yield the same result):
-
-    (accented borderless 4 0.9)
-    (accented borderless (padding . 4) (height . 0.9))
-    (accented borderless (padding 4) (height 0.9))
-
-The order in which the properties are set is not significant.
-
-In user configuration files the form may look like this:
-
-    (setq modus-themes-mode-line (quote (borderless accented)))
-
-Note that Moody does not expose any faces that the themes could
-style directly.  Instead it re-purposes existing ones to render
-its tabs and ribbons.  As such, there may be cases where the
-contrast ratio falls below the 7:1 target that the themes conform
-with (WCAG AAA).  To hedge against this, we configure a fallback
-foreground for the `moody' property, which will come into effect
-when the background of the mode line changes to something less
-accessible, such as Moody ribbons (read the doc string of
-`set-face-attribute', specifically `:distant-foreground').  This
-fallback is activated when Emacs determines that the background
-and foreground of the given construct are too close to each other
-in terms of color distance.  In practice, users will need to
-experiment with the variable `face-near-same-color-threshold' to
-trigger the effect.  We find that a value of 45000 shall suffice,
-contrary to the default 30000.  Though for the combinations that
-involve the `accented' and `moody' properties, as mentioned
-above, that should be raised up to 70000.  Do not set it too
-high, because it has the adverse effect of always overriding the
-default colors (which have been carefully designed to be highly
-accessible).
-
-Furthermore, because Moody expects an underline and overline
-instead of a box style, it is strongly advised to set
-`x-underline-at-descent-line' to a non-nil value."
-  :group 'modus-themes
-  :package-version '(modus-themes . "2.3.0")
-  :version "29.1"
-  :type '(set :tag "Properties" :greedy t
-              (choice :tag "Overall style"
-                      (const :tag "Rectangular Border" nil)
-                      (const :tag "3d borders" 3d)
-                      (const :tag "No box effects (Moody-compatible)" moody))
-              (const :tag "Colored background" accented)
-              (const :tag "Without border color" borderless)
-              (radio :tag "Padding"
-               (natnum :tag "Natural number (e.g. 4)")
-               (cons :tag "Cons cell of `(padding . NATNUM)'"
-                     (const :tag "The `padding' key (constant)" padding)
-                     (natnum :tag "Natural number")))
-              (radio :tag "Height"
-               (float :tag "Floating point (e.g. 0.9)")
-               (cons :tag "Cons cell of `(height . FLOAT)'"
-                     (const :tag "The `height' key (constant)" height)
-                     (float :tag "Floating point"))))
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Mode line"))
-
-(defcustom modus-themes-diffs nil
-  "Adjust the overall style of diffs.
-
-The default (nil) uses fairly intense color combinations for
-diffs, by applying prominently colored backgrounds, with
-appropriately tinted foregrounds.
-
-Option `desaturated' follows the same principles as with the
-default (nil), though it tones down all relevant colors.
-
-Option `bg-only' applies a background but does not override the
-text's foreground.  This makes it suitable for a non-nil value
-passed to `diff-font-lock-syntax' (note: Magit does not support
-syntax highlighting in diffs---last checked on 2021-12-02).
-
-When the user option `modus-themes-deuteranopia' is non-nil, all
-diffs will use a red/blue color-coding system instead of the
-standard red/green.  Other stylistic changes are made in the
-interest of optimizing for such a use-case."
-  :group 'modus-themes
-  :package-version '(modus-themes . "2.0.0")
-  :version "29.1"
-  :type '(choice
-          (const :format "[%v] %t\n" :tag "Intensely colored backgrounds 
(default)" nil)
-          (const :format "[%v] %t\n" :tag "Slightly accented backgrounds with 
tinted text" desaturated)
-          (const :format "[%v] %t\n" :tag "Apply color-coded backgrounds; keep 
syntax colors intact" bg-only))
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Diffs"))
+(make-obsolete-variable 'modus-themes-mode-line nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diffs nil "4.0.0")
 
-(defcustom modus-themes-completions
-  '((selection . (intense))
-    (popup . (intense)))
+(defcustom modus-themes-completions nil
   "Control the style of completion user interfaces.
 
-This affects Company, Corfu, Flx, Helm, Icomplete/Fido, Ido, Ivy,
-Orderless, Selectrum, Vertico.  The value is an alist that takes
-the form of a (KEY . PROPERTIES) combination.  KEY is a symbol,
-while PROPERTIES is a list.  Here is a sample, followed by a
-description of the particularities:
+This affects Company, Corfu, Flx, Icomplete/Fido, Ido, Ivy,
+Orderless, Vertico.  The value is an alist of expressions, each
+of which takes the form of (KEY . LIST-OF-PROPERTIES).  KEY is a
+symbol, while PROPERTIES is a list.  Here is a sample, followed
+by a description of the particularities:
 
     (setq modus-themes-completions
-          (quote ((matches . (extrabold background intense))
-                  (selection . (semibold accented intense))
-                  (popup . (accented)))))
+          (quote ((matches . (extrabold background))
+                  (selection . (semibold italic)))))
 
 The `matches' key refers to the highlighted characters that
 correspond to the user's input.  When its properties are nil or
@@ -2214,11 +631,6 @@ have a bold weight and a colored foreground.  The list of
 properties may include any of the following symbols regardless of
 the order they may appear in:
 
-- `background' to add a background color;
-
-- `intense' to increase the overall coloration (also amplifies
-  the `background', if present);
-
 - `underline' to draw a line below the characters;
 
 - `italic' to use a slanted font (italic or oblique forms);
@@ -2235,13 +647,6 @@ a subtle gray background, a bold weight, and the base 
foreground
 value for the text.  The list of properties it accepts is as
 follows (order is not significant):
 
-- `accented' to make the background colorful instead of gray;
-
-- `text-also' to apply extra color to the text of the selected
-  line;
-
-- `intense' to increase the overall coloration;
-
 - `underline' to draw a line below the characters;
 
 - `italic' to use a slanted font (italic or oblique forms);
@@ -2251,99 +656,33 @@ follows (order is not significant):
   variable `modus-themes-weights'.  The absence of a weight means
   that bold will be used.
 
-The `popup' key takes the same values as `selection'.  The only
-difference is that it applies specifically to user interfaces
-that display an inline popup and thus have slightly different
-styling requirements than the minibuffer.  The two prominent
-packages are `company' and `corfu'.
-
-Apart from specifying each key separately, a fallback list is
+Apart from specifying each key separately, a catch-all list is
 accepted.  This is only useful when the desired aesthetic is the
 same across all keys that are not explicitly referenced.  For
 example, this:
 
     (setq modus-themes-completions
-          (quote ((t . (extrabold intense)))))
+          (quote ((t . (extrabold underline)))))
 
 Is the same as:
 
     (setq modus-themes-completions
-          (quote ((matches . (extrabold intense))
-                  (selection . (extrabold intense))
-                  (popup . (extrabold intense)))))
-
-In the case of the fallback, any property that does not apply to
-the corresponding key is simply ignored (`matches' does not have
-`accented' and `text-also', while `selection' and `popup' do not
-have `background').
-
-Check the manual for tweaking `bold' and `italic' faces: Info
-node `(modus-themes) Configure bold and italic faces'.
-
-Also refer to the documentation of the `orderless' package for
-its intersection with `company' (if you choose to use those in
-tandem)."
+          (quote ((matches . (extrabold underline))
+                  (selection . (extrabold underline)))))"
   :group 'modus-themes
-  :package-version '(modus-themes . "3.0.0")
-  :version "29.1"
+  :package-version '(modus-themes . "4.0.0")
+  :version "30.1"
   :type `(set
           (cons :tag "Matches"
                 (const matches)
                 (set :tag "Style of matches" :greedy t
-                     (choice :tag "Font weight (must be supported by the 
typeface)"
-                             (const :tag "Bold (default)" nil)
-                             (const :tag "Thin" thin)
-                             (const :tag "Ultra-light" ultralight)
-                             (const :tag "Extra-light" extralight)
-                             (const :tag "Light" light)
-                             (const :tag "Semi-light" semilight)
-                             (const :tag "Regular" regular)
-                             (const :tag "Medium" medium)
-                             (const :tag "Semi-bold" semibold)
-                             (const :tag "Extra-bold" extrabold)
-                             (const :tag "Ultra-bold" ultrabold))
-                     (const :tag "With added background" background)
-                     (const :tag "Increased coloration" intense)
+                     ,modus-themes--weight-widget
                      (const :tag "Italic font (oblique or slanted forms)" 
italic)
                      (const :tag "Underline" underline)))
           (cons :tag "Selection"
                 (const selection)
                 (set :tag "Style of selection" :greedy t
-                     (choice :tag "Font weight (must be supported by the 
typeface)"
-                             (const :tag "Bold (default)" nil)
-                             (const :tag "Thin" thin)
-                             (const :tag "Ultra-light" ultralight)
-                             (const :tag "Extra-light" extralight)
-                             (const :tag "Light" light)
-                             (const :tag "Semi-light" semilight)
-                             (const :tag "Regular" regular)
-                             (const :tag "Medium" medium)
-                             (const :tag "Semi-bold" semibold)
-                             (const :tag "Extra-bold" extrabold)
-                             (const :tag "Ultra-bold" ultrabold))
-                     (const :tag "Apply color to the line's text" text-also)
-                     (const :tag "With accented background" accented)
-                     (const :tag "Increased coloration" intense)
-                     (const :tag "Italic font (oblique or slanted forms)" 
italic)
-                     (const :tag "Underline" underline)))
-          (cons :tag "Popup"
-                (const popup)
-                (set :tag "Style of completion pop-ups" :greedy t
-                     (choice :tag "Font weight (must be supported by the 
typeface)"
-                             (const :tag "Bold (default)" nil)
-                             (const :tag "Thin" thin)
-                             (const :tag "Ultra-light" ultralight)
-                             (const :tag "Extra-light" extralight)
-                             (const :tag "Light" light)
-                             (const :tag "Semi-light" semilight)
-                             (const :tag "Regular" regular)
-                             (const :tag "Medium" medium)
-                             (const :tag "Semi-bold" semibold)
-                             (const :tag "Extra-bold" extrabold)
-                             (const :tag "Ultra-bold" ultrabold))
-                     (const :tag "Apply color to the line's text" text-also)
-                     (const :tag "With accented background" accented)
-                     (const :tag "Increased coloration" intense)
+                     ,modus-themes--weight-widget
                      (const :tag "Italic font (oblique or slanted forms)" 
italic)
                      (const :tag "Underline" underline))))
   :set #'modus-themes--set-option
@@ -2355,512 +694,509 @@ tandem)."
 
 The value is a list of properties, each designated by a symbol.
 The default (a nil value or an empty list) means to only use a
-subtle accented foreground color.
-
-The property `background' applies a background color to the
-prompt's text.  By default, this is a subtle accented value.
-
-The property `intense' makes the foreground color more prominent.
-If the `background' property is also set, it amplifies the value
-of the background as well.
-
-The property `gray' changes the prompt's colors to grayscale.
-This affects the foreground and, if the `background' property is
-also set, the background.  Its effect is subtle, unless it is
-combined with the `intense' property.
+subtle colored foreground color.
 
-The property `bold' makes the text use a bold typographic weight.
-Similarly, `italic' adds a slant to the font's forms (italic or
+The `italic' property adds a slant to the font's forms (italic or
 oblique forms, depending on the typeface).
 
-Combinations of any of those properties are expressed as a list,
-like in these examples:
-
-    (intense)
-    (bold intense)
-    (intense bold gray)
-    (intense background gray bold)
-
-The order in which the properties are set is not significant.
-
-In user configuration files the form may look like this:
-
-    (setq modus-themes-prompts (quote (background gray)))"
-  :group 'modus-themes
-  :package-version '(modus-themes . "1.5.0")
-  :version "28.1"
-  :type '(set :tag "Properties" :greedy t
-              (const :tag "With Background" background)
-              (const :tag "Intense" intense)
-              (const :tag "Grayscale" gray)
-              (const :tag "Bold font weight" bold)
-              (const :tag "Italic font slant" italic))
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Command prompts"))
-
-(defcustom modus-themes-hl-line '(intense)
-  "Control the current line highlight of `hl-line-mode'.
-
-The value is a list of properties, each designated by a symbol.
-With a nil value, or an empty list, the style is a subtle gray
-background color.
-
-The property `accented' changes the background to a colored
-variant.
-
-An `underline' property draws a line below the highlighted area.
-Its color is similar to the background, so gray by default or an
-accent color when `accented' is also set.
-
-An `intense' property amplifies the colors in use, which may be
-both the background and the underline.
-
-Combinations of any of those properties are expressed as a list,
-like in these examples:
-
-    (intense)
-    (underline intense)
-    (accented intense underline)
-
-The order in which the properties are set is not significant.
-
-In user configuration files the form may look like this:
-
-    (setq modus-themes-hl-line (quote (underline accented)))
-
-Set `x-underline-at-descent-line' to a non-nil value so that the
-placement of the underline coincides with the lower boundary of
-the colored background."
-  :group 'modus-themes
-  :package-version '(modus-themes . "3.0.0")
-  :version "29.1"
-  :type '(set :tag "Properties" :greedy t
-              (const :tag "Colored background" accented)
-              (const :tag "Underline" underline)
-              (const :tag "Intense style" intense))
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Line highlighting"))
-
-(defcustom modus-themes-subtle-line-numbers nil
-  "Use more subtle style for command `display-line-numbers-mode'."
-  :group 'modus-themes
-  :package-version '(modus-themes . "1.2.0")
-  :version "28.1"
-  :type 'boolean
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Line numbers"))
-
-(defcustom modus-themes-markup nil
-  "Style markup in Org, Markdown, and others.
-
-This affects constructs such as Org's =verbatim= and ~code~.
-
-The value is a list of properties, each designated by a symbol.
-The default (a nil value or an empty list) is a foreground
-color.
-
-The `italic' property applies a typographic slant (italics).
-
-The `bold' property applies a heavier typographic weight.
-
-The `background' property adds a background color.  The
-background is a shade of gray, unless the `intense' property is
-also set.
-
-The `intense' property amplifies the existing coloration.  When
-`background' is used, the background color is enhanced as well
-and becomes tinted instead of being gray.
+The symbol of a font weight attribute such as `light', `semibold',
+et cetera, adds the given weight to links.  Valid symbols are
+defined in the variable `modus-themes-weights'.  The absence of a
+weight means that the one of the underlying text will be used.
 
 Combinations of any of those properties are expressed as a list,
 like in these examples:
 
-    (bold)
     (bold italic)
-    (bold italic intense)
-    (bold italic intense background)
-
-The order in which the properties are set is not significant.
-
-In user configuration files the form may look like this:
-
-    (setq modus-themes-markup (quote (bold italic)))
-
-Also check the variables `org-hide-emphasis-markers',
-`org-hide-macro-markers'."
-  :group 'modus-themes
-  :package-version '(modus-themes . "2.1.0")
-  :version "29.1"
-  :type '(set :tag "Properties" :greedy t
-              (const :tag "Added background" background)
-              (const :tag "Intense colors" intense)
-              (const :tag "Bold weight" bold)
-              (const :tag "Italics (slanted text)" italic))
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Markup"))
-
-(defcustom modus-themes-paren-match nil
-  "Control the style of matching parentheses or delimiters.
-
-The value is a list of properties, each designated by a symbol.
-The default (a nil value or an empty list) is a subtle background
-color.
-
-The `bold' property adds a bold weight to the characters of the
-matching delimiters.
-
-The `intense' property applies a more prominent background color
-to the delimiters.
-
-The `underline' property draws a straight line under the affected
-text.
-
-Combinations of any of those properties are expressed as a list,
-like in these examples:
-
-    (bold)
-    (underline intense)
-    (bold intense underline)
-
-The order in which the properties are set is not significant.
-
-In user configuration files the form may look like this:
-
-    (setq modus-themes-paren-match (quote (bold intense)))"
-  :group 'modus-themes
-  :package-version '(modus-themes . "1.5.0")
-  :version "28.1"
-  :type '(set :tag "Properties" :greedy t
-              (const :tag "Bold weight" bold)
-              (const :tag "Intense background color" intense)
-              (const :tag "Underline" underline))
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Matching parentheses"))
-
-(defcustom modus-themes-syntax nil
-  "Control the overall style of code syntax highlighting.
-
-The value is a list of properties, each designated by a symbol.
-The default (a nil value or an empty list) is to use a balanced
-combination of colors on the cyan-blue-magenta side of the
-spectrum.  There is little to no use of greens, yellows, and
-reds.  Comments are gray, strings are blue colored, doc strings
-are a shade of cyan, while color combinations are designed to
-avoid exaggerations.
-
-The property `faint' fades the saturation of all applicable
-colors, where that is possible or appropriate.
-
-The property `yellow-comments' applies a yellow color to
-comments.
-
-The property `green-strings' applies a green color to strings and
-a green tint to doc strings.
-
-The property `alt-syntax' changes the combination of colors
-beyond strings and comments, so that the effective palette is
-broadened to provide greater variety relative to the default.
-
-Combinations of any of those properties are expressed as a list,
-like in these examples:
-
-    (faint)
-    (green-strings yellow-comments)
-    (alt-syntax green-strings yellow-comments)
-    (faint alt-syntax green-strings yellow-comments)
-
-The order in which the properties are set is not significant.
-
-In user configuration files the form may look like this:
-
-    (setq modus-themes-syntax (quote (faint alt-syntax)))
-
-Independent of this variable, users may also control the use of a
-bold weight or italic text: `modus-themes-bold-constructs' and
-`modus-themes-italic-constructs'."
-  :group 'modus-themes
-  :package-version '(modus-themes . "1.5.0")
-  :version "28.1"
-  :type '(set :tag "Properties" :greedy t
-              (const :tag "Faint colors" faint)
-              (const :tag "Yellow comments" yellow-comments)
-              (const :tag "Green strings" green-strings)
-              (const :tag "Alternative set of colors" alt-syntax))
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Syntax styles"))
-
-(defcustom modus-themes-links nil
-  "Set the style of links.
-
-The value is a list of properties, each designated by a symbol.
-The default (a nil value or an empty list) is a prominent text
-color, typically blue, with an underline of the same color.
-
-For the style of the underline, a `neutral-underline' property
-turns the color of the line into a subtle gray, while the
-`no-underline' property removes the line altogether.  If both of
-those are set, the latter takes precedence.
-
-For text coloration, a `faint' property desaturates the color of
-the text and the underline, unless the underline is affected by
-the aforementioned properties.  While a `no-color' property
-removes the color from the text.  If both of those are set, the
-latter takes precedence.
-
-A `bold' property applies a heavy typographic weight to the text
-of the link.
-
-An `italic' property adds a slant to the link's text (italic or
-oblique forms, depending on the typeface).
-
-A `background' property applies a subtle tinted background color.
-
-In case both `no-underline' and `no-color' are set, then a subtle
-gray background is applied to all links.  This can still be
-combined with the `bold' and `italic' properties.
-
-Combinations of any of those properties are expressed as a list,
-like in these examples:
-
-    (faint)
-    (no-underline faint)
-    (no-color no-underline bold)
-    (italic bold background no-color no-underline)
+    (italic semibold)
 
 The order in which the properties are set is not significant.
 
 In user configuration files the form may look like this:
 
-    (setq modus-themes-links (quote (neutral-underline background)))
-
-The placement of the underline, meaning its proximity to the
-text, is controlled by `x-use-underline-position-properties',
-`x-underline-at-descent-line', `underline-minimum-offset'.
-Please refer to their documentation strings."
+    (setq modus-themes-prompts (quote (extrabold italic)))"
   :group 'modus-themes
-  :package-version '(modus-themes . "1.5.0")
-  :version "28.1"
-  :type '(set :tag "Properties" :greedy t
-              (choice :tag "Text coloration"
-                      (const :tag "Saturared color (default)" nil)
-                      (const :tag "Faint coloration" faint)
-                      (const :tag "No color (use main black/white)" no-color))
-              (choice :tag "Underline"
-                      (const :tag "Same color as text (default)" nil)
-                      (const :tag "Neutral (gray) underline color" 
neutral-underline)
-                      (const :tag "No underline" no-underline))
-              (const :tag "Bold font weight" bold)
+  :package-version '(modus-themes . "4.0.0")
+  :version "30.1"
+  :type `(set :tag "Properties" :greedy t
               (const :tag "Italic font slant" italic)
-              (const :tag "Subtle background color" background))
+              ,modus-themes--weight-widget)
   :set #'modus-themes--set-option
   :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Link styles"))
-
-(defcustom modus-themes-region nil
-  "Control the overall style of the active region.
-
-The value is a list of properties, each designated by a symbol.
-The default (a nil value or an empty list) is a prominent gray
-background that overrides all foreground colors in the area it
-encompasses.  Its reach extends to the edge of the window.
-
-The `no-extend' property limits the region to the end of the
-line, so that it does not reach the edge of the window.
-
-The `bg-only' property makes the region's background color more
-subtle to allow the underlying text to retain its foreground
-colors.
-
-The `accented' property applies a more colorful background to the
-region.
-
-Combinations of any of those properties are expressed as a list,
-like in these examples:
-
-    (no-extend)
-    (bg-only accented)
-    (accented bg-only no-extend)
-
-The order in which the properties are set is not significant.
-
-In user configuration files the form may look like this:
+  :link '(info-link "(modus-themes) Command prompts"))
 
-    (setq modus-themes-region (quote (bg-only no-extend)))"
-  :group 'modus-themes
-  :package-version '(modus-themes . "1.5.0")
-  :version "28.1"
-  :type '(set :tag "Properties" :greedy t
-              (const :tag "Do not extend to the edge of the window" no-extend)
-              (const :tag "Background only (preserve underlying colors)" 
bg-only)
-              (const :tag "Accented background" accented))
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Active region"))
-
-(defcustom modus-themes-deuteranopia nil
-  "When non-nil use red/blue color-coding instead of red/green.
-
-This is to account for red-green color deficiency, also know as
-deuteranopia and variants.  It applies to all contexts where
-there can be a color-coded distinction between failure or
-success, a to-do or done state, a mark for deletion versus a mark
-for selection (e.g. in Dired), current and lazily highlighted
-search matches, removed lines in diffs as opposed to added ones,
-and so on.
-
-Note that this does not change all colors throughout the active
-theme, but only applies to cases that have color-coding
-significance.  For example, regular code syntax highlighting is
-not affected.  There is no such need because of the themes'
-overarching commitment to the highest legibility standard, which
-ensures that text is readable regardless of hue, as well as the
-predominance of colors on the blue-cyan-magenta-purple side of
-the spectrum."
+(make-obsolete-variable 'modus-themes-subtle-line-numbers nil "4.0.0")
+(make-obsolete-variable 'modus-themes-markup nil "4.0.0")
+(make-obsolete-variable 'modus-themes-paren-match nil "4.0.0")
+(make-obsolete-variable 'modus-themes-syntax nil "4.0.0")
+(make-obsolete-variable 'modus-themes-links nil "4.0.0")
+(make-obsolete-variable 'modus-themes-region nil "4.0.0")
+(make-obsolete-variable 'modus-themes-deuteranopia nil "4.0.0")
+(make-obsolete-variable 'modus-themes-mail-citations nil "4.0.0")
+(make-obsolete-variable 'modus-themes-tabs-accented nil "4.0.0")
+(make-obsolete-variable 'modus-themes-box-buttons nil "4.0.0")
+
+(defcustom modus-themes-common-palette-overrides nil
+  "Set palette overrides for all the Modus themes.
+
+Mirror the elements of a theme's palette, overriding their value.
+The palette variables are named THEME-NAME-palette, while
+individual theme overrides are THEME-NAME-palette-overrides.  The
+THEME-NAME is one of the symbols in `modus-themes-items'.  For
+example:
+
+- `modus-operandi-palette'
+- `modus-operandi-palette-overrides'
+
+Individual theme overrides take precedence over these common
+overrides.
+
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red.  Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
   :group 'modus-themes
-  :package-version '(modus-themes . "2.0.0")
-  :version "29.1"
-  :type 'boolean
+  :package-version '(modus-themes . "4.0.0")
+  :version "30.1"
+  :type '(repeat (list symbol (choice symbol string))) ; TODO 2022-12-18: 
Refine overrides' :type
   :set #'modus-themes--set-option
   :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Deuteranopia style"))
+  :link '(info-link "(modus-themes) Palette overrides"))
 
-(defcustom modus-themes-mail-citations nil
-  "Control the color of citations/quotes in messages or emails.
-
-By default (a nil value) citations are styled with contrasting
-hues to denote their depth.  Colors are easy to tell apart
-because they complement each other, but they otherwise are not
-very prominent.
+
 
-Option `intense' is similar to the default in terms of using
-contrasting and complementary hues, but applies more saturated
-colors.
+;;;; Presets of palette overrides
+
+(defvar modus-themes-preset-overrides-faint
+  '((bg-completion       bg-inactive)
+    (bg-hover            bg-cyan-subtle)
+    (bg-hover-secondary  bg-magenta-subtle)
+    (bg-hl-line          bg-dim)
+    (bg-paren-match      bg-cyan-subtle)
+    (bg-region           bg-active)
+
+    (bg-mode-line-active        bg-inactive)
+    (border-mode-line-active    fg-dim)
+    (bg-mode-line-inactive      bg-dim)
+    (border-mode-line-inactive  bg-active)
+
+    (bg-tab-bar      bg-inactive)
+    (bg-tab-current  bg-main)
+    (bg-tab-other    bg-active)
+
+    (fringe unspecified)
+    (builtin maroon)
+    (comment fg-dim)
+    (constant blue-faint)
+    (docstring fg-alt)
+    (docmarkup magenta-faint)
+    (fnname pink)
+    (keyword indigo)
+    (preprocessor rust)
+    (string slate)
+    (type cyan-faint)
+    (variable cyan-faint)
+    (rx-construct gold)
+    (rx-backslash olive)
+
+    (underline-err red-faint)
+    (underline-warning yellow-faint)
+    (underline-note cyan-faint)
+
+    (bg-button-active bg-main)
+    (fg-button-active fg-main)
+    (bg-button-inactive bg-inactive)
+    (fg-button-inactive "gray50")
+
+    (date-common cyan-faint)
+    (date-deadline red-faint)
+    (date-event fg-alt)
+    (date-holiday magenta)
+    (date-now fg-main)
+    (date-scheduled yellow-faint)
+    (date-weekday fg-dim)
+    (date-weekend fg-dim)
+
+    (name maroon)
+    (identifier fg-dim)
+
+    (fg-line-number-active fg-main)
+    (fg-line-number-inactive "gray50")
+    (bg-line-number-active unspecified)
+    (bg-line-number-inactive unspecified)
+
+    (fg-link blue-faint)
+    (bg-link unspecified)
+    (underline-link bg-active)
+
+    (fg-link-symbolic cyan-faint)
+    (bg-link-symbolic unspecified)
+    (underline-link-symbolic bg-active)
+
+    (fg-link-visited magenta-faint)
+    (bg-link-visited unspecified)
+    (underline-link-visited bg-active)
+
+    (mail-cite-0 cyan-faint)
+    (mail-cite-1 yellow-faint)
+    (mail-cite-2 green-faint)
+    (mail-cite-3 red-faint)
+    (mail-part olive)
+    (mail-recipient indigo)
+    (mail-subject maroon)
+    (mail-other slate)
+
+    (fg-prompt cyan-faint)
+
+    (prose-code olive)
+    (prose-done green-faint)
+    (prose-macro indigo)
+    (prose-tag rust)
+    (prose-todo red-faint)
+    (prose-verbatim maroon)
+
+    (rainbow-0 fg-main)
+    (rainbow-1 magenta)
+    (rainbow-2 cyan)
+    (rainbow-3 red-faint)
+    (rainbow-4 yellow-faint)
+    (rainbow-5 magenta-cooler)
+    (rainbow-6 green)
+    (rainbow-7 blue-warmer)
+    (rainbow-8 magenta-faint))
+  "Preset for palette overrides with faint coloration.
+
+This changes many parts of the theme to make them look less
+colorful/intense.  Grays are toned down, gray backgrounds are
+removed from some contexts, and almost all accent colors are
+desaturated.
+
+To set a preset, assign its symbol without a quote as the value
+of the `modus-themes-common-palette-overrides' or as the value of
+theme-specific options such as `modus-operandi-palette-overrides'.
+
+Also see `modus-themes-preset-overrides-intense'.
+
+For overriding named colors and/or semantic color mappings read
+Info node `(modus-themes) Option for palette overrides'.")
+
+(defvar modus-themes-preset-overrides-intense
+  '((bg-region bg-cyan-intense)
+
+    (bg-completion       bg-cyan-subtle)
+    (bg-hover            bg-yellow-intense)
+    (bg-hover-secondary  bg-magenta-intense)
+    (bg-hl-line          bg-cyan-subtle)
+
+    (bg-mode-line-active      bg-blue-subtle)
+    (fg-mode-line-active      fg-main)
+    (border-mode-line-active  blue-intense)
+
+    (fringe bg-inactive)
+    (comment red-faint)
+
+    (date-common cyan)
+    (date-deadline red)
+    (date-event blue)
+    (date-holiday magenta-warmer)
+    (date-now blue-faint)
+    (date-scheduled yellow-warmer)
+    (date-weekday fg-main)
+    (date-weekend red-faint)
+
+    (keybind blue-intense)
+
+    (mail-cite-0 blue)
+    (mail-cite-1 yellow)
+    (mail-cite-2 green)
+    (mail-cite-3 magenta)
+    (mail-part magenta-cooler)
+    (mail-recipient cyan)
+    (mail-subject red-warmer)
+    (mail-other cyan-cooler)
+
+    (fg-prompt blue-intense)
+
+    (prose-block red-faint)
+    (prose-done green-intense)
+    (prose-metadata cyan-faint)
+    (prose-metadata-value blue-cooler)
+    (prose-table cyan)
+    (prose-todo red-intense)
+
+    (fg-heading-0 blue-cooler)
+    (fg-heading-1 magenta-cooler)
+    (fg-heading-2 magenta-warmer)
+    (fg-heading-3 blue)
+    (fg-heading-4 cyan)
+    (fg-heading-5 green-warmer)
+    (fg-heading-6 yellow)
+    (fg-heading-7 red)
+    (fg-heading-8 magenta)
+
+    (bg-heading-0 unspecified)
+    (bg-heading-1 bg-magenta-nuanced)
+    (bg-heading-2 bg-red-nuanced)
+    (bg-heading-3 bg-blue-nuanced)
+    (bg-heading-4 bg-cyan-nuanced)
+    (bg-heading-5 bg-green-nuanced)
+    (bg-heading-6 bg-yellow-nuanced)
+    (bg-heading-7 bg-red-nuanced)
+    (bg-heading-8 bg-magenta-nuanced)
+
+    (overline-heading-0 unspecified)
+    (overline-heading-1 magenta-cooler)
+    (overline-heading-2 magenta-warmer)
+    (overline-heading-3 blue)
+    (overline-heading-4 cyan)
+    (overline-heading-5 green)
+    (overline-heading-6 yellow-cooler)
+    (overline-heading-7 red-cooler)
+    (overline-heading-8 magenta))
+  "Preset for palette overrides with faint coloration.
+
+This changes many parts of the theme to make them look more
+colorful/intense.  Many background colors are accented and
+coloration is increased to pop out more.
+
+To set a preset, assign its symbol without a quote as the value
+of the `modus-themes-common-palette-overrides' or as the value of
+theme-specific options such as `modus-operandi-palette-overrides'.
+
+Also see `modus-themes-preset-overrides-faint'.
+
+For overriding named colors and/or semantic color mappings read
+Info node `(modus-themes) Option for palette overrides'.")
 
-Option `faint' maintains the same color-based distinction between
-citation levels though the colors it uses have subtle differences
-between them.
+
 
-Option `monochrome' turns all quotes into a shade of gray.
+;;;; Helper functions for theme setup
 
-Whatever the value assigned to this variable, citations in emails
-are controlled by typographic elements and/or indentation, which
-the themes do not touch."
-  :group 'modus-themes
-  :package-version '(modus-themes . "2.1.0")
-  :version "29.1"
-  :type '(choice
-          (const :format "[%v] %t\n" :tag "Colorful email citations with 
contrasting hues (default)" nil)
-          (const :format "[%v] %t\n" :tag "Like the default, but with more 
saturated colors" intense)
-          (const :format "[%v] %t\n" :tag "Like the default, but with less 
saturated colors" faint)
-          (const :format "[%v] %t\n" :tag "Deprecated alias of `faint'" 
desaturated)
-          (const :format "[%v] %t\n" :tag "Uniformly gray mail citations" 
monochrome))
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Mail citations"))
+;; This is the WCAG formula: https://www.w3.org/TR/WCAG20-TECHS/G18.html
+(defun modus-themes-wcag-formula (hex)
+  "Get WCAG value of color value HEX.
+The value is defined in hexadecimal RGB notation, such #123456."
+  (cl-loop for k in '(0.2126 0.7152 0.0722)
+           for x in (color-name-to-rgb hex)
+           sum (* k (if (<= x 0.03928)
+                        (/ x 12.92)
+                      (expt (/ (+ x 0.055) 1.055) 2.4)))))
 
-(defcustom modus-themes-tabs-accented nil
-  "Toggle accented tab backgrounds, instead of the default gray.
-This affects the built-in tab-bar mode and tab-line mode, as well
-as the Centaur tabs package."
-  :group 'modus-themes
-  :package-version '(modus-themes . "1.6.0")
-  :version "28.1"
-  :type 'boolean
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Tab style"))
+;;;###autoload
+(defun modus-themes-contrast (c1 c2)
+  "Measure WCAG contrast ratio between C1 and C2.
+C1 and C2 are color values written in hexadecimal RGB."
+  (let ((ct (/ (+ (modus-themes-wcag-formula c1) 0.05)
+               (+ (modus-themes-wcag-formula c2) 0.05))))
+    (max ct (/ ct))))
 
-(defcustom modus-themes-box-buttons nil
-  "Control the style of buttons in the Custom UI and related.
+(make-obsolete 'modus-themes-color nil "4.0.0")
+(make-obsolete 'modus-themes-color-alts nil "4.0.0")
+
+(declare-function cl-remove-if-not "cl-seq" (cl-pred cl-list &rest cl-keys))
+
+(defun modus-themes--list-enabled-themes ()
+  "Return list of `custom-enabled-themes' with modus- prefix."
+  (cl-remove-if-not
+   (lambda (theme)
+     (string-prefix-p "modus-" (symbol-name theme)))
+   custom-enabled-themes))
+
+(defun modus-themes--enable-themes ()
+  "Enable the Modus themes."
+  (mapc (lambda (theme)
+          (unless (memq theme custom-known-themes)
+            (load-theme theme :no-confirm :no-enable)))
+        modus-themes-items))
+
+(defun modus-themes--list-known-themes ()
+  "Return list of `custom-known-themes' with modus- prefix."
+  (modus-themes--enable-themes)
+  (cl-remove-if-not
+   (lambda (theme)
+     (string-prefix-p "modus-" (symbol-name theme)))
+   custom-known-themes))
 
-The value is a list of properties, each designated by a symbol.
-The default (a nil value or an empty list) is a gray background
-combined with a pseudo three-dimensional effect.
+(defun modus-themes--current-theme ()
+  "Return first enabled Modus theme."
+  (car (modus-themes--list-enabled-themes)))
+
+(defun modus-themes--palette-symbol (theme &optional overrides)
+  "Return THEME palette as a symbol.
+With optional OVERRIDES, return THEME palette overrides as a
+symbol."
+  (when-let ((suffix (cond
+                      ((and theme overrides)
+                       "palette-overrides")
+                      (theme
+                       "palette"))))
+    (intern (format "%s-%s" theme suffix))))
+
+(defun modus-themes--palette-value (theme &optional overrides)
+  "Return palette value of THEME with optional OVERRIDES."
+  (let ((base-value (symbol-value (modus-themes--palette-symbol theme))))
+    (if overrides
+        (append (symbol-value (modus-themes--palette-symbol theme :overrides))
+                modus-themes-common-palette-overrides
+                base-value)
+      base-value)))
+
+(defun modus-themes--current-theme-palette (&optional overrides)
+  "Return palette value of active Modus theme, else produce `user-error'.
+With optional OVERRIDES return palette value plus whatever
+overrides."
+  (if-let ((theme (modus-themes--current-theme)))
+      (if overrides
+          (modus-themes--palette-value theme :overrides)
+        (modus-themes--palette-value theme))
+    (user-error "No enabled Modus theme could be found")))
+
+(defun modus-themes-load-theme (theme)
+  "Load THEME while disabling other Modus themes.
+Run `modus-themes-after-load-theme-hook'."
+  (mapc #'disable-theme (modus-themes--list-known-themes))
+  (load-theme theme :no-confirm)
+  (run-hooks 'modus-themes-after-load-theme-hook))
 
-The `flat' property makes the button two dimensional.
+;;;; Commands
 
-The `accented' property changes the background from gray to an
-accent color.
+(make-obsolete 'modus-themes-load-themes nil "4.0.0")
+(make-obsolete 'modus-themes-load-operandi nil "4.0.0; Check 
`modus-themes-load-theme'")
+(make-obsolete 'modus-themes-load-vivendi nil "4.0.0; Check 
`modus-themes-load-theme'")
 
-The `faint' property reduces the overall coloration.
+(defvar modus-themes--select-theme-history nil
+  "Minibuffer history of `modus-themes--select-prompt'.")
 
-The `variable-pitch' property applies a proportionately spaced
-typeface to the button's text.
+(defun modus-themes--select-prompt ()
+  "Minibuffer prompt to select a Modus theme."
+  (intern
+   (completing-read
+    "Select Modus theme: "
+    (modus-themes--list-known-themes)
+    nil t nil
+    'modus-themes--select-theme-history)))
 
-The `underline' property draws a line below the affected text and
-removes whatever box effect.  This is optimal when Emacs runs
-inside a terminal emulator.  If `flat' and `underline' are
-defined together, the latter takes precedence.
+;;;###autoload
+(defun modus-themes-select (theme)
+  "Load a Modus THEME using minibuffer completion.
+Run `modus-themes-after-load-theme-hook' after loading the theme."
+  (interactive (list (modus-themes--select-prompt)))
+  (modus-themes-load-theme theme))
+
+(defun modus-themes--toggle-theme-p ()
+  "Return non-nil if `modus-themes-to-toggle' are valid."
+  (mapc (lambda (theme)
+          (if (or (memq theme modus-themes-items)
+                  (memq theme (modus-themes--list-known-themes)))
+              theme
+            (user-error "`%s' is not part of `modus-themes-items'" theme)))
+        modus-themes-to-toggle))
 
-The symbol of a weight attribute adjusts the font of the button
-accordingly, such as `light', `semibold', etc.  Valid symbols are
-defined in the variable `modus-themes-weights'.
+;;;###autoload
+(defun modus-themes-toggle ()
+  "Toggle between the two `modus-themes-to-toggle'.
+If `modus-themes-to-toggle' does not specify two Modus themes,
+prompt with completion for a theme among our collection (this is
+practically the same as the `modus-themes-select' command).
 
-A number, expressed as a floating point (e.g. 0.9), adjusts the
-height of the button's text to that many times the base font
-size.  The default height is the same as 1.0, though it need not
-be explicitly stated.  Instead of a floating point, an acceptable
-value can be in the form of a cons cell like (height . FLOAT)
-or (height FLOAT), where FLOAT is the given number.
+Run `modus-themes-after-load-theme-hook' after loading the theme."
+  (interactive)
+  (if-let* ((themes (modus-themes--toggle-theme-p))
+            (one (car themes))
+            (two (cadr themes)))
+      (if (eq (car custom-enabled-themes) one)
+          (modus-themes-load-theme two)
+        (modus-themes-load-theme one))
+    (modus-themes-load-theme (modus-themes--select-prompt))))
+
+(defun modus-themes--list-colors-render (buffer theme &optional mappings &rest 
_)
+  "Render colors in BUFFER from THEME for `modus-themes-list-colors'.
+Optional MAPPINGS changes the output to only list the semantic
+color mappings of the palette, instead of its named colors."
+  (let* ((current (modus-themes--palette-value theme :overrides))
+         (palette (if mappings
+                      (seq-remove (lambda (cell)
+                                    (or (stringp (cadr cell))
+                                        (eq (cadr cell) 'unspecified)))
+                                  current)
+                    (seq-remove (lambda (cell)
+                                  (symbolp (cadr cell)))
+                                current)))
+         (current-buffer buffer)
+         (current-theme theme))
+    (with-help-window buffer
+      (with-current-buffer standard-output
+        (erase-buffer)
+        (when (<= (display-color-cells) 256)
+          (insert (concat "Your display terminal may not render all color 
previews!\n"
+                          "It seems to only support <= 256 colors.\n\n"))
+          (put-text-property (point-min) (point) 'face 'warning))
+        ;; We need this to properly render the first line.
+        (insert " ")
+        (dolist (cell palette)
+          (let* ((name (car cell))
+                 (color (cadr cell))
+                 (mapping (if mappings
+                              (cadr (seq-find (lambda (c)
+                                                (eq (car c) color))
+                                              current))
+                            color))
+                 (fg (readable-foreground-color mapping))
+                 (pad (make-string 5 ?\s)))
+            (let ((old-point (point)))
+              (insert (format "%s %s" mapping pad))
+              (put-text-property old-point (point) 'face `( :foreground 
,mapping)))
+            (let ((old-point (point)))
+              (insert (format " %s %s %s\n" mapping pad name))
+              (put-text-property old-point (point)
+                                 'face `( :background ,mapping
+                                          :foreground ,fg
+                                          :extend t)))
+            ;; We need this to properly render the last line.
+            (insert " ")))
+        (setq-local revert-buffer-function
+                    (lambda (_ignore-auto _noconfirm)
+                      (modus-themes--list-colors-render current-buffer 
current-theme)))))))
 
-The `all-buttons' property extends the box button effect (or the
-aforementioned properties) to the faces of the generic widget
-library.  By default, those do not look like the buttons of the
-Custom UI as they are ordinary text wrapped in square brackets.
+(defvar modus-themes--list-colors-prompt-history '()
+  "Minibuffer history for `modus-themes--list-colors-prompt'.")
 
-Combinations of any of those properties are expressed as a list,
-like in these examples:
+(defun modus-themes--list-colors-prompt ()
+  "Prompt for Modus theme.
+Helper function for `modus-themes-list-colors'."
+  (let ((def (format "%s" (modus-themes--current-theme))))
+    (completing-read
+     (format "Use palette from theme [%s]: " def)
+     (modus-themes--list-known-themes) nil t nil
+     'modus-themes--list-colors-prompt-history def)))
 
-    (flat)
-    (variable-pitch flat)
-    (variable-pitch flat semibold 0.9)
-    (variable-pitch flat semibold (height 0.9)) ; same as above
-    (variable-pitch flat semibold (height . 0.9)) ; same as above
+(defun modus-themes-list-colors (theme &optional mappings)
+  "Preview named colors of the Modus THEME of choice.
+With optional prefix argument for MAPPINGS preview the semantic
+color mappings instead of the named colors."
+  (interactive (list (intern (modus-themes--list-colors-prompt)) 
current-prefix-arg))
+  (modus-themes--list-colors-render
+   (format (if mappings "*%s-list-mappings*" "*%s-list-colors*") theme)
+   theme
+   mappings))
 
-The order in which the properties are set is not significant.
+(defalias 'modus-themes-preview-colors 'modus-themes-list-colors
+  "Alias of `modus-themes-list-colors'.")
 
-In user configuration files the form may look like this:
+(defun modus-themes-list-colors-current (&optional mappings)
+  "Call `modus-themes-list-colors' for the current Modus theme.
+Optional prefix argument MAPPINGS has the same meaning as for
+`modus-themes-list-colors'."
+  (interactive "P")
+  (modus-themes-list-colors (modus-themes--current-theme) mappings))
 
-    (setq modus-themes-box-buttons (quote (variable-pitch flat 0.9)))"
-  :group 'modus-themes
-  :package-version '(modus-themes . "2.3.0")
-  :version "29.1"
-  :type '(set :tag "Properties" :greedy t
-              (const :tag "Two-dimensional button" flat)
-              (const :tag "Accented background instead of gray" accented)
-              (const :tag "Reduce overall coloration" faint)
-              (const :tag "Proportionately spaced font (variable-pitch)" 
variable-pitch)
-              (const :tag "Underline instead of a box effect" underline)
-              (const :tag "Apply box button style to generic widget faces" 
all-buttons)
-              (choice :tag "Font weight (must be supported by the typeface)"
-                      (const :tag "Thin" thin)
-                      (const :tag "Ultra-light" ultralight)
-                      (const :tag "Extra-light" extralight)
-                      (const :tag "Light" light)
-                      (const :tag "Semi-light" semilight)
-                      (const :tag "Regular (default)" nil)
-                      (const :tag "Medium" medium)
-                      (const :tag "Bold" bold)
-                      (const :tag "Semi-bold" semibold)
-                      (const :tag "Extra-bold" extrabold)
-                      (const :tag "Ultra-bold" ultrabold))
-              (radio :tag "Height"
-                     (float :tag "Floating point to adjust height by")
-                     (cons :tag "Cons cell of `(height . FLOAT)'"
-                           (const :tag "The `height' key (constant)" height)
-                           (float :tag "Floating point"))))
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Box buttons"))
+(defalias 'modus-themes-preview-colors-current 
'modus-themes-list-colors-current
+  "Alias of `modus-themes-list-colors-current'.")
 
 
 
-;;; Internal functions
+;;;; Internal functions
 
 (defun modus-themes--warn (option)
   "Warn that OPTION has changed."
@@ -2890,51 +1226,6 @@ list given LIST-PRED, using DEFAULT as a fallback."
       (car val)
     val))
 
-(defun modus-themes--palette (theme)
-  "Return color palette for Modus theme THEME.
-THEME is a symbol, either `modus-operandi' or `modus-vivendi'."
-  (pcase theme
-    ('modus-operandi
-     (append modus-themes-operandi-color-overrides
-             modus-themes-operandi-colors))
-    ('modus-vivendi
-     (append modus-themes-vivendi-color-overrides
-             modus-themes-vivendi-colors))
-    (_theme
-     (error "'%s' is not a Modus theme" theme))))
-
-(defvar modus-themes-faces)
-(defvar modus-themes-custom-variables)
-
-(defmacro modus-themes-theme (name)
-  "Bind NAME's color palette around face specs and variables.
-
-NAME should be the proper name of a Modus theme, either
-`modus-operandi' or `modus-vivendi'.
-
-Face specifications are passed to `custom-theme-set-faces'.
-While variables are handled by `custom-theme-set-variables'.
-Those are stored in `modus-themes-faces' and
-`modus-themes-custom-variables' respectively."
-  (declare (indent 0))
-  (let ((palette-sym (gensym))
-        (colors (mapcar #'car modus-themes-operandi-colors)))
-    `(let* ((class '((class color) (min-colors 89)))
-            (,palette-sym (modus-themes--palette ',name))
-            ,@(mapcar (lambda (color)
-                        (list color `(alist-get ',color ,palette-sym)))
-                      colors))
-       (custom-theme-set-faces ',name ,@modus-themes-faces)
-       (custom-theme-set-variables ',name ,@modus-themes-custom-variables))))
-
-(defun modus-themes--current-theme ()
-  "Return current modus theme."
-  (car
-   (seq-filter
-    (lambda (theme)
-      (string-match-p "^modus" (symbol-name theme)))
-    custom-enabled-themes)))
-
 ;; Helper functions that are meant to ease the implementation of the
 ;; above customization variables.
 (defun modus-themes--bold-weight ()
@@ -2957,145 +1248,13 @@ Those are stored in `modus-themes-faces' and
   (when modus-themes-variable-pitch-ui
     (list :inherit 'variable-pitch)))
 
-(defun modus-themes--fringe (mainbg subtlebg intensebg)
-  "Conditional use of background colors for fringes.
-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))
-    (_ (list :background mainbg))))
-
-(defun modus-themes--line-numbers (mainfg mainbg altfg &optional altbg)
-  "Conditional use of colors for line numbers.
-MAINBG and MAINFG are the default colors.  ALTFG is a color that
-combines with the theme's primary background (white/black)."
-  (if modus-themes-subtle-line-numbers
-      (list :background (or altbg 'unspecified) :foreground altfg)
-    (list :background mainbg :foreground mainfg)))
-
-(defun modus-themes--markup (mainfg intensefg subtlebg intensebg)
-  "Conditional use of colors for markup in Org and others.
-MAINFG is the default foreground.  SUBTLEBG is a gray background.
-INTENSEBG is a colorful background for use with the main
-foreground.  INTENSEFG is an alternative to the default."
-  (let ((properties modus-themes-markup))
-    (list
-     :inherit
-     (cond
-      ((and (memq 'bold properties)
-            (memq 'italic properties))
-       (list 'bold-italic 'modus-themes-fixed-pitch))
-      ((memq 'italic properties)
-       (list 'italic 'modus-themes-fixed-pitch))
-      ((memq 'bold properties)
-       (list 'bold 'modus-themes-fixed-pitch))
-      (t 'modus-themes-fixed-pitch))
-     :background
-     (cond
-      ((and (memq 'background properties)
-            (memq 'intense properties))
-       intensebg)
-      ((memq 'background properties)
-       subtlebg)
-      (t
-       'unspecified))
-     :foreground
-     (cond
-      ((and (memq 'background properties)
-            (memq 'intense properties))
-       mainfg)
-      ((memq 'intense properties)
-       intensefg)
-      (t
-       mainfg)))))
-
-(defun modus-themes--lang-check (underline subtlefg intensefg intensefg-alt 
subtlebg intensebg faintfg)
-  "Conditional use of foreground colors for language checkers.
-UNDERLINE is a color-code value for the affected text's underline
-property.  SUBTLEFG and INTENSEFG follow the same color-coding
-pattern and represent a value that is faint or vibrant
-respectively.  INTENSEFG-ALT is used when the intensity is high.
-SUBTLEBG and INTENSEBG are color-coded background colors that
-differ in overall intensity.  FAINTFG is a nuanced color."
-  (let ((properties (modus-themes--list-or-warn 'modus-themes-lang-checkers)))
-    (list :underline
-          (list :color
-                (if (memq 'faint properties)
-                    faintfg underline)
-                :style
-                (if (memq 'straight-underline properties)
-                    'line 'wave))
-          :background
-          (cond
-           ((and (memq 'background properties)
-                 (memq 'faint properties))
-            subtlebg)
-           ((and (memq 'background properties)
-                 (memq 'intense properties))
-            intensebg)
-           ((memq 'background properties)
-            subtlebg)
-           ('unspecified))
-          :foreground
-          (cond
-           ((and (memq 'faint properties)
-                 (memq 'text-also properties))
-            faintfg)
-           ((and (memq 'background properties)
-                 (memq 'intense properties))
-            intensefg-alt)
-           ((memq 'intense properties)
-            intensefg)
-           ((memq 'text-also properties)
-            subtlefg)
-           ('unspecified)))))
-
-(defun modus-themes--prompt (mainfg intensefg grayfg subtlebg intensebg 
intensebg-fg subtlebggray intensebggray)
+(defun modus-themes--prompt (fg bg)
   "Conditional use of colors for text prompt faces.
-MAINFG is the prompt's standard foreground.  INTENSEFG is a more
-prominent alternative to the main foreground, while GRAYFG is a
-less luminant shade of gray.
-
-SUBTLEBG is a subtle accented background that works with either
-MAINFG or INTENSEFG.
-
-INTENSEBG is a more pronounced accented background color that
-should be combinable with INTENSEBG-FG.
-
-SUBTLEBGGRAY and INTENSEBGGRAY are background values.  The former
-can be combined with GRAYFG, while the latter only works with the
-theme's fallback text color."
-  (let ((properties (modus-themes--list-or-warn 'modus-themes-prompts)))
-    (list :foreground
-          (cond
-           ((and (memq 'gray properties)
-                 (memq 'intense properties))
-            'unspecified)
-           ((memq 'gray properties)
-            grayfg)
-           ((and (memq 'background properties)
-                 (memq 'intense properties))
-            intensebg-fg)
-           ((memq 'intense properties)
-            intensefg)
-           (mainfg))
-          :background
-          (cond
-           ((and (memq 'gray properties)
-                 (memq 'background properties)
-                 (memq 'intense properties))
-            intensebggray)
-           ((and (memq 'gray properties)
-                 (memq 'background properties))
-            subtlebggray)
-           ((and (memq 'background properties)
-                 (memq 'intense properties))
-            intensebg)
-           ((memq 'background properties)
-            subtlebg)
-           ('unspecified))
-          :inherit
+FG is the prompt's standard foreground.  BG is a background
+color that is combined with FG-FOR-BG."
+  (let* ((properties (modus-themes--list-or-warn 'modus-themes-prompts))
+         (weight (modus-themes--weight properties)))
+    (list :inherit
           (cond
            ((and (memq 'bold properties)
                  (memq 'italic properties))
@@ -3104,104 +1263,16 @@ theme's fallback text color."
             'italic)
            ((memq 'bold properties)
             'bold)
-           ('unspecified)))))
-
-(defun modus-themes--paren (normalbg intensebg)
-  "Conditional use of intense colors for matching parentheses.
-NORMALBG should be the special palette color bg-paren-match or
-something similar.  INTENSEBG must be easier to discern next to
-other backgrounds, such as the special palette color
-bg-paren-match-intense."
-  (let ((properties (modus-themes--list-or-warn 'modus-themes-paren-match)))
-    (list :inherit
-          (if (memq 'bold properties)
-              'bold
-            'unspecified)
-          :background
-          (if (memq 'intense properties)
-              intensebg
-            normalbg)
-          :underline
-          (if (memq 'underline properties)
-              t
-            nil))))
-
-(defun modus-themes--syntax-foreground (fg faint)
-  "Apply foreground value to code syntax.
-FG is the default.  FAINT is typically the same color in its
-desaturated version."
-  (let ((properties (modus-themes--list-or-warn 'modus-themes-syntax)))
-    (list :foreground
-          (cond
-           ((memq 'faint properties)
-            faint)
-           (fg)))))
-
-(defun modus-themes--syntax-extra (fg faint alt &optional faint-alt)
-  "Apply foreground value to code syntax.
-FG is the default.  FAINT is typically the same color in its
-desaturated version.  ALT is another hue while optional FAINT-ALT
-is its subtle alternative."
-  (let ((properties (modus-themes--list-or-warn 'modus-themes-syntax)))
-    (list :foreground
-          (cond
-           ((and (memq 'alt-syntax properties)
-                 (memq 'faint properties))
-            (or faint-alt alt))
-           ((memq 'faint properties)
-            faint)
-           ((memq 'alt-syntax properties)
-            alt)
-           (fg)))))
-
-(defun modus-themes--syntax-string (fg faint green alt &optional faint-green 
faint-alt)
-  "Apply foreground value to strings in code syntax.
-FG is the default.  FAINT is typically the same color in its
-desaturated version.  GREEN is a color variant in that side of
-the spectrum.  ALT is another hue.  Optional FAINT-GREEN is a
-subtle alternative to GREEN.  Optional FAINT-ALT is a subtle
-alternative to ALT."
-  (let ((properties (modus-themes--list-or-warn 'modus-themes-syntax)))
-    (list :foreground
-          (cond
-           ((and (memq 'faint properties)
-                 (memq 'green-strings properties))
-            (or faint-green green))
-           ((and (memq 'alt-syntax properties)
-                 (memq 'faint properties))
-            (or faint-alt faint))
-           ((memq 'faint properties)
-            faint)
-           ((memq 'green-strings properties)
-            green)
-           ((memq 'alt-syntax properties)
-            alt)
-           (fg)))))
-
-(defun modus-themes--syntax-comment (fg yellow &optional faint-yellow faint)
-  "Apply foreground value to strings in code syntax.
-FG is the default.  YELLOW is a color variant of that name while
-optional FAINT-YELLOW is its subtle variant.  Optional FAINT is
-an alternative to the default value."
-  (let ((properties (modus-themes--list-or-warn 'modus-themes-syntax)))
-    (list :foreground
-          (cond
-           ((and (memq 'faint properties)
-                 (memq 'yellow-comments properties))
-            (or faint-yellow yellow))
-           ((and (memq 'alt-syntax properties)
-                 (memq 'yellow-comments properties)
-                 (not (memq 'green-strings properties)))
-            yellow)
-           ((memq 'yellow-comments properties)
-            yellow)
-           ((memq 'faint properties)
-            (or faint fg))
-           (fg)))))
-
-(defun modus-themes--key-cdr (key alist)
-  "Get cdr of KEY in ALIST."
-  (cdr (assoc key alist)))
+           ('unspecified))
+          :background bg
+          :foreground fg
+          :weight
+          ;; If we have `bold' specifically, we inherit the face of
+          ;; the same name.  This allows the user to customise that
+          ;; face, such as to change its font family.
+          (if (and weight (not (eq weight 'bold)))
+              weight
+            'unspecified))))
 
 (defconst modus-themes-weights
   '( thin ultralight extralight light semilight regular medium
@@ -3209,29 +1280,23 @@ an alternative to the default value."
   "List of font weights.")
 
 (defun modus-themes--weight (list)
-  "Search for `modus-themes--heading' weight in LIST."
+  "Search for `modus-themes-weights' weight in LIST."
   (catch 'found
     (dolist (elt list)
       (when (memq elt modus-themes-weights)
         (throw 'found elt)))))
 
-(defun modus-themes--heading (level fg fg-alt bg bg-gray border)
+(defun modus-themes--heading (level fg &optional bg ol)
   "Conditional styles for `modus-themes-headings'.
 
 LEVEL is the heading's position in their order.  FG is the
-default text color.  FG-ALT is an accented, more saturated value
-than the default.  BG is a nuanced, typically accented,
-background that can work well with either of the foreground
-values.  BG-GRAY is a gray background.  BORDER is a color value
-that combines well with the background and foreground."
-  (let* ((key (modus-themes--key-cdr level modus-themes-headings))
-         (style (or key (modus-themes--key-cdr t modus-themes-headings)))
+default text color.  Optional BG is an appropriate background.
+Optional OL is the color of an overline."
+  (let* ((key (alist-get level modus-themes-headings))
+         (style (or key (alist-get t modus-themes-headings)))
          (style-listp (listp style))
          (properties style)
          (var (when (memq 'variable-pitch properties) 'variable-pitch))
-         (varbold (if var
-                      (append (list 'bold) (list var))
-                    'bold))
          (weight (when style-listp (modus-themes--weight style))))
     (list :inherit
           (cond
@@ -3239,336 +1304,28 @@ that combines well with the background and foreground."
            ;; deprecate a variable's value.
            ((or weight (memq 'no-bold properties))
             var)
-           (varbold))
-          :background
-          (cond
-           ((and (memq 'monochrome properties)
-                 (memq 'background properties))
-            bg-gray)
-           ((memq 'background properties)
-            bg)
-           ('unspecified))
-          :foreground
-          (cond
-           ((memq 'monochrome properties)
-            'unspecified)
-           ((memq 'rainbow properties)
-            fg-alt)
-           (fg))
-          :height
-          (modus-themes--property-lookup properties 'height #'floatp 
'unspecified)
-          :weight
-          (or weight 'unspecified)
-          :overline
-          (if (memq 'overline properties)
-              border
-            'unspecified))))
-
-(defun modus-themes--agenda-structure (fg)
-  "Control the style of the Org agenda structure.
-FG is the foreground color to use."
-  (let* ((properties (modus-themes--key-cdr 'header-block 
modus-themes-org-agenda))
-         (weight (modus-themes--weight properties)))
-    (list :inherit
-          (cond
-           ((and weight (memq 'variable-pitch properties))
-            'variable-pitch)
-           (weight 'unspecified)
-           ((memq 'variable-pitch properties)
-            (list 'bold 'variable-pitch))
+           (var (append (list 'bold) (list var)))
            ('bold))
-          :weight
-          (or weight 'unspecified)
-          :height
-          (cond ((memq 'no-scale properties) 'unspecified)
-                ((modus-themes--property-lookup properties 'height #'floatp 
1.15)))
-          :foreground fg)))
-
-(defun modus-themes--agenda-date (defaultfg grayscalefg &optional workaholicfg 
grayscaleworkaholicfg bg bold ul)
-  "Control the style of date headings in Org agenda buffers.
-DEFAULTFG is the original accent color for the foreground.
-GRAYSCALEFG is a neutral color.  Optional WORKAHOLICFG and
-GRAYSCALEWORKAHOLICFG are alternative foreground colors.
-Optional BG is a background color.  Optional BOLD applies a bold
-weight.  Optional UL applies an underline."
-  (let ((properties (modus-themes--key-cdr 'header-date 
modus-themes-org-agenda)))
-    (list :inherit
-          (cond
-           ((or (memq 'bold-all properties)
-                (and bold (memq 'bold-today properties)))
-            'bold)
-           (t
-            'unspecified))
-          :background
-          (cond
-           ((memq 'underline-today properties)
-            'unspecified)
-           ((or bg 'unspecified)))
-          :foreground
-          (cond
-           ((and (memq 'grayscale properties)
-                 (memq 'workaholic properties))
-            (or grayscaleworkaholicfg grayscalefg))
-           ((memq 'grayscale properties)
-            grayscalefg)
-           ((memq 'workaholic properties)
-            (or workaholicfg defaultfg))
-           (t
-            defaultfg))
-          :height
-          (modus-themes--property-lookup properties 'height #'floatp 
'unspecified)
-          :underline
-          (if (and ul (memq 'underline-today properties))
-              t
-            'unspecified))))
-
-(defun modus-themes--agenda-event (fg-accent &optional varied)
-  "Control the style of the Org agenda events.
-FG-ACCENT is the accent color to use.  Optional VARIED is a
-toggle to behave in accordance with the semantics of the `varied'
-property that the `event' key accepts in
-`modus-themes-org-agenda'."
-  (let ((properties (modus-themes--key-cdr 'event modus-themes-org-agenda)))
-    (list :foreground
-          (cond
-           ((or (and (memq 'varied properties) varied)
-                (and (memq 'accented properties)
-                     (memq 'varied properties)
-                     varied))
-            'unspecified)
-           ((memq 'accented properties)
-            fg-accent)
-           ('unspecified))
-          :inherit
-          (cond
-           ((and (memq 'italic properties)
-                 (memq 'varied properties)
-                 varied)
-            '(shadow italic))
-           ((and (memq 'accented properties)
-                 (memq 'varied properties)
-                 varied)
-            'shadow)
-           ((or (and (memq 'varied properties) varied)
-                (and (memq 'italic properties) varied))
-            '(shadow italic))
-           ((and (memq 'italic properties)
-                 (not (memq 'varied properties)))
-            '(shadow italic))
-           ('shadow)))))
-
-(defun modus-themes--agenda-scheduled (defaultfg uniformfg rainbowfg)
-  "Control the style of the Org agenda scheduled tasks.
-DEFAULTFG is an accented foreground color that is meant to
-differentiate between past or present and future tasks.
-UNIFORMFG is a more subtle color that eliminates the color coding
-for scheduled tasks.  RAINBOWFG is a prominent accent value that
-clearly distinguishes past, present, future tasks."
-  (pcase (modus-themes--key-cdr 'scheduled modus-themes-org-agenda)
-    ('uniform (list :foreground uniformfg))
-    ('rainbow (list :foreground rainbowfg))
-    (_ (list :foreground defaultfg))))
-
-(defun modus-themes--agenda-habit (default traffic simple &optional default-d 
traffic-d simple-d)
-  "Specify background values for `modus-themes-org-agenda' habits.
-DEFAULT is the original foregrounc color.  TRAFFIC is to be used
-when the traffic-light style is applied, while SIMPLE corresponds
-to the simplified style.
-
-Optional DEFAULT-D, TRAFFIC-D, SIMPLE-D are alternatives to the
-main colors, meant for dopia when `modus-themes-deuteranopia' is
-non-nil."
-  (let ((habit (modus-themes--key-cdr 'habit modus-themes-org-agenda)))
-    (cond
-     ((and modus-themes-deuteranopia (null habit))
-      (list :background (or default-d default)))
-     ((and modus-themes-deuteranopia (eq habit 'traffic-light))
-      (list :background (or traffic-d traffic)))
-     ((and modus-themes-deuteranopia (eq habit 'simplified))
-      (list :background (or simple-d simple)))
-     (t
-      (pcase habit
-        ('traffic-light (list :background traffic))
-        ('simplified (list :background simple))
-        (_ (list :background default)))))))
-
-(defun modus-themes--org-block (bgblk fgdefault &optional fgblk)
-  "Conditionally set the background of Org blocks.
-BGBLK applies to a distinct neutral background.  Else blocks have
-no background of their own (the default), so they look the same
-as the rest of the buffer.  FGDEFAULT is used when no distinct
-background is present.  While optional FGBLK specifies a
-foreground value that can be combined with BGBLK.
-
-`modus-themes-org-blocks' also accepts `tinted-background' (alias
-`rainbow') as a value which applies to `org-src-block-faces' (see
-the theme's source code)."
-  (if (or (eq modus-themes-org-blocks 'gray-background)
-          (eq modus-themes-org-blocks 'grayscale)
-          (eq modus-themes-org-blocks 'greyscale))
-      (list :background bgblk :foreground (or fgblk fgdefault) :extend t)
-    (list :background 'unspecified :foreground fgdefault)))
-
-(defun modus-themes--org-block-delim (bgaccent fgaccent bg fg)
-  "Conditionally set the styles of Org block delimiters.
-BG, FG, BGACCENT, FGACCENT apply a background and foreground
-color respectively.
-
-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 `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
-set to `rainbow'."
-  (pcase modus-themes-org-blocks
-    ('gray-background (list :background bg :foreground fg :extend t))
-    ('grayscale (list :background bg :foreground fg :extend t))
-    ('greyscale (list :background bg :foreground fg :extend t))
-    ('tinted-background (list :background bgaccent :foreground fgaccent 
:extend nil))
-    ('rainbow (list :background bgaccent :foreground fgaccent :extend nil))
-    (_ (list :foreground fg :extend nil))))
-
-(defun modus-themes--mode-line-attrs
-    (fg bg fg-alt bg-alt fg-accent bg-accent border border-3d &optional 
alt-style fg-distant)
-  "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 mode line or a `moody' compliant
-one.  FG-ACCENT and BG-ACCENT are used for all variants.  BORDER
-applies to all permutations of the mode line, 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.
-
-Optional FG-DISTANT should be close to the main background
-values.  It is intended to be used as a distant-foreground
-property."
-  (let* ((properties (modus-themes--list-or-warn 'modus-themes-mode-line))
-         (padding (modus-themes--property-lookup properties 'padding #'natnump 
1))
-         (height (modus-themes--property-lookup properties 'height #'floatp 
'unspecified))
-         (padded (> padding 1))
-         (base (cond ((memq 'accented properties)
-                      (cons fg-accent bg-accent))
-                     ((and (or (memq 'moody properties)
-                               (memq '3d properties))
-                           (not (memq 'borderless properties)))
-                      (cons fg-alt bg-alt))
-                     ((cons fg bg))))
-         (line (cond ((not (or (memq 'moody properties) padded))
-                      'unspecified)
-                     ((and (not (memq 'moody properties))
-                           padded
-                           (memq 'borderless properties))
-                      'unspecified)
-                     ((and (memq 'borderless properties)
-                           (memq 'accented properties))
-                      bg-accent)
-                     ((memq 'borderless properties)
-                      bg)
-                     (border))))
-    (list :foreground (car base)
-          :background (cdr base)
-          :height height
-          :box
-          (cond ((memq 'moody properties)
-                 'unspecified)
-                ((and (memq '3d properties) padded)
-                 (list :line-width padding
-                       :color
-                       (cond ((and (memq 'accented properties)
-                                   (memq 'borderless properties))
-                              bg-accent)
-                             ((or (memq 'accented properties)
-                                  (memq 'borderless properties))
-                              bg)
-                             (bg-alt))
-                       :style (when alt-style 'released-button)))
-                ((and (memq 'accented properties) padded)
-                 (list :line-width padding :color bg-accent))
-                ((memq '3d properties)
-                 (list :line-width padding
-                       :color
-                       (cond ((and (memq 'accented properties)
-                                   (memq 'borderless properties))
-                              bg-accent)
-                             ((memq 'borderless properties) bg)
-                             (border-3d))
-                       :style (when alt-style 'released-button)))
-                ((and (memq 'accented properties)
-                      (memq 'borderless properties))
-                 (list :line-width padding :color bg-accent))
-                ((or (memq 'borderless properties) padded)
-                 (list :line-width padding :color bg))
-                (border))
-          :overline line
-          :underline line
-          :distant-foreground
-          (if (memq 'moody properties)
-              fg-distant
-            'unspecified))))
-
-;; Basically this is just for the keycast key indicator.
-(defun modus-themes--mode-line-padded-box (color)
-  "Set padding of mode line box attribute with given COLOR."
-  (list :box (list :color color
-                   :line-width
-                   (or (cl-loop
-                        for x in modus-themes-mode-line
-                        if (natnump x) return x)
-                       1))))
-
-(defun modus-themes--diff (mainbg mainfg altbg altfg &optional deubg deufg 
deualtbg deualtfg bg-only-fg)
-  "Color combinations for `modus-themes-diffs'.
-
-MAINBG must be one of the dedicated backgrounds for diffs while
-MAINFG must be the same for the foreground.
-
-ALTBG needs to be a slightly accented background that is meant to
-be combined with ALTFG.  Both must be less intense than MAINBG
-and MAINFG respectively.
-
-DEUBG and DEUFG must be combinations of colors that account for
-red-green color defficiency (deuteranopia).  They are the
-equivalent of MAINBG and MAINFG.
-
-DEUALTBG and DEUALTFG are the equivalent of ALTBG and ALTFG for
-deuteranopia.
-
-Optional non-nil BG-ONLY-FG applies ALTFG else leaves the
-foreground unspecified."
-  (if modus-themes-deuteranopia
-      (pcase modus-themes-diffs
-        ('desaturated (list :background (or deualtbg altbg) :foreground (or 
deualtfg altfg)))
-        ('bg-only (list :background (or deualtbg altbg) :foreground (if 
bg-only-fg (or deualtfg altfg) 'unspecified)))
-        (_ (list :background (or deubg mainbg) :foreground (or deufg mainfg))))
-    (pcase modus-themes-diffs
-      ('desaturated (list :background altbg :foreground altfg))
-      ('bg-only (list :background altbg :foreground (if bg-only-fg altfg 
'unspecified)))
-      (_ (list :background mainbg :foreground mainfg)))))
-
-(defun modus-themes--deuteran (deuteran main)
-  "Determine whether to color-code success as DEUTERAN or MAIN."
-  (if modus-themes-deuteranopia
-      (list deuteran)
-    (list main)))
-
-(defun modus-themes--completion-line (key bg fg bgintense fgintense &optional 
bgaccent bgaccentintense)
-  "Styles for `modus-themes-completions'.
-KEY is the key of a cons cell.  BG and FG are the main colors.
-BGINTENSE works with the main foreground.  FGINTENSE works on its
-own.  BGACCENT and BGACCENTINTENSE are colorful variants of the
-other backgrounds."
+          :background (or bg 'unspecified)
+          :foreground fg
+          :overline (or ol 'unspecified)
+          :height (modus-themes--property-lookup properties 'height #'floatp 
'unspecified)
+          :weight (or weight 'unspecified))))
+
+(defun modus-themes--org-block (fg bg)
+  "Conditionally set the FG and BG of Org blocks."
+  (let ((gray (or (eq modus-themes-org-blocks 'gray-background)
+                  (eq modus-themes-org-blocks 'grayscale) ; for backward 
compatibility
+                  (eq modus-themes-org-blocks 'greyscale))))
+    (list :inherit 'modus-themes-fixed-pitch
+          :background (if gray bg 'unspecified)
+          :foreground fg
+          :extend (if gray t 'unspecified))))
+
+(defun modus-themes--completion-line (bg)
+  "Styles for `modus-themes-completions' with BG as the background."
   (let* ((var (modus-themes--list-or-warn 'modus-themes-completions))
-         (properties (or (alist-get key var) (alist-get t var)))
-         (popup (eq key 'popup))
-         (selection (eq key 'selection))
-         (line (or popup selection))
-         (text (memq 'text-also properties))
-         (accented (memq 'accented properties))
-         (intense (memq 'intense properties))
+         (properties (or (alist-get 'selection var) (alist-get t var)))
          (italic (memq 'italic properties))
          (weight (modus-themes--weight properties))
          (bold (when (and weight (eq weight 'bold)) 'bold)))
@@ -3581,35 +1338,18 @@ other backgrounds."
        'unspecified)
       (italic 'bold-italic)
       ('bold))
-     :background
-     (cond
-      ((and accented intense line)
-       bgaccentintense)
-      ((and accented line)
-       bgaccent)
-      (intense bgintense)
-      (bg))
-     :foreground
-     (cond
-      ((and line text intense)
-       fgintense)
-      ((and line text)
-       fg)
-      ('unspecified))
+     :background bg
+     :foreground 'unspecified
      :underline
      (if (memq 'underline properties) t 'unspecified)
      :weight
      (if (and weight (null bold)) weight 'unspecified))))
 
-(defun modus-themes--completion-match (key bg fg bgintense fgintense)
+(defun modus-themes--completion-match (fg bg)
   "Styles for `modus-themes-completions'.
-KEY is the key of a cons cell.  BG and FG are the main colors.
-BGINTENSE works with the main foreground.  FGINTENSE works on its
-own."
+FG and BG are the main colors."
   (let* ((var (modus-themes--list-or-warn 'modus-themes-completions))
-         (properties (or (alist-get key var) (alist-get t var)))
-         (background (memq 'background properties))
-         (intense (memq 'intense properties))
+         (properties (or (alist-get 'matches var) (alist-get t var)))
          (italic (memq 'italic properties))
          (weight (modus-themes--weight properties))
          (bold (when (and weight (eq weight 'bold)) 'bold)))
@@ -3622,443 +1362,13 @@ own."
        'unspecified)
       (italic 'bold-italic)
       ('bold))
-     :background
-     (cond
-      ((and background intense)
-       bgintense)
-      (background bg)
-      ('unspecified))
-     :foreground
-     (cond
-      ((and background intense)
-       'unspecified)
-      (background fg)
-      (intense fgintense)
-      (fg))
+     :background bg
+     :foreground fg
      :underline
      (if (memq 'underline properties) t 'unspecified)
      :weight
      (if (and weight (null bold)) weight 'unspecified))))
 
-(defun modus-themes--link (fg fgfaint underline bg bgneutral)
-  "Conditional application of link styles.
-FG is the link's default color for its text and underline
-property.  FGFAINT is a desaturated color for the text and
-underline.  UNDERLINE is a gray color only for the undeline.  BG
-is a background color and BGNEUTRAL is its fallback value."
-  (let ((properties (modus-themes--list-or-warn 'modus-themes-links)))
-    (list :inherit
-          (cond
-           ((and (memq 'bold properties)
-                 (memq 'italic properties))
-            'bold-italic)
-           ((memq 'italic properties)
-            'italic)
-           ((memq 'bold properties)
-            'bold)
-           ('unspecified))
-          :background
-          (cond
-           ((and (memq 'no-color properties)
-                 (memq 'no-underline properties))
-            bgneutral)
-           ((memq 'background properties)
-            bg)
-           ('unspecified))
-          :foreground
-          (cond
-           ((memq 'no-color properties)
-            'unspecified)
-           ((memq 'faint properties)
-            fgfaint)
-           (fg))
-          :underline
-          (cond
-           ((memq 'no-underline properties)
-            'unspecified)
-           ((memq 'neutral-underline properties)
-            underline)
-           (t)))))
-
-(defun modus-themes--link-color (fg fgfaint &optional neutralfg)
-  "Extend `modus-themes--link'.
-FG is the main accented foreground.  FGFAINT is also accented,
-yet desaturated.  Optional NEUTRALFG is a gray value."
-  (let ((properties (modus-themes--list-or-warn 'modus-themes-links)))
-    (list :foreground
-          (cond
-           ((memq 'no-color properties)
-            (or neutralfg 'unspecified))
-           ((memq 'faint properties)
-            fgfaint)
-           (fg))
-          :underline
-          (cond
-           ((memq 'no-underline properties)
-            'unspecified)
-           ((memq 'neutral-underline properties)
-            (or neutralfg 'unspecified))
-           (t)))))
-
-(defun modus-themes--region (bg fg bgsubtle bgaccent bgaccentsubtle)
-  "Apply `modus-themes-region' styles.
-
-BG and FG are the main values that are used by default.  BGSUBTLE
-is a subtle background value that can be combined with all colors
-used to fontify text and code syntax.  BGACCENT is a colored
-background that combines well with FG.  BGACCENTSUBTLE can be
-combined with all colors used to fontify text."
-  (let ((properties (modus-themes--list-or-warn 'modus-themes-region)))
-    (list :background
-          (cond
-           ((and (memq 'accented properties)
-                 (memq 'bg-only properties))
-            bgaccentsubtle)
-           ((memq 'accented properties)
-            bgaccent)
-           ((memq 'bg-only properties)
-            bgsubtle)
-           (bg))
-          :foreground
-          (cond
-           ((and (memq 'accented properties)
-                 (memq 'bg-only properties))
-            'unspecified)
-           ((memq 'bg-only properties)
-            'unspecified)
-           (fg))
-          :extend
-          (cond
-           ((memq 'no-extend properties)
-            nil)
-           (t)))))
-
-(defun modus-themes--hl-line
-    (bgdefault bgintense bgaccent bgaccentsubtle lineneutral lineaccent 
lineneutralintense lineaccentintense)
-  "Apply `modus-themes-hl-line' styles.
-
-BGDEFAULT is a subtle neutral background.  BGINTENSE is like the
-default, but more prominent.  BGACCENT is a prominent accented
-background, while BGACCENTSUBTLE is more subtle.  LINENEUTRAL and
-LINEACCENT are color values that can remain distinct against the
-buffer's possible backgrounds: the former is neutral, the latter
-is accented.  LINENEUTRALINTENSE and LINEACCENTINTENSE are their
-more prominent alternatives."
-  (let ((properties (modus-themes--list-or-warn 'modus-themes-hl-line)))
-    (list :background
-          (cond
-           ((and (memq 'intense properties)
-                 (memq 'accented properties))
-            bgaccent)
-           ((memq 'accented properties)
-            bgaccentsubtle)
-           ((memq 'intense properties)
-            bgintense)
-           (bgdefault))
-          :underline
-          (cond
-           ((and (memq 'intense properties)
-                 (memq 'accented properties)
-                 (memq 'underline properties))
-            lineaccentintense)
-           ((and (memq 'accented properties)
-                 (memq 'underline properties))
-            lineaccent)
-           ((and (memq 'intense properties)
-                 (memq 'underline properties))
-            lineneutralintense)
-           ((or (memq 'no-background properties)
-                (memq 'underline properties))
-            lineneutral)
-           ('unspecified)))))
-
-(defun modus-themes--mail-cite (mainfg intensefg subtlefg)
-  "Combinations for `modus-themes-mail-citations'.
-
-MAINFG is an accented foreground value.  SUBTLEFG is its
-desaturated counterpart.  INTENSEFG is a more saturated variant."
-  (pcase modus-themes-mail-citations
-    ('monochrome (list :inherit 'shadow))
-    ('intense (list :foreground intensefg))
-    ('faint (list :foreground subtlefg))
-    ('desaturated (list :foreground subtlefg))
-    (_ (list :foreground mainfg))))
-
-(defun modus-themes--tab (bg &optional bgaccent fg fgaccent box-p bold-p var-p)
-  "Helper function for tabs.
-BG is the default background, while BGACCENT is its more colorful
-alternative.  Optional FG is a foreground color that combines
-with BG.  Same principle FGACCENT.
-
-BOX-P and BOLD-P determine the use of a box property and the
-application of a bold weight, respectively.  VAR-P controls the
-application of a variable-pitch font."
-  (let ((background (if modus-themes-tabs-accented (or bgaccent bg) bg))
-        (foreground (if modus-themes-tabs-accented (or fgaccent fg) fg)))
-    (list
-     :inherit (cond
-               ((and bold-p var-p)
-                (if modus-themes-variable-pitch-ui
-                    '(variable-pitch bold)
-                  '(bold)))
-               (bold-p 'bold)
-               (var-p (when modus-themes-variable-pitch-ui 'variable-pitch))
-               ('unspecified))
-     :background background
-     :foreground (or foreground 'unspecified)
-     :box (if box-p (list :line-width 2 :color background) 'unspecified))))
-
-(defun modus-themes--button (bg bgfaint bgaccent bgaccentfaint border 
&optional pressed-button-p)
-  "Apply `modus-themes-box-buttons' styles.
-
-BG is the main background.  BGFAINT is its subtle alternative.
-BGACCENT is its accented variant and BGACCENTFAINT is the same
-but less intense.  BORDER is the color around the box.
-
-When optional PRESSED-BUTTON-P is non-nil, the box uses the
-pressed button style, else the released button."
-  (let* ((properties modus-themes-box-buttons)
-         (weight (modus-themes--weight properties)))
-    (list :inherit
-          (cond
-           ((and (memq 'variable-pitch properties)
-                 (eq weight 'bold))
-            (list 'bold 'variable-pitch))
-           ((memq 'variable-pitch properties)
-            'variable-pitch)
-           ((eq weight 'bold)
-            'bold)
-           ('unspecified))
-          :background
-          (cond
-           ((and (memq 'accented properties)
-                 (memq 'faint properties)
-                 bgaccentfaint))
-           ((memq 'faint properties)
-            bgfaint)
-           ((memq 'accented properties)
-            bgaccent)
-           (bg))
-          :box
-          (cond
-           ((memq 'underline properties)
-            'unspecified)
-           ((memq 'flat properties)
-            (list :line-width -1 :color border))
-           ((list :line-width -1
-                  :style (if pressed-button-p
-                             'pressed-button
-                           'released-button)
-                  :color border)))
-          :weight
-          (cond
-           ((eq weight 'bold)
-            'unspecified) ; we :inherit the `bold' face above
-           (weight weight)
-           ('unspecified))
-          :height
-          (modus-themes--property-lookup properties 'height #'floatp 
'unspecified)
-          :underline
-          (if (memq 'underline properties)
-              t
-            'unspecified))))
-
-
-
-;;;; Utilities for DIY users
-
-;;;;; List colors (a variant of M-x list-colors-display)
-
-(defun modus-themes--list-colors-render (buffer theme &rest _)
-  "Render colors in BUFFER from THEME.
-Routine for `modus-themes-list-colors'."
-  (let ((palette (seq-uniq (modus-themes--palette theme)
-                           (lambda (x y)
-                             (eq (car x) (car y)))))
-        (current-buffer buffer)
-        (current-theme theme))
-    (with-help-window buffer
-      (with-current-buffer standard-output
-        (erase-buffer)
-        (when (<= (display-color-cells) 256)
-          (insert (concat "Your display terminal may not render all color 
previews!\n"
-                          "It seems to only support <= 256 colors.\n\n"))
-          (put-text-property (point-min) (point) 'face 'warning))
-        ;; We need this to properly render the first line.
-        (insert " ")
-        (dolist (cell palette)
-          (let* ((name (car cell))
-                 (color (cdr cell))
-                 (fg (readable-foreground-color color))
-                 (pad (make-string 5 ?\s)))
-            (let ((old-point (point)))
-              (insert (format "%s %s" color pad))
-              (put-text-property old-point (point) 'face `( :foreground 
,color)))
-            (let ((old-point (point)))
-              (insert (format " %s %s %s\n" color pad name))
-              (put-text-property old-point (point)
-                                 'face `( :background ,color
-                                          :foreground ,fg
-                                          :extend t)))
-            ;; We need this to properly render the last line.
-            (insert " ")))
-        (setq-local revert-buffer-function
-                    (lambda (_ignore-auto _noconfirm)
-                       (modus-themes--list-colors-render current-buffer 
current-theme)))))))
-
-(defvar modus-themes--list-colors-prompt-history '()
-  "Minibuffer history for `modus-themes--list-colors-prompt'.")
-
-(defun modus-themes--list-colors-prompt ()
-  "Prompt for Modus theme.
-Helper function for `modus-themes-list-colors'."
-  (let ((def (format "%s" (modus-themes--current-theme))))
-    (completing-read
-     (format "Use palette from theme [%s]: " def)
-     '(modus-operandi modus-vivendi) nil t nil
-     'modus-themes--list-colors-prompt-history def)))
-
-(defun modus-themes-list-colors (theme)
-  "Preview palette of the Modus THEME of choice."
-  (interactive (list (intern (modus-themes--list-colors-prompt))))
-  (modus-themes--list-colors-render
-   (format "*%s-list-colors*" theme)
-   theme))
-
-(defun modus-themes-list-colors-current ()
-  "Call `modus-themes-list-colors' for the current Modus theme."
-  (interactive)
-  (modus-themes-list-colors (modus-themes--current-theme)))
-
-;;;;; Formula to measure relative luminance
-
-;; This is the WCAG formula: https://www.w3.org/TR/WCAG20-TECHS/G18.html
-(defun modus-themes-wcag-formula (hex)
-  "Get WCAG value of color value HEX.
-The value is defined in hexadecimal RGB notation, such as those in
-`modus-themes-operandi-colors' and `modus-themes-vivendi-colors'."
-  (cl-loop for k in '(0.2126 0.7152 0.0722)
-           for x in (color-name-to-rgb hex)
-           sum (* k (if (<= x 0.03928)
-                        (/ x 12.92)
-                      (expt (/ (+ x 0.055) 1.055) 2.4)))))
-
-;;;###autoload
-(defun modus-themes-contrast (c1 c2)
-  "Measure WCAG contrast ratio between C1 and C2.
-C1 and C2 are color values written in hexadecimal RGB."
-  (let ((ct (/ (+ (modus-themes-wcag-formula c1) 0.05)
-               (+ (modus-themes-wcag-formula c2) 0.05))))
-    (max ct (/ ct))))
-
-;;;;; Retrieve colors from the themes
-
-(defun modus-themes-current-palette ()
-  "Return current color palette."
-  (modus-themes--palette (modus-themes--current-theme)))
-
-;;;###autoload
-(defun modus-themes-color (color)
-  "Return color value for COLOR from current palette.
-COLOR is a key in `modus-themes-operandi-colors' or
-`modus-themes-vivendi-colors'."
-  (alist-get color (modus-themes-current-palette)))
-
-;;;###autoload
-(defun modus-themes-color-alts (light-color dark-color)
-  "Return color value from current palette.
-When Modus Operandi is enabled, return color value for color
-LIGHT-COLOR.  When Modus Vivendi is enabled, return color value
-for DARK-COLOR.  LIGHT-COLOR and DARK-COLOR are keys in
-`modus-themes-operandi-colors' or `modus-themes-vivendi-colors'."
-  (let* ((theme (modus-themes--current-theme))
-         (color (pcase theme
-                  ('modus-operandi light-color)
-                  ('modus-vivendi dark-color)
-                  (_theme
-                   (error "'%s' is not a Modus theme" theme)))))
-    (alist-get color (modus-themes--palette theme))))
-
-(defmacro modus-themes-with-colors (&rest body)
-  "Evaluate BODY with colors from current palette bound.
-For colors bound, see `modus-themes-operandi-colors' or
-`modus-themes-vivendi-colors'."
-  (declare (indent 0))
-  (let ((palette-sym (gensym))
-        (colors (mapcar #'car modus-themes-operandi-colors)))
-    `(let* ((class '((class color) (min-colors 89)))
-            (,palette-sym (modus-themes-current-palette))
-            ,@(mapcar (lambda (color)
-                        (list color `(alist-get ',color ,palette-sym)))
-                      colors))
-       (ignore class ,@colors)          ; Silence unused variable warnings
-       ,@body)))
-
-
-
-;;;; Commands
-
-;;;###autoload
-(defun modus-themes-load-themes ()
-  "Ensure that the Modus themes are in `custom-enabled-themes'.
-
-This function is intended for use in package declarations such as
-those defined with the help of `use-package'.  The idea is to add
-this function to the `:init' stage of the package's loading, so
-that subsequent calls that assume the presence of a loaded theme,
-like `modus-themes-toggle' or `modus-themes-load-operandi', will
-continue to work as intended even if they are lazy-loaded (such
-as when they are declared in the `:config' phase)."
-  (unless (or (custom-theme-p 'modus-operandi)
-              (custom-theme-p 'modus-vivendi))
-    (load-theme 'modus-operandi t t)
-    (load-theme 'modus-vivendi t t)))
-
-(defvar modus-themes-after-load-theme-hook nil
-  "Hook that runs after the `modus-themes-toggle' routines.")
-
-;;;###autoload
-(defun modus-themes-load-operandi ()
-  "Load `modus-operandi' and disable `modus-vivendi'.
-Also run `modus-themes-after-load-theme-hook'."
-  (interactive)
-  (disable-theme 'modus-vivendi)
-  (load-theme 'modus-operandi t)
-  (run-hooks 'modus-themes-after-load-theme-hook))
-
-;;;###autoload
-(defun modus-themes-load-vivendi ()
-  "Load `modus-vivendi' and disable `modus-operandi'.
-Also run `modus-themes-after-load-theme-hook'."
-  (interactive)
-  (disable-theme 'modus-operandi)
-  (load-theme 'modus-vivendi t)
-  (run-hooks 'modus-themes-after-load-theme-hook))
-
-(defun modus-themes--load-prompt ()
-  "Helper for `modus-themes-toggle'."
-  (let ((theme
-         (intern
-          (completing-read "Load Modus theme (will disable all others): "
-                           '(modus-operandi modus-vivendi) nil t))))
-    (mapc #'disable-theme custom-enabled-themes)
-    (pcase theme
-      ('modus-operandi (modus-themes-load-operandi))
-      ('modus-vivendi (modus-themes-load-vivendi)))))
-
-;;;###autoload
-(defun modus-themes-toggle ()
-  "Toggle between `modus-operandi' and `modus-vivendi' themes.
-Also runs `modus-themes-after-load-theme-hook' at its last stage
-by virtue of calling either of `modus-themes-load-operandi' and
-`modus-themes-load-vivendi' functions."
-  (interactive)
-  (modus-themes-load-themes)
-  (pcase (modus-themes--current-theme)
-    ('modus-operandi (modus-themes-load-vivendi))
-    ('modus-vivendi (modus-themes-load-operandi))
-    (_ (modus-themes--load-prompt))))
-
 
 
 ;;;; Face specifications
@@ -4067,901 +1377,555 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
   '(
 ;;;; custom faces
     ;; these bespoke faces are inherited by other constructs below
+;;;;; just the foregrounds
+    `(modus-themes-fg-red ((,c :foreground ,red)))
+    `(modus-themes-fg-red-warmer ((,c :foreground ,red-warmer)))
+    `(modus-themes-fg-red-cooler ((,c :foreground ,red-cooler)))
+    `(modus-themes-fg-red-faint ((,c :foreground ,red-faint)))
+    `(modus-themes-fg-red-intense ((,c :foreground ,red-intense)))
+    `(modus-themes-fg-green ((,c :foreground ,green)))
+    `(modus-themes-fg-green-warmer ((,c :foreground ,green-warmer)))
+    `(modus-themes-fg-green-cooler ((,c :foreground ,green-cooler)))
+    `(modus-themes-fg-green-faint ((,c :foreground ,green-faint)))
+    `(modus-themes-fg-green-intense ((,c :foreground ,green-intense)))
+    `(modus-themes-fg-yellow ((,c :foreground ,yellow)))
+    `(modus-themes-fg-yellow-warmer ((,c :foreground ,yellow-warmer)))
+    `(modus-themes-fg-yellow-cooler ((,c :foreground ,yellow-cooler)))
+    `(modus-themes-fg-yellow-faint ((,c :foreground ,yellow-faint)))
+    `(modus-themes-fg-yellow-intense ((,c :foreground ,yellow-intense)))
+    `(modus-themes-fg-blue ((,c :foreground ,blue)))
+    `(modus-themes-fg-blue-warmer ((,c :foreground ,blue-warmer)))
+    `(modus-themes-fg-blue-cooler ((,c :foreground ,blue-cooler)))
+    `(modus-themes-fg-blue-faint ((,c :foreground ,blue-faint)))
+    `(modus-themes-fg-blue-intense ((,c :foreground ,blue-intense)))
+    `(modus-themes-fg-magenta ((,c :foreground ,magenta)))
+    `(modus-themes-fg-magenta-warmer ((,c :foreground ,magenta-warmer)))
+    `(modus-themes-fg-magenta-cooler ((,c :foreground ,magenta-cooler)))
+    `(modus-themes-fg-magenta-faint ((,c :foreground ,magenta-faint)))
+    `(modus-themes-fg-magenta-intense ((,c :foreground ,magenta-intense)))
+    `(modus-themes-fg-cyan ((,c :foreground ,cyan)))
+    `(modus-themes-fg-cyan-warmer ((,c :foreground ,cyan-warmer)))
+    `(modus-themes-fg-cyan-cooler ((,c :foreground ,cyan-cooler)))
+    `(modus-themes-fg-cyan-faint ((,c :foreground ,cyan-faint)))
+    `(modus-themes-fg-cyan-intense ((,c :foreground ,cyan-intense)))
 ;;;;; subtle colored backgrounds
-    `(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)))
+    `(modus-themes-subtle-red ((,c :background ,bg-red-subtle :foreground 
,fg-main)))
+    `(modus-themes-subtle-green ((,c :background ,bg-green-subtle :foreground 
,fg-main)))
+    `(modus-themes-subtle-yellow ((,c :background ,bg-yellow-subtle 
:foreground ,fg-main)))
+    `(modus-themes-subtle-blue ((,c :background ,bg-blue-subtle :foreground 
,fg-main)))
+    `(modus-themes-subtle-magenta ((,c :background ,bg-magenta-subtle 
:foreground ,fg-main)))
+    `(modus-themes-subtle-cyan ((,c :background ,bg-cyan-subtle :foreground 
,fg-main)))
 ;;;;; intense colored backgrounds
-    `(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-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-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-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-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 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-themes-diff-added
-      ((,class ,@(modus-themes--diff
-                  bg-diff-focus-added fg-diff-focus-added
-                  green-nuanced-bg fg-diff-added
-                  bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran
-                  blue-nuanced-bg fg-diff-added-deuteran))))
-    `(modus-themes-diff-changed
-      ((,class ,@(modus-themes--diff
-                  bg-diff-focus-changed fg-diff-focus-changed
-                  yellow-nuanced-bg fg-diff-changed))))
-    `(modus-themes-diff-removed
-      ((,class ,@(modus-themes--diff
-                  bg-diff-focus-removed fg-diff-focus-removed
-                  red-nuanced-bg fg-diff-removed))))
-    `(modus-themes-diff-refine-added
-      ((,class ,@(modus-themes--diff
-                  bg-diff-refine-added fg-diff-refine-added
-                  bg-diff-focus-added fg-diff-focus-added
-                  bg-diff-refine-added-deuteran fg-diff-refine-added-deuteran
-                  bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran))))
-    `(modus-themes-diff-refine-changed
-      ((,class ,@(modus-themes--diff
-                  bg-diff-refine-changed fg-diff-refine-changed
-                  bg-diff-focus-changed fg-diff-focus-changed))))
-    `(modus-themes-diff-refine-removed
-      ((,class ,@(modus-themes--diff
-                  bg-diff-refine-removed fg-diff-refine-removed
-                  bg-diff-focus-removed fg-diff-focus-removed))))
-    `(modus-themes-diff-focus-added
-      ((,class ,@(modus-themes--diff
-                  bg-diff-focus-added fg-diff-focus-added
-                  bg-diff-added fg-diff-added
-                  bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran
-                  bg-diff-added-deuteran fg-diff-added-deuteran))))
-    `(modus-themes-diff-focus-changed
-      ((,class ,@(modus-themes--diff
-                  bg-diff-focus-changed fg-diff-focus-changed
-                  bg-diff-changed fg-diff-changed))))
-    `(modus-themes-diff-focus-removed
-      ((,class ,@(modus-themes--diff
-                  bg-diff-focus-removed fg-diff-focus-removed
-                  bg-diff-removed fg-diff-removed))))
-    `(modus-themes-diff-heading
-      ((,class ,@(modus-themes--diff
-                  bg-diff-heading fg-diff-heading
-                  cyan-nuanced-bg cyan-nuanced-fg
-                  bg-header fg-main
-                  bg-header fg-main
-                  t))))
-;;;;; deuteranopia-specific
-    `(modus-themes-grue ((,class :foreground ,@(modus-themes--deuteran blue 
green))))
-    `(modus-themes-grue-active ((,class :foreground ,@(modus-themes--deuteran 
blue-active green-active))))
-    `(modus-themes-grue-nuanced ((,class :foreground ,@(modus-themes--deuteran 
blue-nuanced-fg green-nuanced-fg))))
-    `(modus-themes-grue-background-active ((,class :inherit 
,@(modus-themes--deuteran
-                                                               
'modus-themes-fringe-blue
-                                                               
'modus-themes-fringe-green))))
-    `(modus-themes-grue-background-intense ((,class :inherit 
,@(modus-themes--deuteran
-                                                                
'modus-themes-intense-blue
-                                                                
'modus-themes-intense-green))))
-    `(modus-themes-grue-background-subtle ((,class :inherit 
,@(modus-themes--deuteran
-                                                               
'modus-themes-subtle-blue
-                                                               
'modus-themes-subtle-green))))
-    `(modus-themes-grue-background-subtle ((,class :inherit 
,@(modus-themes--deuteran
-                                                               
'modus-themes-refine-blue
-                                                               
'modus-themes-refine-green))))
+    `(modus-themes-intense-red ((,c :background ,bg-red-intense :foreground 
,fg-main)))
+    `(modus-themes-intense-green ((,c :background ,bg-green-intense 
:foreground ,fg-main)))
+    `(modus-themes-intense-yellow ((,c :background ,bg-yellow-intense 
:foreground ,fg-main)))
+    `(modus-themes-intense-blue ((,c :background ,bg-blue-intense :foreground 
,fg-main)))
+    `(modus-themes-intense-magenta ((,c :background ,bg-magenta-intense 
:foreground ,fg-main)))
+    `(modus-themes-intense-cyan ((,c :background ,bg-cyan-intense :foreground 
,fg-main)))
 ;;;;; mark indicators
     ;; color combinations intended for Dired, Ibuffer, or equivalent
-    `(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 ,@(modus-themes--deuteran
-                                                    cyan-refine-bg
-                                                    bg-mark-sel)
-                                     :foreground ,fg-mark-sel)))
-    `(modus-themes-mark-symbol ((,class :inherit bold :foreground ,blue-alt)))
+    `(modus-themes-mark-alt ((,c :inherit bold :background ,bg-yellow-subtle 
:foreground ,yellow)))
+    `(modus-themes-mark-del ((,c :inherit bold :background ,bg-red-subtle 
:foreground ,red)))
+    `(modus-themes-mark-sel ((,c :inherit bold :background ,bg-cyan-subtle 
:foreground ,cyan)))
 ;;;;; heading levels
     ;; styles for regular headings used in Org, Markdown, Info, etc.
-    `(modus-themes-heading-0
-      ((,class ,@(modus-themes--heading
-                  0 cyan-alt-other blue-alt
-                  cyan-nuanced-bg bg-alt bg-region))))
-    `(modus-themes-heading-1
-      ((,class ,@(modus-themes--heading
-                  1 fg-main magenta-alt-other
-                  magenta-nuanced-bg bg-alt bg-region))))
-    `(modus-themes-heading-2
-      ((,class ,@(modus-themes--heading
-                  2 fg-special-warm magenta-alt
-                  red-nuanced-bg bg-alt bg-region))))
-    `(modus-themes-heading-3
-      ((,class ,@(modus-themes--heading
-                  3 fg-special-cold blue
-                  blue-nuanced-bg bg-alt bg-region))))
-    `(modus-themes-heading-4
-      ((,class ,@(modus-themes--heading
-                  4 fg-special-mild cyan
-                  cyan-nuanced-bg bg-alt bg-region))))
-    `(modus-themes-heading-5
-      ((,class ,@(modus-themes--heading
-                  5 fg-special-calm green-alt-other
-                  green-nuanced-bg bg-alt bg-region))))
-    `(modus-themes-heading-6
-      ((,class ,@(modus-themes--heading
-                  6 yellow-nuanced-fg yellow-alt-other
-                  yellow-nuanced-bg bg-alt bg-region))))
-    `(modus-themes-heading-7
-      ((,class ,@(modus-themes--heading
-                  7 red-nuanced-fg red-alt
-                  red-nuanced-bg bg-alt bg-region))))
-    `(modus-themes-heading-8
-      ((,class ,@(modus-themes--heading
-                  8 magenta-nuanced-fg magenta
-                  bg-alt bg-alt bg-region))))
+    `(modus-themes-heading-0 ((,c ,@(modus-themes--heading 0 fg-heading-0 
bg-heading-0 overline-heading-0))))
+    `(modus-themes-heading-1 ((,c ,@(modus-themes--heading 1 fg-heading-1 
bg-heading-1 overline-heading-1))))
+    `(modus-themes-heading-2 ((,c ,@(modus-themes--heading 2 fg-heading-2 
bg-heading-2 overline-heading-2))))
+    `(modus-themes-heading-3 ((,c ,@(modus-themes--heading 3 fg-heading-3 
bg-heading-3 overline-heading-3))))
+    `(modus-themes-heading-4 ((,c ,@(modus-themes--heading 4 fg-heading-4 
bg-heading-4 overline-heading-4))))
+    `(modus-themes-heading-5 ((,c ,@(modus-themes--heading 5 fg-heading-5 
bg-heading-5 overline-heading-5))))
+    `(modus-themes-heading-6 ((,c ,@(modus-themes--heading 6 fg-heading-6 
bg-heading-6 overline-heading-6))))
+    `(modus-themes-heading-7 ((,c ,@(modus-themes--heading 7 fg-heading-7 
bg-heading-7 overline-heading-7))))
+    `(modus-themes-heading-8 ((,c ,@(modus-themes--heading 8 fg-heading-8 
bg-heading-8 overline-heading-8))))
 ;;;;; language checkers
-    `(modus-themes-lang-error ((,class ,@(modus-themes--lang-check
-                                          fg-lang-underline-error fg-lang-error
-                                          red red-refine-fg red-nuanced-bg 
red-refine-bg red-faint))))
-    `(modus-themes-lang-note ((,class ,@(modus-themes--lang-check
-                                         fg-lang-underline-note fg-lang-note
-                                         blue-alt blue-refine-fg 
blue-nuanced-bg blue-refine-bg blue-faint))))
-    `(modus-themes-lang-warning ((,class ,@(modus-themes--lang-check
-                                            fg-lang-underline-warning 
fg-lang-warning
-                                            yellow yellow-refine-fg 
yellow-nuanced-bg yellow-refine-bg yellow-faint))))
-;;;;; links
-    `(modus-themes-link-broken ((,class :inherit button 
,@(modus-themes--link-color red red-faint))))
-    `(modus-themes-link-symlink ((,class :inherit button 
,@(modus-themes--link-color cyan cyan-faint))))
+    `(modus-themes-lang-error ((,c :underline (:style wave :color 
,underline-err))))
+    `(modus-themes-lang-note ((,c :underline (:style wave :color 
,underline-note))))
+    `(modus-themes-lang-warning ((,c :underline (:style wave :color 
,underline-warning))))
 ;;;;; markup
-    `(modus-themes-markup-code
-      ((,class ,@(modus-themes--markup cyan-alt-other cyan-intense bg-alt
-                                       bg-special-faint-mild))))
-    `(modus-themes-markup-macro
-      ((,class ,@(modus-themes--markup magenta-alt-other purple-intense bg-alt
-                                       bg-special-faint-cold))))
-    `(modus-themes-markup-verbatim
-      ((,class ,@(modus-themes--markup magenta-alt magenta-intense bg-alt
-                                       bg-special-faint-calm))))
+    `(modus-themes-prose-code ((,c :inherit modus-themes-fixed-pitch 
:foreground ,prose-code)))
+    `(modus-themes-prose-macro ((,c :inherit modus-themes-fixed-pitch 
:foreground ,prose-macro)))
+    `(modus-themes-prose-verbatim ((,c :inherit modus-themes-fixed-pitch 
:foreground ,prose-verbatim)))
 ;;;;; search
-    `(modus-themes-search-success ((,class :inherit 
modus-themes-intense-yellow)))
-    `(modus-themes-search-success-lazy ((,class :inherit 
modus-themes-subtle-cyan)))
-    `(modus-themes-search-success-modeline ((,class :foreground 
,@(modus-themes--deuteran
-                                                                   blue-active
-                                                                   
green-active))))
-;;;;; tabs
-    `(modus-themes-tab-active ((,class ,@(modus-themes--tab bg-tab-active nil 
nil nil t t))))
-    `(modus-themes-tab-backdrop ((,class ,@(modus-themes--tab bg-active 
bg-active-accent nil nil nil nil t))))
-    `(modus-themes-tab-inactive ((,class ,@(modus-themes--tab bg-tab-inactive 
bg-tab-inactive-accent fg-dim nil t))))
+    `(modus-themes-search-current ((,c :background ,bg-yellow-intense 
:foreground ,fg-main)))
+    `(modus-themes-search-lazy ((,c :background ,bg-cyan-intense :foreground 
,fg-main)))
 ;;;;; completion frameworks
-    `(modus-themes-completion-match-0
-      ((,class ,@(modus-themes--completion-match
-                  'matches bg-special-faint-calm magenta-alt
-                  magenta-subtle-bg magenta-intense))))
-    `(modus-themes-completion-match-1
-      ((,class ,@(modus-themes--completion-match
-                  'matches bg-special-faint-cold blue
-                  blue-subtle-bg blue-intense))))
-    `(modus-themes-completion-match-2
-      ((,class ,@(modus-themes--completion-match
-                  'matches bg-special-faint-mild green
-                  green-subtle-bg green-intense))))
-    `(modus-themes-completion-match-3
-      ((,class ,@(modus-themes--completion-match
-                  'matches bg-special-faint-warm yellow
-                  yellow-subtle-bg orange-intense))))
-    `(modus-themes-completion-selected
-      ((,class ,@(modus-themes--completion-line
-                  'selection bg-inactive blue-alt
-                  bg-active blue-active
-                  bg-completion-subtle bg-completion))))
-    `(modus-themes-completion-selected-popup
-      ((,class ,@(modus-themes--completion-line
-                  'popup bg-active blue-alt
-                  bg-region blue-active
-                  cyan-subtle-bg cyan-refine-bg))))
-;;;;; buttons
-    `(modus-themes-box-button
-      ((,class ,@(modus-themes--button bg-active bg-main bg-active-accent
-                                       bg-special-cold bg-region))))
-    `(modus-themes-box-button-pressed
-      ((,class ,@(modus-themes--button bg-active bg-main bg-active-accent
-                                       bg-special-cold bg-region t))))
+    `(modus-themes-completion-match-0 ((,c ,@(modus-themes--completion-match 
fg-completion-match-0 bg-completion-match-0))))
+    `(modus-themes-completion-match-1 ((,c ,@(modus-themes--completion-match 
fg-completion-match-1 bg-completion-match-1))))
+    `(modus-themes-completion-match-2 ((,c ,@(modus-themes--completion-match 
fg-completion-match-2 bg-completion-match-2))))
+    `(modus-themes-completion-match-3 ((,c ,@(modus-themes--completion-match 
fg-completion-match-3 bg-completion-match-3))))
+    `(modus-themes-completion-selected ((,c ,@(modus-themes--completion-line 
bg-completion))))
 ;;;;; typography
-    `(modus-themes-bold ((,class ,@(modus-themes--bold-weight))))
-    `(modus-themes-fixed-pitch ((,class ,@(modus-themes--fixed-pitch))))
-    `(modus-themes-slant ((,class ,@(modus-themes--slant))))
-    `(modus-themes-ui-variable-pitch ((,class 
,@(modus-themes--variable-pitch-ui))))
+    `(modus-themes-bold ((,c ,@(modus-themes--bold-weight))))
+    `(modus-themes-fixed-pitch ((,c ,@(modus-themes--fixed-pitch))))
+    `(modus-themes-slant ((,c ,@(modus-themes--slant))))
+    `(modus-themes-ui-variable-pitch ((,c 
,@(modus-themes--variable-pitch-ui))))
 ;;;;; other custom faces
-    `(modus-themes-hl-line ((,class ,@(modus-themes--hl-line
-                                       bg-hl-line bg-hl-line-intense
-                                       bg-hl-line-intense-accent 
blue-nuanced-bg
-                                       bg-region blue-intense-bg
-                                       fg-alt blue-intense)
-                                    :extend t)))
-    `(modus-themes-key-binding ((,class :inherit (bold 
modus-themes-fixed-pitch)
-                                        :foreground ,blue-alt-other)))
-    `(modus-themes-prompt ((,class ,@(modus-themes--prompt
-                                      cyan-alt-other blue-alt-other fg-alt
-                                      cyan-nuanced-bg blue-refine-bg fg-main
-                                      bg-alt bg-active))))
-    `(modus-themes-reset-hard ((,class :inherit (fixed-pitch 
modus-themes-reset-soft)
-                                       :family ,(face-attribute 'default 
:family))))
-    `(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-button ((,c :inherit variable-pitch :box ,border 
:background ,bg-button-active :foreground ,fg-button-active)))
+    `(modus-themes-key-binding ((,c :inherit (bold modus-themes-fixed-pitch) 
:foreground ,keybind)))
+    `(modus-themes-prompt ((,c ,@(modus-themes--prompt fg-prompt bg-prompt))))
+    `(modus-themes-reset-soft ((,c :background ,bg-main :foreground ,fg-main
+                                   :weight normal :slant normal 
:strike-through nil
+                                   :box nil :underline nil :overline nil 
:extend nil)))
 ;;;; standard faces
 ;;;;; absolute essentials
-    `(default ((,class :background ,bg-main :foreground ,fg-main)))
-    `(cursor ((,class :background ,fg-main)))
-    `(fringe ((,class ,@(modus-themes--fringe bg-main bg-inactive bg-active)
-                      :foreground ,fg-main)))
-    `(vertical-border ((,class :foreground ,fg-window-divider-inner)))
+    `(default ((,c :background ,bg-main :foreground ,fg-main)))
+    `(cursor ((,c :background ,cursor)))
+    `(fringe ((,c :background ,fringe :foreground ,fg-main)))
+    `(menu ((,c :background ,bg-tab-bar :foreground ,fg-main)))
+    `(scroll-bar ((,c :background ,fringe :foreground ,fg-dim)))
+    `(tool-bar ((,c :background ,bg-tab-bar :foreground ,fg-main)))
+    `(vertical-border ((,c :foreground ,border)))
 ;;;;; basic and/or ungrouped styles
-    `(bold ((,class :weight bold)))
-    `(bold-italic ((,class :inherit (bold italic))))
-    `(underline ((,class :underline ,fg-alt)))
-    `(buffer-menu-buffer ((,class :inherit bold)))
-    `(child-frame-border ((,class :background ,fg-window-divider-inner)))
-    `(comint-highlight-input ((,class :inherit bold)))
-    `(comint-highlight-prompt ((,class :inherit modus-themes-prompt)))
-    `(confusingly-reordered ((,class :inherit modus-themes-lang-error)))
-    `(edmacro-label ((,class :inherit bold :foreground ,cyan)))
-    `(elisp-shorthand-font-lock-face ((,class :inherit 
font-lock-variable-name-face)))
-    `(error ((,class :inherit bold :foreground ,red)))
-    `(escape-glyph ((,class :foreground ,fg-escape-char-construct)))
-    `(file-name-shadow ((,class :inherit shadow)))
-    `(header-line ((,class :inherit modus-themes-ui-variable-pitch
-                           :background ,bg-header :foreground ,fg-header)))
-    `(header-line-highlight ((,class :inherit highlight)))
-    `(help-argument-name ((,class :inherit modus-themes-slant :foreground 
,cyan)))
-    `(help-key-binding ((,class :inherit modus-themes-key-binding)))
-    `(homoglyph ((,class :foreground ,red-alt-faint)))
-    `(ibuffer-locked-buffer ((,class :foreground ,yellow-alt-other-faint)))
-    `(icon-button ((,class :inherit modus-themes-box-button)))
-    `(italic ((,class :slant italic)))
-    `(nobreak-hyphen ((,class :foreground ,fg-escape-char-construct)))
-    `(nobreak-space ((,class :foreground ,fg-escape-char-construct :underline 
t)))
-    `(menu ((,class :inverse-video unspecified :inherit 
modus-themes-intense-neutral)))
-    `(minibuffer-prompt ((,class :inherit modus-themes-prompt)))
-    `(mm-command-output ((,class :foreground ,red-alt-other)))
-    `(mm-uu-extract ((,class :background ,bg-dim :foreground 
,fg-special-mild)))
-    `(next-error ((,class :inherit modus-themes-subtle-red :extend t)))
-    `(pgtk-im-0 ((,class :inherit modus-themes-refine-cyan)))
-    `(read-multiple-choice-face ((,class :inherit (bold 
modus-themes-mark-alt))))
-    `(rectangle-preview ((,class :inherit modus-themes-special-warm)))
-    `(region ((,class ,@(modus-themes--region bg-region fg-main
-                                              bg-hl-alt-intense 
bg-region-accent
-                                              bg-region-accent-subtle))))
-    `(secondary-selection ((,class :inherit modus-themes-special-cold)))
-    `(separator-line ((,class :underline ,bg-region)))
-    `(shadow ((,class :foreground ,fg-alt)))
-    `(success ((,class :inherit (bold modus-themes-grue))))
-    `(trailing-whitespace ((,class :background ,red-intense-bg)))
-    `(warning ((,class :inherit bold :foreground ,yellow)))
+    `(bold ((,c :weight bold)))
+    `(bold-italic ((,c :inherit (bold italic))))
+    `(underline ((,c :underline ,fg-dim)))
+    `(buffer-menu-buffer ((,c :inherit bold)))
+    `(child-frame-border ((,c :background ,border)))
+    `(comint-highlight-input ((,c :inherit bold)))
+    `(comint-highlight-prompt ((,c :inherit modus-themes-prompt)))
+    `(confusingly-reordered ((,c :inherit modus-themes-lang-error)))
+    `(edmacro-label ((,c :inherit bold :foreground ,accent-0)))
+    `(elisp-shorthand-font-lock-face ((,c :inherit 
font-lock-variable-name-face)))
+    `(error ((,c :inherit bold :foreground ,err)))
+    `(escape-glyph ((,c :foreground ,err)))
+    `(file-name-shadow ((,c :inherit shadow)))
+    `(header-line ((,c :inherit modus-themes-ui-variable-pitch :background 
,bg-dim)))
+    `(header-line-highlight ((,c :inherit highlight)))
+    `(help-argument-name ((,c :inherit modus-themes-slant :foreground 
,variable)))
+    `(help-key-binding ((,c :inherit modus-themes-key-binding)))
+    `(homoglyph ((,c :foreground ,warning)))
+    `(ibuffer-locked-buffer ((,c :foreground ,warning)))
+    `(icon-button ((,c :inherit modus-themes-button)))
+    `(italic ((,c :slant italic)))
+    `(nobreak-hyphen ((,c :foreground ,err)))
+    `(nobreak-space ((,c :foreground ,err :underline t)))
+    `(menu ((,c :inverse-video unspecified :background ,bg-active :foreground 
,fg-main)))
+    `(minibuffer-prompt ((,c :inherit modus-themes-prompt)))
+    `(mm-command-output ((,c :foreground ,mail-part)))
+    `(mm-uu-extract ((,c :foreground ,mail-part)))
+    `(next-error ((,c :inherit modus-themes-subtle-red :extend t)))
+    `(pgtk-im-0 ((,c :inherit modus-themes-intense-cyan)))
+    `(read-multiple-choice-face ((,c :inherit (bold modus-themes-mark-alt))))
+    `(rectangle-preview ((,c :inherit secondary-selection)))
+    `(region ((,c :background ,bg-region :foreground ,fg-region)))
+    `(secondary-selection ((,c :background ,bg-hover-secondary)))
+    `(separator-line ((,c :underline ,bg-active)))
+    `(shadow ((,c :foreground ,fg-dim)))
+    `(success ((,c :inherit bold :foreground ,info)))
+    `(trailing-whitespace ((,c :background ,bg-red-intense)))
+    `(warning ((,c :inherit bold :foreground ,warning)))
 ;;;;; buttons, links, widgets
-    `(button ((,class ,@(modus-themes--link
-                         blue-alt-other blue-alt-other-faint
-                         bg-region blue-nuanced-bg bg-alt))))
-    `(link ((,class :inherit button)))
-    `(link-visited ((,class :inherit button
-                            ,@(modus-themes--link-color
-                               magenta-alt-other magenta-alt-other-faint 
fg-alt))))
-    `(tooltip ((,class :background ,bg-special-cold :foreground ,fg-main)))
-    `(widget-button ((,class ,@(if (memq 'all-buttons modus-themes-box-buttons)
-                                   (list :inherit 'modus-themes-box-button)
-                                 (list :inherit 'bold :foreground blue-alt)))))
-    `(widget-button-pressed ((,class ,@(if (memq 'all-buttons 
modus-themes-box-buttons)
-                                           (list :inherit 
'modus-themes-box-button-pressed)
-                                         (list :inherit 'bold :foreground 
magenta-alt)))))
-    `(widget-documentation ((,class :foreground ,green)))
-    `(widget-field ((,class :background ,bg-alt :foreground ,fg-main :extend 
nil)))
-    `(widget-inactive ((,class :inherit shadow :background ,bg-dim)))
-    `(widget-single-line-field ((,class :inherit widget-field)))
-;;;;; alert
-    `(alert-high-face ((,class :inherit bold :foreground ,red-alt)))
-    `(alert-low-face ((,class :foreground ,fg-special-mild)))
-    `(alert-moderate-face ((,class :inherit bold :foreground ,yellow)))
-    `(alert-trivial-face ((,class :foreground ,fg-special-calm)))
-    `(alert-urgent-face ((,class :inherit bold :foreground ,red-intense)))
+    `(button ((,c :background ,bg-link :foreground ,fg-link :underline 
,underline-link)))
+    `(link ((,c :inherit button)))
+    `(link-visited ((,c :background ,bg-link-visited :foreground 
,fg-link-visited :underline ,underline-link-visited)))
+    `(tooltip ((,c :background ,bg-active)))
+;;;;; agda2-mode
+    `(agda2-highlight-bound-variable-face ((,c :inherit 
font-lock-variable-name-face)))
+    `(agda2-highlight-catchall-clause-face ((,c :background ,bg-inactive)))
+    `(agda2-highlight-coinductive-constructor-face ((,c :inherit 
font-lock-type-face)))
+    `(agda2-highlight-coverage-problem-face ((,c :inherit 
modus-themes-lang-error)))
+    `(agda2-highlight-datatype-face ((,c :inherit font-lock-type-face)))
+    `(agda2-highlight-deadcode-face ((,c :background ,bg-active)))
+    `(agda2-highlight-dotted-face ((,c :inherit font-lock-variable-name-face)))
+    `(agda2-highlight-error-face ((,c :inherit modus-themes-lang-error)))
+    `(agda2-highlight-field-face ((,c :inherit font-lock-type-face)))
+    `(agda2-highlight-function-face ((,c :inherit 
font-lock-function-name-face)))
+    `(agda2-highlight-generalizable-variable-face ((,c :inherit 
font-lock-variable-name-face)))
+    `(agda2-highlight-incomplete-pattern-face ((,c :inherit 
modus-themes-lang-warning)))
+    `(agda2-highlight-inductive-constructor-face ((,c :inherit 
font-lock-type-face)))
+    `(agda2-highlight-keyword-face ((,c :inherit font-lock-keyword-face)))
+    `(agda2-highlight-macro-face ((,c :inherit font-lock-keyword-face)))
+    `(agda2-highlight-module-face ((,c :inherit font-lock-variable-name-face)))
+    `(agda2-highlight-number-face ((,c :inherit shadow)))
+    `(agda2-highlight-operator-face ((,c :inherit 
font-lock-variable-name-face)))
+    `(agda2-highlight-positivity-problem-face ((,c :inherit 
modus-themes-lang-warning)))
+    `(agda2-highlight-postulate-face ((,c :inherit font-lock-type-face)))
+    `(agda2-highlight-pragma-face ((,c :inherit font-lock-preprocessor-face)))
+    `(agda2-highlight-primitive-face ((,c :inherit font-lock-type-face)))
+    `(agda2-highlight-primitive-type-face ((,c :inherit font-lock-type-face)))
+    `(agda2-highlight-record-face ((,c :inherit font-lock-type-face)))
+    `(agda2-highlight-string-face ((,c :inherit font-lock-string-face)))
+    `(agda2-highlight-symbol-face ((,c :inherit font-lock-constant-face)))
+    `(agda2-highlight-termination-problem-face ((,c :inherit 
modus-themes-lang-warning)))
+    `(agda2-highlight-typechecks-face ((,c :inherit font-lock-warning-face)))
+    `(agda2-highlight-unsolved-constraint-face ((,c :inherit 
modus-themes-lang-warning)))
+    `(agda2-highlight-unsolved-meta-face ((,c :inherit 
modus-themes-lang-warning)))
 ;;;;; all-the-icons
-    `(all-the-icons-blue ((,class :foreground ,blue-alt-other)))
-    `(all-the-icons-blue-alt ((,class :foreground ,blue-alt)))
-    `(all-the-icons-cyan ((,class :foreground ,cyan-intense)))
-    `(all-the-icons-cyan-alt ((,class :foreground ,cyan-alt)))
-    `(all-the-icons-dblue ((,class :foreground ,blue-faint)))
-    `(all-the-icons-dcyan ((,class :foreground ,cyan-faint)))
-    `(all-the-icons-dgreen ((,class :foreground ,green)))
-    `(all-the-icons-dmaroon ((,class :foreground ,magenta-alt-faint)))
-    `(all-the-icons-dorange ((,class :foreground ,red-alt-faint)))
-    `(all-the-icons-dpink ((,class :foreground ,magenta-faint)))
-    `(all-the-icons-dpurple ((,class :foreground ,magenta-alt-other-faint)))
-    `(all-the-icons-dred ((,class :foreground ,red-faint)))
-    `(all-the-icons-dsilver ((,class :foreground ,cyan-alt-faint)))
-    `(all-the-icons-dyellow ((,class :foreground ,yellow-alt-faint)))
-    `(all-the-icons-green ((,class :foreground ,green-intense)))
-    `(all-the-icons-lblue ((,class :foreground ,blue-alt-other)))
-    `(all-the-icons-lcyan ((,class :foreground ,cyan)))
-    `(all-the-icons-lgreen ((,class :foreground ,green-alt-other)))
-    `(all-the-icons-lmaroon ((,class :foreground ,magenta-alt)))
-    `(all-the-icons-lorange ((,class :foreground ,red-alt)))
-    `(all-the-icons-lpink ((,class :foreground ,magenta)))
-    `(all-the-icons-lpurple ((,class :foreground ,magenta-faint)))
-    `(all-the-icons-lred ((,class :foreground ,red)))
-    `(all-the-icons-lsilver ((,class :foreground ,fg-docstring)))
-    `(all-the-icons-lyellow ((,class :foreground ,yellow-alt)))
-    `(all-the-icons-maroon ((,class :foreground ,magenta-intense)))
-    `(all-the-icons-orange ((,class :foreground ,orange-intense)))
-    `(all-the-icons-pink ((,class :foreground ,fg-special-calm)))
-    `(all-the-icons-purple ((,class :foreground ,magenta-alt-other)))
-    `(all-the-icons-purple-alt ((,class :foreground ,purple-intense)))
-    `(all-the-icons-red ((,class :foreground ,red-intense)))
-    `(all-the-icons-red-alt ((,class :foreground ,red-alt-other)))
-    `(all-the-icons-silver ((,class :foreground ,fg-special-cold)))
-    `(all-the-icons-yellow ((,class :foreground ,yellow)))
+    `(all-the-icons-blue ((,c :foreground ,blue-cooler)))
+    `(all-the-icons-blue-warmer ((,c :foreground ,blue-warmer)))
+    `(all-the-icons-cyan ((,c :foreground ,cyan-intense)))
+    `(all-the-icons-cyan-warmer ((,c :foreground ,cyan-warmer)))
+    `(all-the-icons-dblue ((,c :foreground ,blue-faint)))
+    `(all-the-icons-dcyan ((,c :foreground ,cyan-faint)))
+    `(all-the-icons-dgreen ((,c :foreground ,green-faint)))
+    `(all-the-icons-dmaroon ((,c :foreground ,magenta-faint)))
+    `(all-the-icons-dorange ((,c :foreground ,red-faint)))
+    `(all-the-icons-dpink ((,c :foreground ,magenta-faint)))
+    `(all-the-icons-dpurple ((,c :foreground ,magenta-cooler)))
+    `(all-the-icons-dred ((,c :foreground ,red-faint)))
+    `(all-the-icons-dsilver ((,c :foreground ,cyan-faint)))
+    `(all-the-icons-dyellow ((,c :foreground ,yellow-faint)))
+    `(all-the-icons-green ((,c :foreground ,green)))
+    `(all-the-icons-lblue ((,c :foreground ,blue-cooler)))
+    `(all-the-icons-lcyan ((,c :foreground ,cyan)))
+    `(all-the-icons-lgreen ((,c :foreground ,green-warmer)))
+    `(all-the-icons-lmaroon ((,c :foreground ,magenta-warmer)))
+    `(all-the-icons-lorange ((,c :foreground ,red-warmer)))
+    `(all-the-icons-lpink ((,c :foreground ,magenta)))
+    `(all-the-icons-lpurple ((,c :foreground ,magenta-faint)))
+    `(all-the-icons-lred ((,c :foreground ,red)))
+    `(all-the-icons-lyellow ((,c :foreground ,yellow-warmer)))
+    `(all-the-icons-maroon ((,c :foreground ,yellow-cooler)))
+    `(all-the-icons-red ((,c :foreground ,red-intense)))
+    `(all-the-icons-red-warmer ((,c :foreground ,red-cooler)))
+    `(all-the-icons-yellow ((,c :foreground ,yellow-intense)))
 ;;;;; all-the-icons-dired
-    `(all-the-icons-dired-dir-face ((,class :foreground ,cyan-faint)))
+    `(all-the-icons-dired-dir-face ((,c :foreground ,cyan-faint)))
 ;;;;; all-the-icons-ibuffer
-    `(all-the-icons-ibuffer-dir-face ((,class :foreground ,cyan-faint)))
-    `(all-the-icons-ibuffer-file-face ((,class :foreground ,blue-faint)))
-    `(all-the-icons-ibuffer-mode-face ((,class :foreground ,cyan)))
-    `(all-the-icons-ibuffer-size-face ((,class :foreground ,cyan-alt-other)))
+    `(all-the-icons-ibuffer-dir-face ((,c :foreground ,cyan-faint)))
+    `(all-the-icons-ibuffer-file-face ((,c :foreground ,blue-faint)))
+    `(all-the-icons-ibuffer-mode-face ((,c :foreground ,cyan)))
+    `(all-the-icons-ibuffer-size-face ((,c :foreground ,cyan-cooler)))
 ;;;;; annotate
-    `(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)))
+    `(annotate-annotation ((,c :inherit modus-themes-subtle-blue)))
+    `(annotate-annotation-secondary ((,c :inherit 
modus-themes-subtle-magenta)))
+    `(annotate-highlight ((,c :background ,bg-blue-subtle :underline 
,blue-intense)))
+    `(annotate-highlight-secondary ((,c :background ,bg-magenta-subtle 
:underline ,magenta-intense)))
 ;;;;; ansi-color
     ;; Those are in Emacs28.
-    `(ansi-color-black ((,class :background "black" :foreground "black")))
-    `(ansi-color-blue ((,class :background ,blue :foreground ,blue)))
-    `(ansi-color-bold ((,class :inherit bold)))
-    `(ansi-color-bright-black ((,class :background "gray35" :foreground 
"gray35")))
-    `(ansi-color-bright-blue ((,class :background ,blue-alt :foreground 
,blue-alt)))
-    `(ansi-color-bright-cyan ((,class :background ,cyan-alt-other :foreground 
,cyan-alt-other)))
-    `(ansi-color-bright-green ((,class :background ,green-alt-other 
:foreground ,green-alt-other)))
-    `(ansi-color-bright-magenta ((,class :background ,magenta-alt-other 
:foreground ,magenta-alt-other)))
-    `(ansi-color-bright-red ((,class :background ,red-alt :foreground 
,red-alt)))
-    `(ansi-color-bright-white ((,class :background "white" :foreground 
"white")))
-    `(ansi-color-bright-yellow ((,class :background ,yellow-alt :foreground 
,yellow-alt)))
-    `(ansi-color-cyan ((,class :background ,cyan :foreground ,cyan)))
-    `(ansi-color-green ((,class :background ,green :foreground ,green)))
-    `(ansi-color-magenta ((,class :background ,magenta :foreground ,magenta)))
-    `(ansi-color-red ((,class :background ,red :foreground ,red)))
-    `(ansi-color-white ((,class :background "gray65" :foreground "gray65")))
-    `(ansi-color-yellow ((,class :background ,yellow :foreground ,yellow)))
+    `(ansi-color-black ((,c :background "black" :foreground "black")))
+    `(ansi-color-blue ((,c :background ,blue :foreground ,blue)))
+    `(ansi-color-bold ((,c :inherit bold)))
+    `(ansi-color-bright-black ((,c :background "gray35" :foreground "gray35")))
+    `(ansi-color-bright-blue ((,c :background ,blue-warmer :foreground 
,blue-warmer)))
+    `(ansi-color-bright-cyan ((,c :background ,cyan-cooler :foreground 
,cyan-cooler)))
+    `(ansi-color-bright-green ((,c :background ,green-cooler :foreground 
,green-cooler)))
+    `(ansi-color-bright-magenta ((,c :background ,magenta-cooler :foreground 
,magenta-cooler)))
+    `(ansi-color-bright-red ((,c :background ,red-warmer :foreground 
,red-warmer)))
+    `(ansi-color-bright-white ((,c :background "white" :foreground "white")))
+    `(ansi-color-bright-yellow ((,c :background ,yellow-warmer :foreground 
,yellow-warmer)))
+    `(ansi-color-cyan ((,c :background ,cyan :foreground ,cyan)))
+    `(ansi-color-green ((,c :background ,green :foreground ,green)))
+    `(ansi-color-magenta ((,c :background ,magenta :foreground ,magenta)))
+    `(ansi-color-red ((,c :background ,red :foreground ,red)))
+    `(ansi-color-white ((,c :background "gray65" :foreground "gray65")))
+    `(ansi-color-yellow ((,c :background ,yellow :foreground ,yellow)))
 ;;;;; anzu
-    `(anzu-match-1 ((,class :inherit modus-themes-subtle-cyan)))
-    `(anzu-match-2 ((,class :inherit modus-themes-search-success)))
-    `(anzu-match-3 ((,class :inherit modus-themes-subtle-yellow)))
-    `(anzu-mode-line ((,class :inherit (bold 
modus-themes-search-success-modeline))))
-    `(anzu-mode-line-no-match ((,class :inherit bold :foreground ,red-active)))
-    `(anzu-replace-highlight ((,class :inherit modus-themes-refine-red 
:underline t)))
-    `(anzu-replace-to ((,class :inherit modus-themes-search-success)))
-;;;;; apropos
-    `(apropos-button ((,class :foreground ,magenta-alt-other)))
-    `(apropos-function-button ((,class :foreground ,magenta)))
-    `(apropos-keybinding ((,class :inherit modus-themes-key-binding)))
-    `(apropos-misc-button ((,class :foreground ,green-alt-other)))
-    `(apropos-property ((,class :inherit modus-themes-bold :foreground 
,magenta-alt)))
-    `(apropos-symbol ((,class :inherit modus-themes-pseudo-header)))
-    `(apropos-user-option-button ((,class :foreground ,cyan)))
-    `(apropos-variable-button ((,class :foreground ,blue-alt)))
-;;;;; artbollocks-mode
-    `(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-themes-lang-warning)))
-    `(artbollocks-weasel-words-face ((,class :inherit 
modus-themes-lang-error)))
+    `(anzu-match-1 ((,c :inherit modus-themes-subtle-cyan)))
+    `(anzu-match-2 ((,c :inherit modus-themes-search-current)))
+    `(anzu-match-3 ((,c :inherit modus-themes-subtle-yellow)))
+    `(anzu-mode-line ((,c :inherit bold)))
+    `(anzu-mode-line-no-match ((,c :inherit error)))
+    `(anzu-replace-highlight ((,c :inherit modus-themes-intense-red :underline 
t)))
+    `(anzu-replace-to ((,c :inherit modus-themes-search-current)))
 ;;;;; auctex and Tex
-    `(font-latex-bold-face ((,class :inherit bold)))
-    `(font-latex-doctex-documentation-face ((,class :inherit 
font-lock-doc-face)))
-    `(font-latex-doctex-preprocessor-face ((,class :inherit 
font-lock-preprocessor-face)))
-    `(font-latex-italic-face ((,class :inherit italic)))
-    `(font-latex-math-face ((,class :inherit font-lock-constant-face)))
-    `(font-latex-script-char-face ((,class :inherit font-lock-builtin-face)))
-    `(font-latex-sectioning-5-face ((,class :inherit (bold 
modus-themes-variable-pitch) :foreground ,blue-nuanced-fg)))
-    `(font-latex-sedate-face ((,class :inherit font-lock-keyword-face)))
-    `(font-latex-slide-title-face ((,class :inherit modus-themes-heading-1)))
-    `(font-latex-string-face ((,class :inherit font-lock-string-face)))
-    `(font-latex-subscript-face ((,class :height 0.95)))
-    `(font-latex-superscript-face ((,class :height 0.95)))
-    `(font-latex-underline-face ((,class :inherit underline)))
-    `(font-latex-verbatim-face ((,class :inherit 
modus-themes-markup-verbatim)))
-    `(font-latex-warning-face ((,class :inherit font-lock-warning-face)))
-    `(tex-verbatim ((,class :inherit modus-themes-markup-verbatim)))
-    `(texinfo-heading ((,class :foreground ,magenta)))
-    `(TeX-error-description-error ((,class :inherit error)))
-    `(TeX-error-description-help ((,class :inherit success)))
-    `(TeX-error-description-tex-said ((,class :inherit success)))
-    `(TeX-error-description-warning ((,class :inherit warning)))
+    `(font-latex-bold-face ((,c :inherit bold)))
+    `(font-latex-doctex-documentation-face ((,c :inherit font-lock-doc-face)))
+    `(font-latex-doctex-preprocessor-face ((,c :inherit 
font-lock-preprocessor-face)))
+    `(font-latex-italic-face ((,c :inherit italic)))
+    `(font-latex-math-face ((,c :inherit font-lock-constant-face)))
+    `(font-latex-script-char-face ((,c :inherit font-lock-builtin-face)))
+    `(font-latex-sectioning-5-face ((,c :inherit (bold 
modus-themes-variable-pitch) :foreground ,fg-alt)))
+    `(font-latex-sedate-face ((,c :inherit font-lock-keyword-face)))
+    `(font-latex-slide-title-face ((,c :inherit modus-themes-heading-1)))
+    `(font-latex-string-face ((,c :inherit font-lock-string-face)))
+    `(font-latex-subscript-face ((,c :height 0.95)))
+    `(font-latex-superscript-face ((,c :height 0.95)))
+    `(font-latex-underline-face ((,c :inherit underline)))
+    `(font-latex-verbatim-face ((,c :inherit modus-themes-prose-verbatim)))
+    `(font-latex-warning-face ((,c :inherit font-lock-warning-face)))
+    `(tex-verbatim ((,c :inherit modus-themes-prose-verbatim)))
+    ;; `(texinfo-heading ((,c :foreground ,magenta)))
+    `(TeX-error-description-error ((,c :inherit error)))
+    `(TeX-error-description-help ((,c :inherit success)))
+    `(TeX-error-description-tex-said ((,c :inherit success)))
+    `(TeX-error-description-warning ((,c :inherit warning)))
 ;;;;; auto-dim-other-buffers
-    `(auto-dim-other-buffers-face ((,class :background ,bg-alt)))
+    `(auto-dim-other-buffers-face ((,c :background ,bg-inactive)))
 ;;;;; avy
-    `(avy-background-face ((,class :background ,bg-dim :foreground ,fg-dim 
:extend t)))
-    `(avy-goto-char-timer-face ((,class :inherit (modus-themes-intense-neutral 
bold))))
-    `(avy-lead-face ((,class :inherit (bold modus-themes-reset-soft) 
:background ,bg-char-0)))
-    `(avy-lead-face-0 ((,class :inherit (bold modus-themes-reset-soft) 
:background ,bg-char-1)))
-    `(avy-lead-face-1 ((,class :inherit (modus-themes-special-warm 
modus-themes-reset-soft))))
-    `(avy-lead-face-2 ((,class :inherit (bold modus-themes-reset-soft) 
:background ,bg-char-2)))
+    `(avy-background-face ((,c :background ,bg-dim :foreground ,fg-dim :extend 
t)))
+    `(avy-goto-char-timer-face ((,c :inherit bold :background ,bg-active)))
+    `(avy-lead-face ((,c :inherit (bold modus-themes-reset-soft) :background 
,bg-char-0)))
+    `(avy-lead-face-0 ((,c :inherit (bold modus-themes-reset-soft) :background 
,bg-char-1)))
+    `(avy-lead-face-1 ((,c :inherit modus-themes-reset-soft :background 
,bg-inactive)))
+    `(avy-lead-face-2 ((,c :inherit (bold modus-themes-reset-soft) :background 
,bg-char-2)))
 ;;;;; aw (ace-window)
-    `(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)))
-    `(awesome-tray-module-battery-face ((,class :inherit bold :foreground 
,cyan-alt-other)))
-    `(awesome-tray-module-buffer-name-face ((,class :inherit bold :foreground 
,yellow-alt-other)))
-    `(awesome-tray-module-circe-face ((,class :inherit bold :foreground 
,blue-alt)))
-    `(awesome-tray-module-date-face ((,class :inherit bold :foreground 
,fg-dim)))
-    `(awesome-tray-module-evil-face ((,class :inherit bold :foreground 
,green-alt)))
-    `(awesome-tray-module-git-face ((,class :inherit bold :foreground 
,magenta)))
-    `(awesome-tray-module-last-command-face ((,class :inherit bold :foreground 
,blue-alt-other)))
-    `(awesome-tray-module-location-face ((,class :inherit bold :foreground 
,yellow)))
-    `(awesome-tray-module-mode-name-face ((,class :inherit bold :foreground 
,green)))
-    `(awesome-tray-module-parent-dir-face ((,class :inherit bold :foreground 
,cyan)))
-    `(awesome-tray-module-rvm-face ((,class :inherit bold :foreground 
,magenta-alt-other)))
-;;;;; bbdb
-    `(bbdb-name ((,class :foreground ,magenta-alt-other)))
-    `(bbdb-organization ((,class :foreground ,red-alt-other)))
-    `(bbdb-field-name ((,class :foreground ,cyan-alt-other)))
+    `(aw-background-face ((,c :foreground "gray50")))
+    `(aw-key-face ((,c :inherit modus-themes-key-binding)))
+    `(aw-leading-char-face ((,c :inherit (bold modus-themes-reset-soft) 
:height 1.5 :foreground ,red-intense)))
+    `(aw-minibuffer-leading-char-face ((,c :inherit (modus-themes-intense-red 
bold))))
+    `(aw-mode-line-face ((,c :inherit bold)))
 ;;;;; binder
-    `(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-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)))
+    `(binder-sidebar-highlight ((,c :inherit modus-themes-subtle-cyan)))
+    `(binder-sidebar-marked ((,c :inherit modus-themes-mark-sel)))
+    `(binder-sidebar-missing ((,c :inherit modus-themes-subtle-red)))
+    `(binder-sidebar-tags ((,c :foreground ,variable)))
 ;;;;; bongo
-    `(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-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 :inherit shadow)))
-    `(bongo-track-title ((,class :foreground ,blue-active)))
-    `(bongo-unfilled-seek-bar ((,class :background ,bg-special-cold 
:foreground ,fg-main)))
+    `(bongo-album-title (( )))
+    `(bongo-artist ((,c :foreground ,accent-0)))
+    `(bongo-currently-playing-track ((,c :inherit bold)))
+    `(bongo-elapsed-track-part ((,c :background ,bg-inactive :underline t)))
+    `(bongo-filled-seek-bar ((,c :background ,bg-hover)))
+    `(bongo-marked-track ((,c :inherit modus-themes-mark-alt)))
+    `(bongo-marked-track-line ((,c :background ,bg-dim)))
+    `(bongo-played-track ((,c :inherit shadow :strike-through t)))
+    `(bongo-track-length ((,c :inherit shadow)))
+    `(bongo-track-title ((,c :foreground ,accent-1)))
+    `(bongo-unfilled-seek-bar ((,c :background ,bg-dim)))
 ;;;;; boon
-    `(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)))
+    `(boon-modeline-cmd ((,c :inherit modus-themes-intense-blue)))
+    `(boon-modeline-ins ((,c :inherit modus-themes-intense-red)))
+    `(boon-modeline-off ((,c :inherit modus-themes-intense-yellow)))
+    `(boon-modeline-spc ((,c :inherit modus-themes-intense-green)))
 ;;;;; bookmark
-    `(bookmark-face ((,class :inherit modus-themes-fringe-cyan)))
-    `(bookmark-menu-bookmark ((,class :inherit bold)))
-;;;;; breakpoint (built-in gdb-mi.el)
-    `(breakpoint-disabled ((,class :inherit shadow)))
-    `(breakpoint-enabled ((,class :inherit bold :foreground ,red)))
+    `(bookmark-face ((,c :inherit success)))
+    `(bookmark-menu-bookmark ((,c :inherit bold)))
 ;;;;; calendar and diary
-    `(calendar-month-header ((,class :inherit modus-themes-pseudo-header)))
-    `(calendar-today ((,class :inherit bold :underline t)))
-    `(calendar-weekday-header ((,class :foreground ,fg-unfocused)))
-    `(calendar-weekend-header ((,class :foreground ,red-faint)))
-    `(diary ((,class :background ,blue-nuanced-bg :foreground 
,blue-alt-other)))
-    `(diary-anniversary ((,class :foreground ,red-alt-other)))
-    `(diary-time ((,class :foreground ,cyan)))
-    `(holiday ((,class :background ,magenta-nuanced-bg :foreground 
,magenta-alt)))
-;;;;; calfw
-    `(cfw:face-annotation ((,class :foreground ,fg-special-warm)))
-    `(cfw:face-day-title ((,class :foreground ,fg-main)))
-    `(cfw:face-default-content ((,class :foreground ,green-alt)))
-    `(cfw:face-default-day ((,class :inherit (cfw:face-day-title bold))))
-    `(cfw:face-disable ((,class :foreground ,fg-unfocused)))
-    `(cfw:face-grid ((,class :foreground ,fg-window-divider-outer)))
-    `(cfw:face-header ((,class :inherit bold :foreground ,fg-main)))
-    `(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-themes-intense-blue)))
-    `(cfw:face-sunday ((,class :inherit bold :foreground ,cyan-alt-other)))
-    `(cfw:face-title ((,class :inherit modus-themes-heading-1 :background 
,bg-main :overline nil :foreground ,fg-special-cold)))
-    `(cfw:face-today ((,class :background ,bg-inactive)))
-    `(cfw:face-today-title ((,class :background ,bg-active)))
-    `(cfw:face-toolbar ((,class :background ,bg-alt :foreground ,bg-alt)))
-    `(cfw:face-toolbar-button-off ((,class :inherit shadow)))
-    `(cfw:face-toolbar-button-on ((,class :inherit bold :background 
,blue-nuanced-bg
-                                          :foreground ,blue-alt)))
+    `(calendar-month-header ((,c :inherit bold)))
+    `(calendar-today ((,c :inherit bold :underline t)))
+    `(calendar-weekday-header ((,c :foreground ,date-weekday)))
+    `(calendar-weekend-header ((,c :foreground ,date-weekend)))
+    `(diary ((,c :background ,bg-dim :foreground ,accent-0)))
+    `(diary-anniversary ((,c :foreground ,accent-1)))
+    `(diary-time ((,c :foreground ,date-common)))
+    `(holiday ((,c :foreground ,date-holiday)))
 ;;;;; calibredb
-    `(calibredb-archive-face ((,class :foreground ,magenta-alt-faint)))
-    `(calibredb-author-face ((,class :foreground ,blue-faint)))
-    `(calibredb-comment-face ((,class :inherit shadow)))
-    `(calibredb-date-face ((,class :foreground ,cyan)))
-    `(calibredb-edit-annotation-header-title-face ((,class :inherit bold)))
-    `(calibredb-favorite-face ((,class :foreground ,red-alt)))
+    ;; NOTE 2022-12-27: Calibredb needs to be reviewed.  I had to
+    ;; change the applicable colours for the transition to
+    ;; modus-themes version 4, but I cannot test this currently (it
+    ;; depends on an external program).
+    `(calibredb-archive-face ((,c :foreground ,accent-3)))
+    `(calibredb-author-face ((,c :foreground ,name)))
+    `(calibredb-comment-face ((,c :inherit shadow)))
+    `(calibredb-date-face ((,c :foreground ,date-common)))
+    `(calibredb-edit-annotation-header-title-face ((,c :inherit bold)))
+    `(calibredb-favorite-face ((,c :foreground ,red-warmer)))
     `(calibredb-file-face (( )))
-    `(calibredb-format-face ((,class :foreground ,cyan-faint)))
-    `(calibredb-highlight-face ((,class :inherit success)))
+    `(calibredb-format-face ((,c :foreground ,fg-alt)))
+    `(calibredb-highlight-face ((,c :inherit success)))
     `(calibredb-id-face (( )))
     `(calibredb-ids-face (( )))
-    `(calibredb-search-header-highlight-face ((,class :inherit 
modus-themes-hl-line)))
-    `(calibredb-search-header-library-name-face ((,class :foreground 
,blue-active)))
-    `(calibredb-search-header-library-path-face ((,class :inherit bold)))
-    `(calibredb-search-header-sort-face ((,class :inherit bold :foreground 
,magenta-active)))
-    `(calibredb-search-header-total-face ((,class :inherit bold :foreground 
,cyan-active)))
-    `(calibredb-search-header-filter-face ((,class :inherit bold)))
-    `(calibredb-mark-face ((,class :inherit modus-themes-mark-sel)))
+    `(calibredb-search-header-highlight-face ((,c :background ,bg-hl-line 
:extend t)))
+    `(calibredb-search-header-library-name-face ((,c :foreground ,accent-2)))
+    `(calibredb-search-header-library-path-face ((,c :inherit bold)))
+    `(calibredb-search-header-sort-face ((,c :inherit bold :foreground 
,accent-1)))
+    `(calibredb-search-header-total-face ((,c :inherit bold :foreground 
,accent-0)))
+    `(calibredb-search-header-filter-face ((,c :inherit bold)))
+    `(calibredb-mark-face ((,c :inherit modus-themes-mark-sel)))
     `(calibredb-size-face (( )))
-    `(calibredb-tag-face ((,class :foreground ,magenta-alt-faint)))
+    `(calibredb-tag-face ((,c :foreground ,fg-alt)))
 ;;;;; centaur-tabs
-    `(centaur-tabs-active-bar-face ((,class :background ,blue-active)))
-    `(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)))
-    `(centaur-tabs-modified-marker-selected ((,class :inherit 
centaur-tabs-selected)))
-    `(centaur-tabs-modified-marker-unselected ((,class :inherit 
centaur-tabs-unselected)))
-    `(centaur-tabs-default ((,class :background ,bg-main)))
-    `(centaur-tabs-selected ((,class :inherit modus-themes-tab-active)))
-    `(centaur-tabs-selected-modified ((,class :inherit (italic 
centaur-tabs-selected))))
-    `(centaur-tabs-unselected ((,class :inherit modus-themes-tab-inactive)))
-    `(centaur-tabs-unselected-modified ((,class :inherit (italic 
centaur-tabs-unselected))))
-;;;;; cfrs
-    `(cfrs-border-color ((,class :background ,fg-window-divider-inner)))
+    `(centaur-tabs-active-bar-face ((,c :background ,blue)))
+    `(centaur-tabs-close-mouse-face ((,c :inherit bold :foreground ,red 
:underline t)))
+    `(centaur-tabs-close-selected ((,c :inherit centaur-tabs-selected)))
+    `(centaur-tabs-close-unselected ((,c :inherit centaur-tabs-unselected)))
+    `(centaur-tabs-modified-marker-selected ((,c :inherit 
centaur-tabs-selected)))
+    `(centaur-tabs-modified-marker-unselected ((,c :inherit 
centaur-tabs-unselected)))
+    `(centaur-tabs-default ((,c :background ,bg-main)))
+    `(centaur-tabs-selected ((,c :inherit bold :box (:line-width -2 :color 
,bg-tab-current) :background ,bg-tab-current)))
+    `(centaur-tabs-selected-modified ((,c :inherit (italic 
centaur-tabs-selected))))
+    `(centaur-tabs-unselected ((,c :box (:line-width -2 :color ,bg-tab-other) 
:background ,bg-tab-other)))
+    `(centaur-tabs-unselected-modified ((,c :inherit (italic 
centaur-tabs-unselected))))
 ;;;;; change-log and log-view (`vc-print-log' and `vc-print-root-log')
-    `(change-log-acknowledgment ((,class :inherit shadow)))
-    `(change-log-conditionals ((,class :foreground ,yellow)))
-    `(change-log-date ((,class :foreground ,cyan)))
-    `(change-log-email ((,class :foreground ,cyan-alt-other)))
-    `(change-log-file ((,class :inherit bold :foreground ,fg-special-cold)))
-    `(change-log-function ((,class :foreground ,green-alt-other)))
-    `(change-log-list ((,class :foreground ,magenta-alt)))
-    `(change-log-name ((,class :foreground ,magenta-alt-other)))
-    `(log-edit-header ((,class :foreground ,fg-special-warm)))
-    `(log-edit-headers-separator ((,class :height 1 :background 
,fg-window-divider-inner :extend t)))
-    `(log-edit-summary ((,class :inherit bold :foreground ,blue)))
-    `(log-edit-unknown-header ((,class :inherit shadow)))
-    `(log-view-commit-body ((,class :foreground ,blue-nuanced-fg)))
-    `(log-view-file ((,class :inherit bold :foreground ,fg-special-cold)))
-    `(log-view-message ((,class :background ,bg-alt :foreground ,fg-alt)))
+    `(change-log-acknowledgment ((,c :foreground ,identifier)))
+    `(change-log-conditionals ((,c :inherit error)))
+    `(change-log-date ((,c :foreground ,date-common)))
+    `(change-log-email ((,c :foreground ,fg-alt)))
+    `(change-log-file ((,c :inherit bold)))
+    `(change-log-function ((,c :inherit warning)))
+    `(change-log-list ((,c :inherit bold)))
+    `(change-log-name ((,c :foreground ,name)))
+    `(log-edit-header ((,c :inherit bold)))
+    `(log-edit-headers-separator ((,c :height 1 :background ,border :extend 
t)))
+    `(log-edit-summary ((,c :inherit bold :foreground ,blue)))
+    `(log-edit-unknown-header ((,c :inherit shadow)))
+    `(log-view-commit-body (( )))
+    `(log-view-file ((,c :inherit bold)))
+    `(log-view-message ((,c :foreground ,identifier)))
 ;;;;; 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-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)))
-    `(cider-docview-table-border-face ((,class :inherit shadow)))
-    `(cider-enlightened-face ((,class :box (:line-width -1 :color ,yellow-alt 
:style nil) :background ,bg-dim)))
-    `(cider-enlightened-local-face ((,class :inherit bold :foreground 
,yellow-alt-other)))
-    `(cider-error-highlight-face ((,class :foreground ,red :underline t)))
-    `(cider-fragile-button-face ((,class :box (:line-width 3 :color ,fg-alt 
:style released-button) :foreground ,yellow)))
-    `(cider-fringe-good-face ((,class :foreground ,green-active)))
-    `(cider-instrumented-face ((,class :box (:line-width -1 :color ,red :style 
nil) :background ,bg-dim)))
-    `(cider-reader-conditional-face ((,class :inherit italic :foreground 
,fg-special-warm)))
-    `(cider-repl-input-face ((,class :inherit bold)))
-    `(cider-repl-prompt-face ((,class :inherit modus-themes-prompt)))
-    `(cider-repl-stderr-face ((,class :inherit bold :foreground ,red)))
-    `(cider-repl-stdout-face ((,class :foreground ,blue)))
-    `(cider-result-overlay-face ((,class :box (:line-width -1 :color ,blue 
:style nil) :background ,bg-dim)))
-    `(cider-stacktrace-error-class-face ((,class :inherit bold :foreground 
,red)))
-    `(cider-stacktrace-error-message-face ((,class :inherit italic :foreground 
,red-alt-other)))
-    `(cider-stacktrace-face ((,class :foreground ,fg-main)))
-    `(cider-stacktrace-filter-active-face ((,class :foreground ,cyan-alt 
:underline t)))
-    `(cider-stacktrace-filter-inactive-face ((,class :foreground ,cyan-alt)))
-    `(cider-stacktrace-fn-face ((,class :inherit bold :foreground ,fg-main)))
-    `(cider-stacktrace-ns-face ((,class :inherit (shadow italic))))
-    `(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-themes-subtle-red)))
-    `(cider-test-failure-face ((,class :inherit (modus-themes-intense-red 
bold))))
-    `(cider-test-success-face ((,class :inherit 
modus-themes-grue-background-intense)))
-    `(cider-traced-face ((,class :box (:line-width -1 :color ,cyan :style nil) 
:background ,bg-dim)))
-    `(cider-warning-highlight-face ((,class :foreground ,yellow :underline t)))
+    `(cider-deprecated-face ((,c :inherit warning)))
+    `(cider-enlightened-face ((,c :box ,warning)))
+    `(cider-enlightened-local-face ((,c :inherit warning)))
+    `(cider-error-highlight-face ((,c :inherit modus-themes-lang-error)))
+    `(cider-fringe-good-face ((,c :foreground ,info)))
+    `(cider-instrumented-face ((,c :box ,err)))
+    `(cider-reader-conditional-face ((,c :inherit font-lock-type-face)))
+    `(cider-repl-prompt-face ((,c :inherit minibuffer-prompt)))
+    `(cider-repl-stderr-face ((,c :foreground ,err)))
+    `(cider-repl-stdout-face (( )))
+    `(cider-warning-highlight-face ((,c :inherit modus-themes-lang-warning)))
 ;;;;; circe (and lui)
-    `(circe-fool-face ((,class :inherit shadow)))
-    `(circe-highlight-nick-face ((,class :inherit bold :foreground ,blue)))
-    `(circe-prompt-face ((,class :inherit modus-themes-prompt)))
-    `(circe-server-face ((,class :foreground ,fg-unfocused)))
-    `(lui-button-face ((,class :inherit button)))
-    `(lui-highlight-face ((,class :foreground ,magenta-alt)))
-    `(lui-time-stamp-face ((,class :foreground ,blue-nuanced-fg)))
+    `(circe-fool-face ((,c :inherit shadow)))
+    `(circe-highlight-nick-face ((,c :inherit error)))
+    `(circe-prompt-face ((,c :inherit modus-themes-prompt)))
+    `(circe-server-face ((,c :inherit shadow)))
+    `(lui-button-face ((,c :inherit button)))
+    `(lui-highlight-face ((,c :inherit error)))
+    `(lui-time-stamp-face ((,c :foreground ,date-common)))
 ;;;;; citar
-    `(citar ((,class :inherit shadow)))
+    `(citar ((,c :inherit shadow)))
     `(citar-highlight (( )))
-;;;;; color-rg
-    `(color-rg-font-lock-column-number ((,class :foreground 
,magenta-alt-other)))
-    `(color-rg-font-lock-command ((,class :inherit bold :foreground ,fg-main)))
-    `(color-rg-font-lock-file ((,class :inherit bold :foreground 
,fg-special-cold)))
-    `(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)))
-    `(color-rg-font-lock-header-line-text ((,class :foreground ,fg-active)))
-    `(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-themes-special-calm)))
-    `(color-rg-font-lock-position-splitter ((,class :inherit shadow)))
+;;;;; clojure-mode
+    `(clojure-keyword-face ((,c :inherit font-lock-builtin-face)))
 ;;;;; column-enforce-mode
-    `(column-enforce-face ((,class :inherit modus-themes-refine-yellow)))
+    `(column-enforce-face ((,c :inherit modus-themes-intense-yellow)))
 ;;;;; company-mode
-    `(company-echo-common ((,class :inherit modus-themes-completion-match-0)))
-    `(company-preview ((,class :background ,bg-dim :foreground ,fg-dim)))
-    `(company-preview-common ((,class :inherit company-echo-common)))
-    `(company-preview-search ((,class :inherit modus-themes-special-calm)))
-    `(company-template-field ((,class :inherit modus-themes-intense-magenta)))
-    `(company-scrollbar-bg ((,class :background ,bg-active)))
-    `(company-scrollbar-fg ((,class :background ,fg-active)))
-    `(company-tooltip ((,class :background ,bg-alt)))
-    `(company-tooltip-annotation ((,class :inherit completions-annotations)))
-    `(company-tooltip-common ((,class :inherit company-echo-common)))
-    `(company-tooltip-deprecated ((,class :inherit company-tooltip 
:strike-through t)))
-    `(company-tooltip-mouse ((,class :inherit highlight)))
-    `(company-tooltip-scrollbar-thumb ((,class :background ,fg-active)))
-    `(company-tooltip-scrollbar-track ((,class :background ,bg-active)))
-    `(company-tooltip-search ((,class :inherit 
(modus-themes-search-success-lazy bold))))
-    `(company-tooltip-search-selection ((,class :inherit 
modus-themes-search-success :underline t)))
-    `(company-tooltip-selection ((,class :inherit 
modus-themes-completion-selected-popup)))
-;;;;; 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)))
+    `(company-echo-common ((,c :inherit modus-themes-completion-match-0)))
+    `(company-preview ((,c :background ,bg-dim :foreground ,fg-dim)))
+    `(company-preview-common ((,c :inherit company-echo-common)))
+    `(company-preview-search ((,c :background ,bg-yellow-intense)))
+    `(company-scrollbar-bg ((,c :background ,bg-active)))
+    `(company-scrollbar-fg ((,c :background ,fg-main)))
+    `(company-template-field ((,c :background ,bg-active)))
+    `(company-tooltip ((,c :background ,bg-inactive)))
+    `(company-tooltip-annotation ((,c :inherit completions-annotations)))
+    `(company-tooltip-common ((,c :inherit company-echo-common)))
+    `(company-tooltip-deprecated ((,c :inherit company-tooltip :strike-through 
t)))
+    `(company-tooltip-mouse ((,c :inherit highlight)))
+    `(company-tooltip-scrollbar-thumb ((,c :background ,fg-alt)))
+    `(company-tooltip-scrollbar-track ((,c :background ,bg-inactive)))
+    `(company-tooltip-search ((,c :inherit secondary-selection)))
+    `(company-tooltip-search-selection ((,c :inherit secondary-selection 
:underline t)))
+    `(company-tooltip-selection ((,c :inherit 
modus-themes-completion-selected)))
 ;;;;; compilation
-    `(compilation-column-number ((,class :inherit compilation-line-number)))
-    `(compilation-error ((,class :inherit modus-themes-bold :foreground ,red)))
-    `(compilation-info ((,class :inherit modus-themes-bold :foreground 
,fg-special-cold)))
-    `(compilation-line-number ((,class :foreground ,fg-special-warm)))
-    `(compilation-mode-line-exit ((,class :inherit bold)))
-    `(compilation-mode-line-fail ((,class :inherit modus-themes-bold 
:foreground ,red-active)))
-    `(compilation-mode-line-run ((,class :inherit modus-themes-bold 
:foreground ,cyan-active)))
-    `(compilation-warning ((,class :inherit modus-themes-bold :foreground 
,yellow-alt)))
+    `(compilation-column-number ((,c :inherit compilation-line-number)))
+    `(compilation-error ((,c :inherit modus-themes-bold :foreground ,err)))
+    `(compilation-info ((,c :inherit modus-themes-bold :foreground ,info)))
+    `(compilation-line-number ((,c :inherit shadow)))
+    `(compilation-mode-line-exit ((,c :inherit bold)))
+    `(compilation-mode-line-fail ((,c :inherit bold :foreground 
,modeline-err)))
+    `(compilation-mode-line-run ((,c :inherit bold :foreground 
,modeline-warning)))
+    `(compilation-warning ((,c :inherit warning)))
 ;;;;; completions
-    `(completions-annotations ((,class :inherit modus-themes-slant :foreground 
,cyan-faint)))
-    `(completions-common-part ((,class :inherit 
modus-themes-completion-match-0)))
-    `(completions-first-difference ((,class :inherit 
modus-themes-completion-match-1)))
+    `(completions-annotations ((,c :inherit modus-themes-slant :foreground 
,docstring)))
+    `(completions-common-part ((,c :inherit modus-themes-completion-match-0)))
+    `(completions-first-difference ((,c :inherit 
modus-themes-completion-match-1)))
 ;;;;; consult
-    `(consult-async-running ((,class :inherit bold :foreground ,blue)))
-    `(consult-async-split ((,class :foreground ,magenta-alt)))
-    `(consult-bookmark ((,class :foreground ,blue)))
-    `(consult-file ((,class :foreground ,fg-special-cold)))
-    `(consult-imenu-prefix ((,class :inherit shadow)))
-    `(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-themes-intense-blue)))
-    `(consult-preview-insertion ((,class :inherit modus-themes-special-warm)))
+    `(consult-async-split ((,c :inherit error)))
+    `(consult-key ((,c :inherit modus-themes-key-binding)))
+    `(consult-imenu-prefix ((,c :inherit shadow)))
+    `(consult-line-number ((,c :inherit shadow)))
 ;;;;; corfu
-    `(corfu-current ((,class :inherit modus-themes-completion-selected-popup)))
-    `(corfu-bar ((,class :background ,fg-alt)))
-    `(corfu-border ((,class :background ,bg-active)))
-    `(corfu-default ((,class :background ,bg-alt)))
+    `(corfu-current ((,c :inherit modus-themes-completion-selected)))
+    `(corfu-bar ((,c :background ,fg-dim)))
+    `(corfu-border ((,c :background ,bg-active)))
+    `(corfu-default ((,c :background ,bg-dim)))
 ;;;;; corfu-quick
-    `(corfu-quick1 ((,class :inherit bold :background ,bg-char-0)))
-    `(corfu-quick2 ((,class :inherit bold :background ,bg-char-1)))
+    `(corfu-quick1 ((,c :inherit bold :background ,bg-char-0)))
+    `(corfu-quick2 ((,c :inherit bold :background ,bg-char-1)))
 ;;;;; counsel
-    `(counsel-active-mode ((,class :foreground ,magenta-alt-other)))
-    `(counsel-application-name ((,class :foreground ,red-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)))
-    `(counsel-outline-4 ((,class :inherit org-level-4)))
-    `(counsel-outline-5 ((,class :inherit org-level-5)))
-    `(counsel-outline-6 ((,class :inherit org-level-6)))
-    `(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-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)))
-    `(counsel-css-selector-depth-face-3 ((,class :foreground ,green)))
-    `(counsel-css-selector-depth-face-4 ((,class :foreground ,yellow)))
-    `(counsel-css-selector-depth-face-5 ((,class :foreground ,magenta)))
-    `(counsel-css-selector-depth-face-6 ((,class :foreground ,red)))
-;;;;; cov
-    `(cov-coverage-not-run-face ((,class :foreground ,red-intense)))
-    `(cov-coverage-run-face ((,class :foreground ,green-intense)))
-    `(cov-heavy-face ((,class :foreground ,magenta-intense)))
-    `(cov-light-face ((,class :foreground ,blue-intense)))
-    `(cov-med-face ((,class :foreground ,yellow-intense)))
-    `(cov-none-face ((,class :foreground ,cyan-intense)))
+    `(counsel-active-mode ((,c :foreground ,keyword)))
+    `(counsel-application-name ((,c :foreground ,name)))
+    `(counsel-key-binding ((,c :inherit modus-themes-key-binding)))
+    `(counsel-outline-default ((,c :foreground ,fg-main)))
+    `(counsel-variable-documentation ((,c :inherit font-lock-doc-face)))
 ;;;;; cperl-mode
-    `(cperl-nonoverridable-face ((,class :foreground unspecified)))
-    `(cperl-array-face ((,class :inherit font-lock-keyword-face)))
-    `(cperl-hash-face ((,class :inherit font-lock-variable-name-face)))
+    `(cperl-nonoverridable-face ((,c :foreground unspecified)))
+    `(cperl-array-face ((,c :inherit font-lock-keyword-face)))
+    `(cperl-hash-face ((,c :inherit font-lock-variable-name-face)))
 ;;;;; crontab-mode
-    `(crontab-minute ((,class :foreground ,blue-alt)))
-    `(crontab-hour ((,class :foreground ,magenta-alt-other)))
-    `(crontab-month-day ((,class :foreground ,magenta-alt)))
-    `(crontab-month ((,class :foreground ,blue)))
-    `(crontab-week-day ((,class :foreground ,cyan)))
-    `(crontab-predefined ((,class :foreground ,blue-alt)))
+    `(crontab-minute ((,c :foreground ,string)))
+    `(crontab-hour ((,c :foreground ,keyword)))
+    `(crontab-month-day ((,c :foreground ,builtin)))
+    `(crontab-month ((,c :foreground ,constant)))
+    `(crontab-week-day ((,c :foreground ,variable)))
+    `(crontab-predefined ((,c :foreground ,string)))
 ;;;;; css-mode
-    `(css-property ((,class :inherit font-lock-type-face)))
-    `(css-selector ((,class :inherit font-lock-keyword-face)))
+    `(css-property ((,c :inherit font-lock-type-face)))
+    `(css-selector ((,c :inherit font-lock-keyword-face)))
 ;;;;; csv-mode
-    `(csv-separator-face ((,class :foreground ,red-intense)))
+    `(csv-separator-face ((,c :foreground ,red-intense)))
 ;;;;; ctrlf
-    `(ctrlf-highlight-active ((,class :inherit modus-themes-search-success)))
-    `(ctrlf-highlight-line ((,class :inherit modus-themes-hl-line)))
-    `(ctrlf-highlight-passive ((,class :inherit 
modus-themes-search-success-lazy)))
+    `(ctrlf-highlight-active ((,c :inherit modus-themes-search-current)))
+    `(ctrlf-highlight-line ((,c :inherit highlight)))
+    `(ctrlf-highlight-passive ((,c :inherit modus-themes-search-lazy)))
 ;;;;; custom (M-x customize)
-    `(custom-button ((,class :inherit modus-themes-box-button)))
-    `(custom-button-mouse ((,class :inherit (highlight custom-button))))
-    `(custom-button-pressed ((,class :inherit 
modus-themes-box-button-pressed)))
-    `(custom-changed ((,class :inherit modus-themes-subtle-cyan)))
-    `(custom-comment ((,class :inherit shadow)))
-    `(custom-comment-tag ((,class :background ,bg-alt :foreground 
,yellow-alt-other)))
-    `(custom-face-tag ((,class :inherit bold :foreground ,blue-intense)))
-    `(custom-group-tag ((,class :inherit modus-themes-pseudo-header 
:foreground ,magenta-alt)))
-    `(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 ,red-alt-faint)))
-    `(custom-themed ((,class :inherit modus-themes-subtle-blue)))
-    `(custom-variable-obsolete ((,class :inherit shadow)))
-    `(custom-variable-tag ((,class :foreground ,cyan)))
-;;;;; dap-mode
-    `(dap-mouse-eval-thing-face ((,class :box (:line-width -1 :color 
,blue-active :style nil)
-                                         :background ,bg-active :foreground 
,fg-main)))
-    `(dap-result-overlay-face ((,class :box (:line-width -1 :color ,bg-active 
:style nil)
-                                       :background ,bg-active :foreground 
,fg-main)))
-    `(dap-ui-breakpoint-verified-fringe ((,class :inherit bold :foreground 
,green-active)))
-    `(dap-ui-compile-errline ((,class :inherit bold :foreground ,red-intense)))
-    `(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-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)))
+    `(custom-button ((,c :inherit modus-themes-button)))
+    `(custom-button-mouse ((,c :inherit (highlight custom-button))))
+    `(custom-button-pressed ((,c :inherit (secondary-selection 
custom-button))))
+    `(custom-changed ((,c :background ,bg-changed)))
+    `(custom-comment ((,c :inherit shadow)))
+    `(custom-comment-tag ((,c :inherit (bold shadow))))
+    `(custom-invalid ((,c :inherit error :strike-through t)))
+    `(custom-modified ((,c :inherit custom-changed)))
+    `(custom-rogue ((,c :inherit custom-invalid)))
+    `(custom-set ((,c :inherit success)))
+    `(custom-state ((,c :foreground ,warning)))
+    `(custom-themed ((,c :inherit custom-changed)))
+    `(custom-variable-obsolete ((,c :inherit shadow)))
+    `(custom-face-tag ((,c :inherit bold :foreground ,type)))
+    `(custom-group-tag ((,c :inherit bold :foreground ,builtin)))
+    `(custom-group-tag-1 ((,c :inherit bold :foreground ,constant)))
+    `(custom-variable-tag ((,c :inherit bold :foreground ,variable)))
 ;;;;; deadgrep
-    `(deadgrep-filename-face ((,class :inherit bold :foreground 
,fg-special-cold)))
-    `(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)))
-;;;;; debbugs
-    `(debbugs-gnu-archived ((,class :inverse-video t)))
-    `(debbugs-gnu-done ((,class :inherit shadow)))
-    `(debbugs-gnu-forwarded ((,class :foreground ,fg-special-warm)))
-    `(debbugs-gnu-handled ((,class :foreground ,blue)))
-    `(debbugs-gnu-new ((,class :foreground ,red)))
-    `(debbugs-gnu-pending ((,class :foreground ,cyan)))
-    `(debbugs-gnu-stale-1 ((,class :foreground ,yellow-nuanced-fg)))
-    `(debbugs-gnu-stale-2 ((,class :foreground ,yellow)))
-    `(debbugs-gnu-stale-3 ((,class :foreground ,yellow-alt)))
-    `(debbugs-gnu-stale-4 ((,class :foreground ,yellow-alt-other)))
-    `(debbugs-gnu-stale-5 ((,class :foreground ,red-alt)))
-    `(debbugs-gnu-tagged ((,class :foreground ,magenta-alt)))
+    `(deadgrep-filename-face ((,c :inherit bold :foreground ,name)))
+    `(deadgrep-match-face ((,c :inherit match)))
+    `(deadgrep-meta-face ((,c :inherit shadow)))
+    `(deadgrep-regexp-metachar-face ((,c :inherit 
font-lock-regexp-grouping-construct)))
+    `(deadgrep-search-term-face ((,c :inherit success)))
 ;;;;; deft
-    `(deft-filter-string-face ((,class :inherit bold :foreground ,blue)))
-    `(deft-header-face ((,class :foreground ,fg-special-warm)))
-    `(deft-separator-face ((,class :foreground "gray50")))
-    `(deft-summary-face ((,class :inherit (shadow modus-themes-slant))))
-    `(deft-time-face ((,class :foreground ,cyan)))
-    `(deft-title-face ((,class :inherit bold)))
-;;;;; denote
-    `(denote-faces-date ((,class :foreground ,cyan)))
-    `(denote-faces-keywords ((,class :inherit modus-themes-bold :foreground 
,magenta-alt)))
+    `(deft-filter-string-face ((,c :inherit success)))
+    `(deft-header-face ((,c :inherit shadow)))
+    `(deft-separator-face ((,c :foreground "gray50")))
+    `(deft-summary-face ((,c :inherit (shadow modus-themes-slant))))
+    `(deft-time-face ((,c :foreground ,date-common)))
+    `(deft-title-face ((,c :inherit bold)))
 ;;;;; devdocs
-    `(devdocs-code-block ((,class :inherit modus-themes-fixed-pitch 
:background ,bg-dim :extend t)))
+    `(devdocs-code-block ((,c :inherit modus-themes-fixed-pitch :background 
,bg-dim :extend t)))
 ;;;;; dictionary
-    `(dictionary-button-face ((,class :inherit bold :foreground 
,fg-special-cold)))
-    `(dictionary-reference-face ((,class :inherit button)))
-    `(dictionary-word-definition-face (()))
-    `(dictionary-word-entry-face ((,class :inherit font-lock-comment-face)))
+    `(dictionary-button-face ((,c :inherit bold)))
+    `(dictionary-reference-face ((,c :inherit link)))
+    `(dictionary-word-definition-face (( )))
+    `(dictionary-word-entry-face ((,c :inherit font-lock-comment-face)))
 ;;;;; diff-hl
-    `(diff-hl-change ((,class :inherit modus-themes-fringe-yellow)))
-    `(diff-hl-delete ((,class :inherit modus-themes-fringe-red)))
-    `(diff-hl-insert ((,class :inherit modus-themes-grue-background-active)))
-    `(diff-hl-reverted-hunk-highlight ((,class :background ,fg-main 
:foreground ,bg-main)))
+    `(diff-hl-change ((,c :background ,bg-changed-intense)))
+    `(diff-hl-delete ((,c :background ,bg-removed-intense)))
+    `(diff-hl-insert ((,c :background ,bg-added-intense)))
+    `(diff-hl-reverted-hunk-highlight ((,c :background ,fg-main :foreground 
,bg-main)))
 ;;;;; diff-mode
-    `(diff-added ((,class :inherit modus-themes-diff-added)))
-    `(diff-changed ((,class :inherit modus-themes-diff-changed :extend t)))
-    `(diff-changed-unspecified ((,class :inherit diff-changed)))
-    `(diff-context ((,class ,@(unless (eq modus-themes-diffs 'bg-only) (list 
:foreground fg-unfocused)))))
-    `(diff-error ((,class :inherit modus-themes-intense-red)))
-    `(diff-file-header ((,class :inherit (bold diff-header))))
-    `(diff-function ((,class :inherit modus-themes-diff-heading)))
-    `(diff-header ((,class :foreground ,fg-main)))
-    `(diff-hunk-header ((,class :inherit (bold modus-themes-diff-heading))))
-    `(diff-index ((,class :inherit bold :foreground ,blue-alt)))
-    `(diff-indicator-added ((,class :inherit (modus-themes-grue diff-added 
bold))))
-    `(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-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)))
+    `(diff-added ((,c :background ,bg-added)))
+    `(diff-changed ((,c :background ,bg-changed :extend t)))
+    `(diff-changed-unspecified ((,c :inherit diff-changed)))
+    `(diff-removed ((,c :background ,bg-removed)))
+    `(diff-refine-added ((,c :background ,bg-added-refine)))
+    `(diff-refine-changed ((,c :background ,bg-changed-refine)))
+    `(diff-refine-removed ((,c :background ,bg-removed-refine)))
+    `(diff-indicator-added ((,c :inherit diff-added :foreground 
,fg-added-intense)))
+    `(diff-indicator-changed ((,c :inherit diff-changed :foreground 
,fg-changed-intense)))
+    `(diff-indicator-removed ((,c :inherit diff-removed :foreground 
,fg-removed-intense)))
+    `(diff-context (( )))
+    `(diff-error ((,c :inherit error)))
+    `(diff-file-header ((,c :inherit bold)))
+    `(diff-function ((,c :background ,bg-inactive)))
+    `(diff-header (( )))
+    `(diff-hunk-header ((,c :inherit bold :background ,bg-inactive)))
+    `(diff-index ((,c :inherit italic)))
+    `(diff-nonexistent ((,c :inherit bold)))
 ;;;;; dim-autoload
-    `(dim-autoload-cookie-line ((,class :inherit font-lock-comment-face)))
-;;;;; dir-treeview
-    `(dir-treeview-archive-face ((,class :foreground ,fg-special-warm)))
-    `(dir-treeview-archive-icon-face ((,class :inherit 
dir-treeview-default-icon-face :foreground ,yellow)))
-    `(dir-treeview-audio-face ((,class :foreground ,magenta)))
-    `(dir-treeview-audio-icon-face ((,class :inherit 
dir-treeview-default-icon-face :foreground ,magenta-alt)))
-    `(dir-treeview-control-face ((,class :inherit shadow)))
-    `(dir-treeview-control-mouse-face ((,class :inherit highlight)))
-    `(dir-treeview-default-icon-face ((,class :inherit (shadow bold) :family 
"Font Awesome")))
-    `(dir-treeview-default-filename-face ((,class :foreground ,fg-main)))
-    `(dir-treeview-directory-face ((,class :foreground ,blue)))
-    `(dir-treeview-directory-icon-face ((,class :inherit 
dir-treeview-default-icon-face :foreground ,blue-alt)))
-    `(dir-treeview-executable-face ((,class :foreground ,red-alt)))
-    `(dir-treeview-executable-icon-face ((,class :inherit 
dir-treeview-default-icon-face :foreground ,red-alt-other)))
-    `(dir-treeview-image-face ((,class :foreground ,green-alt-other)))
-    `(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-themes-pseudo-header)))
-    `(dir-treeview-symlink-face ((,class :inherit modus-themes-link-symlink)))
-    `(dir-treeview-video-face ((,class :foreground ,magenta-alt-other)))
-    `(dir-treeview-video-icon-face ((,class :inherit 
dir-treeview-default-icon-face :foreground ,magenta-alt-other)))
+    `(dim-autoload-cookie-line ((,c :inherit font-lock-comment-face)))
 ;;;;; dired
-    `(dired-broken-symlink ((,class :inherit modus-themes-link-broken)))
-    `(dired-directory ((,class :foreground ,blue)))
-    `(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-themes-mark-symbol)))
-    `(dired-marked ((,class :inherit modus-themes-mark-sel)))
-    `(dired-perm-write ((,class :foreground ,fg-special-warm)))
-    `(dired-symlink ((,class :inherit modus-themes-link-symlink)))
-    `(dired-warning ((,class :inherit bold :foreground ,yellow)))
+    `(dired-broken-symlink ((,c :inherit button :foreground ,err)))
+    `(dired-directory ((,c :foreground ,accent-0)))
+    `(dired-flagged ((,c :inherit modus-themes-mark-del)))
+    `(dired-header ((,c :inherit bold)))
+    `(dired-ignored ((,c :inherit shadow)))
+    `(dired-mark ((,c :inherit bold)))
+    `(dired-marked ((,c :inherit modus-themes-mark-sel)))
+    `(dired-perm-write ((,c :inherit shadow)))
+    `(dired-symlink ((,c :inherit button :background ,bg-link-symbolic 
:foreground ,fg-link-symbolic :underline ,underline-link-symbolic)))
+    `(dired-warning ((,c :inherit warning)))
 ;;;;; dired-async
-    `(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-async-failures ((,c :inherit error)))
+    `(dired-async-message ((,c :inherit bold)))
+    `(dired-async-mode-message ((,c :inherit bold)))
 ;;;;; 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-branch-else ((,c :inherit bold :foreground ,accent-0)))
+    `(dired-git-branch-master ((,c :inherit bold :foreground ,accent-1)))
 ;;;;; dired-git-info
-    `(dgi-commit-message-face ((,class :foreground ,cyan-alt-other)))
+    `(dgi-commit-message-face ((,c :foreground ,docstring)))
 ;;;;; dired-narrow
-    `(dired-narrow-blink ((,class :inherit (modus-themes-subtle-cyan bold))))
+    `(dired-narrow-blink ((,c :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
@@ -4974,739 +1938,410 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(dired-subtree-depth-5-face (()))
     `(dired-subtree-depth-6-face (()))
 ;;;;; diredfl
-    `(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)))
-    `(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-alt)))
-    `(diredfl-executable-tag ((,class :foreground ,magenta-alt)))
-    `(diredfl-file-name ((,class :foreground ,fg-main)))
-    `(diredfl-file-suffix ((,class :foreground ,magenta-alt-other)))
-    `(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 :foreground "gray50")))
-    `(diredfl-number ((,class :foreground ,cyan-alt-other-faint)))
-    `(diredfl-other-priv ((,class :foreground ,yellow)))
-    `(diredfl-rare-priv ((,class :foreground ,red)))
-    `(diredfl-read-priv ((,class :foreground ,fg-main)))
-    `(diredfl-symlink ((,class :inherit dired-symlink)))
-    `(diredfl-tagged-autofile-name ((,class :inherit 
modus-themes-refine-magenta)))
-    `(diredfl-write-priv ((,class :foreground ,cyan)))
-;;;;; dired+
-    `(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)))
-    `(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-alt)))
-    `(diredp-executable-tag ((,class :foreground ,magenta-alt)))
-    `(diredp-file-name ((,class :foreground ,fg-main)))
-    `(diredp-file-suffix ((,class :foreground ,magenta-alt-other)))
-    `(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)))
-    `(diredp-mode-line-marked ((,class :foreground ,green-active)))
-    `(diredp-no-priv ((,class :foreground "gray50")))
-    `(diredp-number ((,class :foreground ,cyan-alt-other-faint)))
-    `(diredp-omit-file-name ((,class :inherit shadow :strike-through t)))
-    `(diredp-other-priv ((,class :foreground ,yellow)))
-    `(diredp-rare-priv ((,class :foreground ,red)))
-    `(diredp-read-priv ((,class :foreground ,fg-main)))
-    `(diredp-symlink ((,class :inherit dired-symlink)))
-    `(diredp-tagged-autofile-name ((,class :inherit 
modus-themes-refine-magenta)))
-    `(diredp-write-priv ((,class :foreground ,cyan)))
+    `(diredfl-autofile-name ((,c :background ,bg-inactive)))
+    `(diredfl-compressed-file-name ((,c :foreground ,warning)))
+    `(diredfl-compressed-file-suffix ((,c :foreground ,err)))
+    `(diredfl-date-time ((,c :foreground ,date-common)))
+    `(diredfl-deletion ((,c :inherit dired-flagged)))
+    `(diredfl-deletion-file-name ((,c :inherit diredfl-deletion)))
+    `(diredfl-dir-heading ((,c :inherit bold)))
+    `(diredfl-dir-name ((,c :inherit dired-directory)))
+    `(diredfl-dir-priv ((,c :inherit dired-directory)))
+    `(diredfl-exec-priv ((,c :foreground ,accent-1)))
+    `(diredfl-executable-tag ((,c :inherit diredfl-exec-priv)))
+    `(diredfl-file-name ((,c :foreground ,fg-main)))
+    `(diredfl-file-suffix ((,c :foreground ,variable)))
+    `(diredfl-flag-mark ((,c :inherit dired-marked)))
+    `(diredfl-flag-mark-line ((,c :inherit dired-marked)))
+    `(diredfl-ignored-file-name ((,c :inherit shadow)))
+    `(diredfl-link-priv ((,c :foreground ,fg-link)))
+    `(diredfl-no-priv ((,c :inherit shadow)))
+    `(diredfl-number ((,c :inherit shadow)))
+    `(diredfl-other-priv ((,c :foreground ,accent-2)))
+    `(diredfl-rare-priv ((,c :foreground ,accent-3)))
+    `(diredfl-read-priv ((,c :foreground ,fg-main)))
+    `(diredfl-symlink ((,c :inherit dired-symlink)))
+    `(diredfl-tagged-autofile-name ((,c :inherit (diredfl-autofile-name 
dired-marked))))
+    `(diredfl-write-priv ((,c :foreground ,accent-0)))
 ;;;;; display-fill-column-indicator-mode
-    `(fill-column-indicator ((,class :height 1 :background ,bg-region 
:foreground ,bg-region)))
+    `(fill-column-indicator ((,c :height 1 :background ,bg-active :foreground 
,bg-active)))
 ;;;;; doom-modeline
-    `(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)))
-    `(doom-modeline-battery-error ((,class :inherit bold :box (:line-width -2)
-                                           :foreground ,red-active)))
-    `(doom-modeline-battery-full ((,class :foreground ,blue-active)))
-    `(doom-modeline-battery-normal ((,class :foreground ,fg-active)))
-    `(doom-modeline-battery-warning ((,class :inherit bold :foreground 
,yellow-active)))
-    `(doom-modeline-buffer-file ((,class :inherit bold :foreground 
,fg-active)))
-    `(doom-modeline-buffer-major-mode ((,class :inherit bold :foreground 
,cyan-active)))
-    `(doom-modeline-buffer-minor-mode ((,class :foreground ,fg-inactive)))
-    `(doom-modeline-buffer-modified ((,class :inherit bold :foreground 
,magenta-active)))
-    `(doom-modeline-buffer-path ((,class :inherit bold :foreground 
,fg-active)))
-    `(doom-modeline-debug ((,class :inherit bold :foreground ,yellow-active)))
-    `(doom-modeline-debug-visual ((,class :inherit bold :foreground 
,red-active)))
-    `(doom-modeline-evil-emacs-state ((,class :inherit bold :foreground 
,magenta-active)))
-    `(doom-modeline-evil-insert-state ((,class :inherit bold :foreground 
,green-active)))
-    `(doom-modeline-evil-motion-state ((,class :inherit bold :foreground 
,fg-inactive)))
-    `(doom-modeline-evil-normal-state ((,class :inherit bold :foreground 
,fg-active)))
-    `(doom-modeline-evil-operator-state ((,class :inherit bold :foreground 
,blue-active)))
-    `(doom-modeline-evil-replace-state ((,class :inherit bold :foreground 
,red-active)))
-    `(doom-modeline-evil-visual-state ((,class :inherit bold :foreground 
,cyan-active)))
-    `(doom-modeline-highlight ((,class :inherit bold :foreground 
,blue-active)))
-    `(doom-modeline-host ((,class :inherit italic)))
-    `(doom-modeline-info ((,class :foreground ,green-active)))
-    `(doom-modeline-lsp-error ((,class :inherit bold :foreground ,red-active)))
-    `(doom-modeline-lsp-success ((,class :inherit (bold 
modus-themes-grue-active))))
-    `(doom-modeline-lsp-warning ((,class :inherit bold :foreground 
,yellow-active)))
-    `(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)))
-    `(doom-modeline-project-parent-dir ((,class :foreground ,blue-active)))
-    `(doom-modeline-project-root-dir ((,class :foreground ,fg-active)))
-    `(doom-modeline-unread-number ((,class :inherit italic :foreground 
,fg-active)))
-    `(doom-modeline-urgent ((,class :inherit bold :foreground ,red-active)))
-    `(doom-modeline-warning ((,class :inherit bold :foreground 
,yellow-active)))
-;;;;; easy-jekyll
-    `(easy-jekyll-help-face ((,class :background ,bg-dim :foreground 
,blue-alt-other)))
-;;;;; ebdb
-    `(ebdb-address-default ((,class :foreground ,fg-special-calm)))
-    `(ebdb-defunct ((,class :inherit shadow)))
-    `(ebdb-field-hidden ((,class :foreground ,magenta)))
-    `(ebdb-label ((,class :foreground ,cyan-alt-other)))
-    `(ebdb-mail-default ((,class :foreground ,fg-main)))
-    `(ebdb-mail-primary ((,class :foreground ,magenta-alt)))
-    `(ebdb-marked ((,class :background ,cyan-intense-bg)))
-    `(ebdb-organization-name ((,class :foreground ,red-alt-other)))
-    `(ebdb-person-name ((,class :foreground ,magenta-alt-other)))
-    `(ebdb-phone-default ((,class :foreground ,cyan)))
-    `(eieio-custom-slot-tag-face ((,class :foreground ,red-alt)))
+    `(doom-modeline-bar ((,c :background ,blue)))
+    `(doom-modeline-bar-inactive ((,c :background ,border)))
+    `(doom-modeline-battery-charging ((,c :foreground ,modeline-info)))
+    `(doom-modeline-battery-critical ((,c :underline t :foreground 
,modeline-err)))
+    `(doom-modeline-battery-error ((,c :underline t :foreground 
,modeline-err)))
+    `(doom-modeline-battery-full (( )))
+    `(doom-modeline-battery-warning ((,c :inherit warning)))
+    `(doom-modeline-buffer-file ((,c :inherit bold)))
+    `(doom-modeline-buffer-major-mode (( )))
+    `(doom-modeline-buffer-minor-mode (( )))
+    `(doom-modeline-buffer-modified ((,c :foreground ,modeline-err)))
+    `(doom-modeline-buffer-path (( )))
+    `(doom-modeline-evil-emacs-state ((,c :inherit italic)))
+    `(doom-modeline-evil-insert-state ((,c :foreground ,modeline-info)))
+    `(doom-modeline-evil-motion-state (( )))
+    `(doom-modeline-evil-normal-state (( )))
+    `(doom-modeline-evil-operator-state ((,c :inherit bold)))
+    `(doom-modeline-evil-replace-state ((,c :inherit error)))
+    `(doom-modeline-evil-visual-state ((,c :inherit warning)))
+    `(doom-modeline-info ((,c :inherit success)))
+    `(doom-modeline-input-method (( )))
+    `(doom-modeline-lsp-error ((,c :inherit bold-italic)))
+    `(doom-modeline-lsp-running (( )))
+    `(doom-modeline-lsp-success ((,c :inherit success)))
+    `(doom-modeline-lsp-warning ((,c :inherit warning)))
+    `(doom-modeline-notification ((,c :inherit error)))
+    `(doom-modeline-project-dir (( )))
+    `(doom-modeline-project-parent-dir (( )))
+    `(doom-modeline-project-root-dir (( )))
+    `(doom-modeline-repl-success ((,c :inherit success)))
+    `(doom-modeline-repl-warning ((,c :inherit warning)))
+    `(doom-modeline-time (( )))
+    `(doom-modeline-urgent ((,c :inherit bold-italic :foreground 
,modeline-err)))
+    `(doom-modeline-warning ((,c :inherit warning)))
 ;;;;; ediff
-    `(ediff-current-diff-A ((,class :inherit modus-themes-diff-removed)))
-    `(ediff-current-diff-Ancestor ((,class ,@(modus-themes--diff
-                                              bg-special-cold fg-special-cold
-                                              blue-nuanced-bg blue))))
-    `(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)))
+    `(ediff-current-diff-A ((,c :inherit diff-removed)))
+    `(ediff-current-diff-Ancestor ((,c :background ,bg-region))) ; TODO 
2022-11-29: Needs review
+    `(ediff-current-diff-B ((,c :inherit diff-added)))
+    `(ediff-current-diff-C ((,c :inherit diff-changed)))
+    `(ediff-even-diff-A ((,c :background ,bg-dim)))
+    `(ediff-even-diff-Ancestor ((,c :background ,bg-dim)))
+    `(ediff-even-diff-B ((,c :background ,bg-dim)))
+    `(ediff-even-diff-C ((,c :background ,bg-dim)))
+    `(ediff-fine-diff-A ((,c :inherit diff-refine-removed)))
+    `(ediff-fine-diff-Ancestor ((,c :inherit diff-refine-cyan)))
+    `(ediff-fine-diff-B ((,c :inherit diff-refine-added)))
+    `(ediff-fine-diff-C ((,c :inherit diff-refine-changed)))
+    `(ediff-odd-diff-A ((,c :inherit ediff-even-diff-A)))
+    `(ediff-odd-diff-Ancestor ((,c :inherit ediff-even-diff-Ancestor)))
+    `(ediff-odd-diff-B ((,c :inherit ediff-even-diff-B)))
+    `(ediff-odd-diff-C ((,c :inherit ediff-even-diff-C)))
 ;;;;; ein (Emacs IPython Notebook)
-    `(ein:basecell-input-area-face ((,class :background ,bg-dim :extend t)))
+    `(ein:basecell-input-area-face ((,c :background ,bg-dim :extend t)))
     `(ein:cell-output-area (( )))
-    `(ein:cell-output-area-error ((,class :background ,red-nuanced-bg :extend 
t)))
-    `(ein:cell-output-stderr ((,class :background ,red-nuanced-bg :extend t)))
+    `(ein:cell-output-area-error ((,c :background ,bg-removed :extend t)))
+    `(ein:cell-output-stderr ((,c :background ,bg-removed :extend t)))
     `(ein:markdowncell-input-area-face (( )))
-    `(ein:notification-tab-normal ((,class :underline t)))
+    `(ein:notification-tab-normal ((,c :underline t)))
 ;;;;; eglot
-    `(eglot-mode-line ((,class :inherit modus-themes-bold :foreground 
,magenta-active)))
+    `(eglot-mode-line ((,c :inherit bold :foreground ,modeline-info)))
 ;;;;; el-search
-    `(el-search-highlight-in-prompt-face ((,class :inherit bold :foreground 
,magenta-alt)))
-    `(el-search-match ((,class :inherit modus-themes-search-success)))
-    `(el-search-other-match ((,class :inherit modus-themes-special-mild)))
-    `(el-search-occur-match ((,class :inherit modus-themes-special-calm)))
+    `(el-search-highlight-in-prompt-face ((,c :inherit italic)))
+    `(el-search-match ((,c :inherit modus-themes-search-current)))
+    `(el-search-other-match ((,c :inherit modus-themes-search-lazy)))
+    `(el-search-occur-match ((,c :inherit match)))
 ;;;;; eldoc
     ;; NOTE: see https://github.com/purcell/package-lint/issues/187
-    (list 'eldoc-highlight-function-argument `((,class :inherit bold
-                                                       :background 
,yellow-nuanced-bg
-                                                       :foreground 
,yellow-alt-other)))
+    (list 'eldoc-highlight-function-argument `((,c :inherit 
modus-themes-mark-alt)))
 ;;;;; eldoc-box
-    `(eldoc-box-body ((,class :background ,bg-alt :foreground ,fg-main)))
-    `(eldoc-box-border ((,class :background ,fg-alt)))
+    `(eldoc-box-body ((,c :background ,bg-dim :foreground ,fg-main)))
+    `(eldoc-box-border ((,c :background ,border)))
 ;;;;; elfeed
-    `(elfeed-log-date-face ((,class :inherit elfeed-search-date-face)))
-    `(elfeed-log-debug-level-face ((,class :inherit 
elfeed-search-filter-face)))
-    `(elfeed-log-error-level-face ((,class :inherit error)))
-    `(elfeed-log-info-level-face ((,class :inherit success)))
-    `(elfeed-log-warn-level-face ((,class :inherit warning)))
-    `(elfeed-search-date-face ((,class :foreground ,cyan)))
-    `(elfeed-search-feed-face ((,class :foreground ,blue-faint)))
-    `(elfeed-search-filter-face ((,class :inherit bold :foreground 
,magenta-active)))
-    `(elfeed-search-last-update-face ((,class :inherit bold :foreground 
,cyan-active)))
-    `(elfeed-search-tag-face ((,class :foreground ,magenta-alt-faint)))
-    `(elfeed-search-title-face ((,class :foreground ,fg-dim)))
-    `(elfeed-search-unread-count-face ((,class :inherit bold :foreground 
,fg-active)))
-    `(elfeed-search-unread-title-face ((,class :inherit bold :foreground 
,fg-main)))
+    `(elfeed-log-date-face ((,c :inherit elfeed-search-date-face)))
+    `(elfeed-log-debug-level-face ((,c :inherit elfeed-search-filter-face)))
+    `(elfeed-log-error-level-face ((,c :inherit error)))
+    `(elfeed-log-info-level-face ((,c :inherit success)))
+    `(elfeed-log-warn-level-face ((,c :inherit warning)))
+    `(elfeed-search-date-face ((,c :foreground ,date-common)))
+    `(elfeed-search-feed-face ((,c :foreground ,accent-1)))
+    `(elfeed-search-filter-face ((,c :inherit bold)))
+    `(elfeed-search-last-update-face ((,c :inherit bold :foreground 
,date-common)))
+    `(elfeed-search-tag-face ((,c :foreground ,accent-0)))
+    `(elfeed-search-title-face ((,c :foreground ,fg-dim)))
+    `(elfeed-search-unread-count-face (( )))
+    `(elfeed-search-unread-title-face ((,c :inherit bold :foreground 
,fg-main)))
 ;;;;; elfeed-score
-    `(elfeed-score-date-face ((,class :foreground ,blue)))
-    `(elfeed-score-debug-level-face ((,class :foreground ,magenta-alt-other)))
-    `(elfeed-score-error-level-face ((,class :foreground ,red)))
-    `(elfeed-score-info-level-face ((,class :foreground ,cyan)))
-    `(elfeed-score-warn-level-face ((,class :foreground ,yellow)))
+    `(elfeed-score-date-face ((,c :foreground ,date-common)))
+    `(elfeed-score-debug-level-face ((,c :inherit bold)))
+    `(elfeed-score-error-level-face ((,c :inherit error)))
+    `(elfeed-score-info-level-face ((,c :inherit success)))
+    `(elfeed-score-warn-level-face ((,c :inherit warning)))
 ;;;;; elpher
-    `(elpher-gemini-heading1 ((,class :inherit modus-themes-heading-1)))
-    `(elpher-gemini-heading2 ((,class :inherit modus-themes-heading-2)))
-    `(elpher-gemini-heading3 ((,class :inherit modus-themes-heading-3)))
+    `(elpher-gemini-heading1 ((,c :inherit modus-themes-heading-1)))
+    `(elpher-gemini-heading2 ((,c :inherit modus-themes-heading-2)))
+    `(elpher-gemini-heading3 ((,c :inherit modus-themes-heading-3)))
 ;;;;; embark
-    `(embark-keybinding ((,class :inherit modus-themes-key-binding)))
-    `(embark-collect-marked ((,class :inherit modus-themes-mark-sel)))
+    `(embark-keybinding ((,c :inherit modus-themes-key-binding)))
+    `(embark-collect-marked ((,c :inherit modus-themes-mark-sel)))
 ;;;;; ement (ement.el)
-    `(ement-room-fully-read-marker ((,class :background ,cyan-subtle-bg)))
-    `(ement-room-membership ((,class :inherit shadow)))
-    `(ement-room-mention ((,class :background ,bg-hl-alt-intense)))
-    `(ement-room-name ((,class :inherit bold)))
-    `(ement-room-reactions ((,class :inherit shadow)))
-    `(ement-room-read-receipt-marker ((,class :background ,yellow-subtle-bg)))
-    `(ement-room-self ((,class :inherit bold :foreground ,magenta)))
-    `(ement-room-self-message ((,class :foreground ,magenta-faint)))
-    `(ement-room-timestamp ((,class :inherit shadow)))
-    `(ement-room-timestamp-header ((,class :inherit bold :foreground ,cyan)))
-    `(ement-room-user ((,class :inherit bold :foreground ,blue)))
+    `(ement-room-fully-read-marker ((,c :inherit success)))
+    `(ement-room-membership ((,c :inherit shadow)))
+    `(ement-room-mention ((,c :inherit highlight)))
+    `(ement-room-name ((,c :inherit bold)))
+    `(ement-room-reactions ((,c :inherit shadow)))
+    `(ement-room-read-receipt-marker ((,c :inherit match)))
+    `(ement-room-self ((,c :inherit bold :foreground ,accent-1)))
+    `(ement-room-self-message ((,c :foreground ,fg-alt)))
+    `(ement-room-timestamp ((,c :inherit shadow)))
+    `(ement-room-timestamp-header ((,c :inherit bold :foreground 
,date-common)))
+    `(ement-room-user ((,c :inherit bold :foreground ,accent-0)))
 ;;;;; emms
-    `(emms-browser-album-face ((,class :foreground ,magenta-alt-other)))
-    `(emms-browser-artist-face ((,class :foreground ,cyan)))
-    `(emms-browser-composer-face ((,class :foreground ,magenta-alt)))
-    `(emms-browser-performer-face ((,class :inherit emms-browser-artist-face)))
-    `(emms-browser-track-face ((,class :inherit emms-playlist-track-face)))
-    `(emms-browser-year/genre-face ((,class :foreground ,cyan-alt-other)))
-    `(emms-playlist-track-face ((,class :foreground ,blue-alt)))
-    `(emms-playlist-selected-face ((,class :inherit bold :foreground 
,blue-alt-other)))
-    `(emms-metaplaylist-mode-current-face ((,class :inherit 
emms-playlist-selected-face)))
-    `(emms-metaplaylist-mode-face ((,class :foreground ,cyan)))
+    `(emms-browser-album-face ((,c :foreground ,keyword)))
+    `(emms-browser-artist-face ((,c :foreground ,variable)))
+    `(emms-browser-composer-face ((,c :foreground ,builtin)))
+    `(emms-browser-performer-face ((,c :inherit emms-browser-artist-face)))
+    `(emms-browser-track-face ((,c :inherit emms-playlist-track-face)))
+    `(emms-browser-year/genre-face ((,c :foreground ,type)))
+    `(emms-playlist-track-face ((,c :foreground ,string)))
+    `(emms-playlist-selected-face ((,c :inherit bold :foreground ,constant)))
+    `(emms-metaplaylist-mode-current-face ((,c :inherit 
emms-playlist-selected-face)))
+    `(emms-metaplaylist-mode-face ((,c :foreground ,variable)))
 ;;;;; 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 :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)))
+    `(enh-ruby-heredoc-delimiter-face ((,c :inherit font-lock-constant-face)))
+    `(enh-ruby-op-face ((,c :foreground ,fg-main)))
+    `(enh-ruby-regexp-delimiter-face ((,c :inherit 
font-lock-regexp-grouping-construct)))
+    `(enh-ruby-regexp-face ((,c :inherit font-lock-string-face)))
+    `(enh-ruby-string-delimiter-face ((,c :inherit font-lock-string-face)))
+    `(erm-syn-errline ((,c :inherit modus-themes-lang-error)))
+    `(erm-syn-warnline ((,c :inherit modus-themes-lang-warning)))
 ;;;;; epa
-    `(epa-field-body ((,class :foreground ,fg-main)))
-    `(epa-field-name ((,class :inherit bold :foreground ,fg-dim)))
-    `(epa-mark ((,class :inherit bold :foreground ,magenta)))
-    `(epa-string ((,class :foreground ,blue-alt)))
-    `(epa-validity-disabled ((,class :foreground ,red)))
-    `(epa-validity-high ((,class :inherit bold :foreground ,cyan)))
-    `(epa-validity-low ((,class :inherit shadow)))
-    `(epa-validity-medium ((,class :foreground ,green-alt)))
-;;;;; equake
-    `(equake-buffer-face ((,class :background ,bg-main :foreground ,fg-main)))
-    `(equake-shell-type-eshell ((,class :background ,bg-inactive :foreground 
,blue-active)))
-    `(equake-shell-type-rash ((,class :background ,bg-inactive :foreground 
,red-active)))
-    `(equake-shell-type-shell ((,class :background ,bg-inactive :foreground 
,cyan-active)))
-    `(equake-shell-type-term ((,class :background ,bg-inactive :foreground 
,yellow-active)))
-    `(equake-shell-type-vterm ((,class :background ,bg-inactive :foreground 
,magenta-active)))
-    `(equake-tab-active ((,class :background ,fg-alt :foreground ,bg-alt)))
-    `(equake-tab-inactive ((,class :foreground ,fg-inactive)))
+    `(epa-field-body (( )))
+    `(epa-field-name ((,c :inherit bold :foreground ,fg-dim)))
+    `(epa-mark ((,c :inherit bold)))
+    `(epa-string ((,c :foreground ,string)))
+    `(epa-validity-disabled ((,c :foreground ,err)))
+    `(epa-validity-high ((,c :inherit success)))
+    `(epa-validity-low ((,c :inherit shadow)))
+    `(epa-validity-medium ((,c :foreground ,info)))
 ;;;;; erc
-    `(erc-action-face ((,class :foreground ,cyan-alt-other)))
-    `(erc-bold-face ((,class :inherit bold)))
-    `(erc-button ((,class :inherit button)))
-    `(erc-command-indicator-face ((,class :inherit bold :foreground 
,cyan-alt)))
-    `(erc-current-nick-face ((,class :inherit bold :foreground ,red-alt)))
-    `(erc-dangerous-host-face ((,class :inherit modus-themes-intense-red)))
-    `(erc-direct-msg-face ((,class :foreground ,fg-special-warm)))
-    `(erc-error-face ((,class :inherit bold :foreground ,red)))
-    `(erc-fool-face ((,class :inherit shadow)))
-    `(erc-header-line ((,class :background ,bg-header :foreground ,fg-header)))
-    `(erc-input-face ((,class :foreground ,magenta)))
-    `(erc-inverse-face ((,class :inherit erc-default-face :inverse-video t)))
-    `(erc-keyword-face ((,class :inherit bold :foreground ,magenta-alt-other)))
-    `(erc-my-nick-face ((,class :inherit bold :foreground ,magenta)))
-    `(erc-my-nick-prefix-face ((,class :inherit erc-my-nick-face)))
-    `(erc-nick-default-face ((,class :inherit bold :foreground ,blue)))
-    `(erc-nick-msg-face ((,class :inherit warning)))
-    `(erc-nick-prefix-face ((,class :inherit erc-nick-default-face)))
-    `(erc-notice-face ((,class :inherit font-lock-comment-face)))
-    `(erc-pal-face ((,class :inherit bold :foreground ,magenta-alt)))
-    `(erc-prompt-face ((,class :inherit modus-themes-prompt)))
-    `(erc-timestamp-face ((,class :foreground ,cyan)))
-    `(erc-underline-face ((,class :underline t)))
-    `(bg:erc-color-face0 ((,class :background "white")))
-    `(bg:erc-color-face1 ((,class :background "black")))
-    `(bg:erc-color-face10 ((,class :background ,cyan-subtle-bg)))
-    `(bg:erc-color-face11 ((,class :background ,cyan-intense-bg)))
-    `(bg:erc-color-face12 ((,class :background ,blue-subtle-bg)))
-    `(bg:erc-color-face13 ((,class :background ,magenta-subtle-bg)))
-    `(bg:erc-color-face14 ((,class :background "gray60")))
-    `(bg:erc-color-face15 ((,class :background "gray80")))
-    `(bg:erc-color-face2 ((,class :background ,blue-intense-bg)))
-    `(bg:erc-color-face3 ((,class :background ,green-intense-bg)))
-    `(bg:erc-color-face4 ((,class :background ,red-subtle-bg)))
-    `(bg:erc-color-face5 ((,class :background ,red-intense-bg)))
-    `(bg:erc-color-face6 ((,class :background ,magenta-refine-bg)))
-    `(bg:erc-color-face7 ((,class :background ,yellow-subtle-bg)))
-    `(bg:erc-color-face8 ((,class :background ,yellow-refine-bg)))
-    `(bg:erc-color-face9 ((,class :background ,green-subtle-bg)))
-    `(fg:erc-color-face0 ((,class :foreground "white")))
-    `(fg:erc-color-face1 ((,class :foreground "black")))
-    `(fg:erc-color-face10 ((,class :foreground ,cyan)))
-    `(fg:erc-color-face11 ((,class :foreground ,cyan-alt-other)))
-    `(fg:erc-color-face12 ((,class :foreground ,blue)))
-    `(fg:erc-color-face13 ((,class :foreground ,magenta-alt)))
-    `(fg:erc-color-face14 ((,class :foreground "gray60")))
-    `(fg:erc-color-face15 ((,class :foreground "gray80")))
-    `(fg:erc-color-face2 ((,class :foreground ,blue-alt-other)))
-    `(fg:erc-color-face3 ((,class :foreground ,green)))
-    `(fg:erc-color-face4 ((,class :foreground ,red)))
-    `(fg:erc-color-face5 ((,class :foreground ,red-alt)))
-    `(fg:erc-color-face6 ((,class :foreground ,magenta-alt-other)))
-    `(fg:erc-color-face7 ((,class :foreground ,yellow-alt-other)))
-    `(fg:erc-color-face8 ((,class :foreground ,yellow-alt)))
-    `(fg:erc-color-face9 ((,class :foreground ,green-alt-other)))
-;;;;; eros
-    `(eros-result-overlay-face ((,class :box (:line-width -1 :color ,blue)
-                                        :background ,bg-dim :foreground 
,fg-dim)))
+    `(erc-action-face ((,c :foreground ,accent-2)))
+    `(erc-bold-face ((,c :inherit bold)))
+    `(erc-button ((,c :inherit button)))
+    `(erc-command-indicator-face ((,c :inherit bold :foreground ,accent-3)))
+    `(erc-current-nick-face ((,c :inherit match)))
+    `(erc-dangerous-host-face ((,c :inherit modus-themes-intense-red)))
+    `(erc-direct-msg-face ((,c :inherit shadow)))
+    `(erc-error-face ((,c :inherit error)))
+    `(erc-fool-face ((,c :inherit shadow)))
+    `(erc-input-face ((,c :foreground ,fnname)))
+    `(erc-inverse-face ((,c :inherit erc-default-face :inverse-video t)))
+    `(erc-keyword-face ((,c :inherit bold :foreground ,keyword)))
+    `(erc-my-nick-face ((,c :inherit bold :foreground ,name)))
+    `(erc-my-nick-prefix-face ((,c :inherit erc-my-nick-face)))
+    `(erc-nick-default-face ((,c :inherit bold :foreground ,accent-0)))
+    `(erc-nick-msg-face ((,c :inherit warning)))
+    `(erc-nick-prefix-face ((,c :inherit erc-nick-default-face)))
+    `(erc-notice-face ((,c :inherit font-lock-comment-face)))
+    `(erc-pal-face ((,c :inherit bold :foreground ,accent-1)))
+    `(erc-prompt-face ((,c :inherit modus-themes-prompt)))
+    `(erc-timestamp-face ((,c :foreground ,date-common)))
+    `(erc-underline-face ((,c :underline t)))
 ;;;;; ert
-    `(ert-test-result-expected ((,class :inherit modus-themes-intense-green)))
-    `(ert-test-result-unexpected ((,class :inherit modus-themes-intense-red)))
+    `(ert-test-result-expected ((,c :inherit modus-themes-intense-cyan)))
+    `(ert-test-result-unexpected ((,c :inherit modus-themes-intense-red)))
 ;;;;; eshell
-    `(eshell-ls-archive ((,class :foreground ,cyan-alt)))
-    `(eshell-ls-backup ((,class :inherit shadow)))
-    `(eshell-ls-clutter ((,class :foreground ,red-alt)))
-    `(eshell-ls-directory ((,class :foreground ,blue-alt)))
-    `(eshell-ls-executable ((,class :foreground ,magenta-alt)))
-    `(eshell-ls-missing ((,class :inherit modus-themes-intense-red)))
-    `(eshell-ls-product ((,class :inherit shadow)))
-    `(eshell-ls-readonly ((,class :foreground ,yellow-faint)))
-    `(eshell-ls-special ((,class :foreground ,magenta)))
-    `(eshell-ls-symlink ((,class :inherit modus-themes-link-symlink)))
-    `(eshell-ls-unreadable ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
-    `(eshell-prompt ((,class :inherit modus-themes-prompt)))
+    `(eshell-ls-archive ((,c :foreground ,accent-2)))
+    `(eshell-ls-backup ((,c :inherit shadow)))
+    `(eshell-ls-clutter ((,c :inherit shadow)))
+    `(eshell-ls-directory ((,c :foreground ,accent-0)))
+    `(eshell-ls-executable ((,c :foreground ,accent-1)))
+    `(eshell-ls-missing ((,c :inherit error)))
+    `(eshell-ls-product ((,c :inherit shadow)))
+    `(eshell-ls-readonly ((,c :foreground ,warning)))
+    `(eshell-ls-special ((,c :foreground ,accent-3)))
+    `(eshell-ls-symlink ((,c :inherit link)))
+    `(eshell-ls-unreadable ((,c :inherit shadow)))
+    `(eshell-prompt ((,c :inherit modus-themes-prompt)))
 ;;;;; eshell-fringe-status
-    `(eshell-fringe-status-failure ((,class :inherit error)))
-    `(eshell-fringe-status-success ((,class :inherit success)))
-;;;;; eshell-git-prompt
-    `(eshell-git-prompt-add-face ((,class :foreground ,magenta-alt-other)))
-    `(eshell-git-prompt-branch-face ((,class :foreground ,magenta-alt)))
-    `(eshell-git-prompt-directory-face ((,class :inherit bold :foreground 
,blue)))
-    `(eshell-git-prompt-exit-fail-face ((,class :inherit error)))
-    `(eshell-git-prompt-exit-success-face ((,class :inherit success)))
-    `(eshell-git-prompt-modified-face ((,class :foreground ,yellow)))
-    `(eshell-git-prompt-powerline-clean-face ((,class :background 
,green-refine-bg)))
-    `(eshell-git-prompt-powerline-dir-face ((,class :background 
,blue-refine-bg)))
-    `(eshell-git-prompt-powerline-not-clean-face ((,class :background 
,yellow-fringe-bg)))
-    `(eshell-git-prompt-robyrussell-branch-face ((,class :foreground 
,magenta-alt)))
-    `(eshell-git-prompt-robyrussell-git-dirty-face ((,class :foreground 
,yellow)))
-    `(eshell-git-prompt-robyrussell-git-face ((,class :foreground 
,magenta-alt-other)))
-;;;;; eshell-prompt-extras (epe)
-    `(epe-dir-face ((,class :inherit bold :foreground ,blue)))
-    `(epe-git-dir-face ((,class :foreground ,red-alt-other)))
-    `(epe-git-face ((,class :foreground ,magenta-alt)))
-    `(epe-pipeline-delimiter-face ((,class :inherit shadow)))
-    `(epe-pipeline-host-face ((,class :foreground ,fg-main)))
-    `(epe-pipeline-time-face ((,class :foreground ,fg-main)))
-    `(epe-pipeline-user-face ((,class :foreground ,magenta-alt-other)))
-    `(epe-remote-face ((,class :inherit (shadow modus-themes-slant))))
-    `(epe-status-face ((,class :foreground ,magenta-alt-other)))
-    `(epe-venv-face ((,class :inherit (shadow modus-themes-slant))))
-;;;;; eshell-syntax-highlighting
-    `(eshell-syntax-highlighting-directory-face ((,class :inherit 
eshell-ls-directory)))
-    `(eshell-syntax-highlighting-invalid-face ((,class :foreground ,red)))
-    `(eshell-syntax-highlighting-shell-command-face ((,class :foreground 
,fg-main)))
+    `(eshell-fringe-status-failure ((,c :inherit error)))
+    `(eshell-fringe-status-success ((,c :inherit success)))
 ;;;;; 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-themes-search-success-lazy)))
-    `(evil-ex-search ((,class :inherit modus-themes-search-success)))
-    `(evil-ex-substitute-matches ((,class :inherit modus-themes-refine-yellow 
:underline t)))
-    `(evil-ex-substitute-replacement ((,class :inherit 
modus-themes-search-success)))
-;;;;; evil-goggles
-    `(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-themes-subtle-green)))
-    `(evil-goggles-nerd-commenter-face ((,class :inherit 
evil-goggles-commentary-face)))
-    `(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-themes-subtle-blue)))
-;;;;; evil-snipe
-    `(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-themes-intense-magenta)))
+    `(evil-ex-commands ((,c :inherit font-lock-keyword-face)))
+    `(evil-ex-info ((,c :inherit font-lock-type-face)))
+    `(evil-ex-lazy-highlight ((,c :inherit modus-themes-search-lazy)))
+    `(evil-ex-search ((,c :inherit modus-themes-search-current)))
+    `(evil-ex-substitute-matches ((,c :inherit modus-themes-intense-yellow 
:underline t)))
+    `(evil-ex-substitute-replacement ((,c :inherit 
modus-themes-search-current)))
 ;;;;; eww
-    `(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 :inherit modus-themes-box-button)))
-    `(eww-form-text ((,class :inherit widget-field)))
-    `(eww-form-textarea ((,class :inherit eww-form-text)))
+    `(eww-invalid-certificate ((,c :foreground ,err)))
+    `(eww-valid-certificate ((,c :foreground ,info)))
+    `(eww-form-checkbox ((,c :inherit eww-form-text)))
+    `(eww-form-file ((,c :inherit eww-form-submit)))
+    `(eww-form-select ((,c :inherit eww-form-submit)))
+    `(eww-form-submit ((,c :inherit modus-themes-button)))
+    `(eww-form-text ((,c :inherit widget-field)))
+    `(eww-form-textarea ((,c :inherit eww-form-text)))
 ;;;;; 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-themes-intense-cyan bold))))
+    `(eyebrowse-mode-line-active ((,c :inherit mode-line-emphasis)))
 ;;;;; flycheck
-    `(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-themes-bold 
:foreground ,red)))
-    `(flycheck-error-list-filename ((,class :foreground ,blue)))
-    `(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-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-themes-lang-warning)))
+    `(flycheck-error ((,c :inherit modus-themes-lang-error)))
+    `(flycheck-fringe-error ((,c :inherit modus-themes-intense-red)))
+    `(flycheck-fringe-info ((,c :inherit modus-themes-intense-cyan)))
+    `(flycheck-fringe-warning ((,c :inherit modus-themes-intense-yellow)))
+    `(flycheck-info ((,c :inherit modus-themes-lang-note)))
+    `(flycheck-warning ((,c :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-color-mode-line-error-face ((,c :inherit 
flycheck-fringe-error)))
+    `(flycheck-color-mode-line-info-face ((,c :inherit flycheck-fringe-info)))
+    `(flycheck-color-mode-line-running-face ((,c :inherit italic)))
+    `(flycheck-color-mode-line-info-face ((,c :inherit 
flycheck-fringe-warning)))
 ;;;;; flycheck-indicator
-    `(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 
modus-themes-grue-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-themes-slant :foreground 
,fg-main)))
-    `(flycheck-posframe-info-face ((,class :inherit bold :foreground ,cyan)))
-    `(flycheck-posframe-warning-face ((,class :inherit bold :foreground 
,yellow)))
+    `(flycheck-indicator-disabled ((,c :inherit modus-themes-slant :foreground 
,fg-dim)))
+    `(flycheck-indicator-error ((,c :inherit error)))
+    `(flycheck-indicator-info ((,c :inherit bold)))
+    `(flycheck-indicator-running ((,c :inherit modus-themes-slant)))
+    `(flycheck-indicator-success ((,c :inherit success)))
+    `(flycheck-indicator-warning ((,c :inherit warning)))
 ;;;;; flymake
-    `(flymake-error ((,class :inherit modus-themes-lang-error)))
-    `(flymake-note ((,class :inherit modus-themes-lang-note)))
-    `(flymake-warning ((,class :inherit modus-themes-lang-warning)))
+    `(flymake-error ((,c :inherit modus-themes-lang-error)))
+    `(flymake-note ((,c :inherit modus-themes-lang-note)))
+    `(flymake-warning ((,c :inherit modus-themes-lang-warning)))
 ;;;;; flyspell
-    `(flyspell-duplicate ((,class :inherit modus-themes-lang-warning)))
-    `(flyspell-incorrect ((,class :inherit modus-themes-lang-error)))
+    `(flyspell-duplicate ((,c :inherit modus-themes-lang-warning)))
+    `(flyspell-incorrect ((,c :inherit modus-themes-lang-error)))
 ;;;;; flx
-    `(flx-highlight-face ((,class :inherit modus-themes-completion-match-0)))
-;;;;; freeze-it
-    `(freeze-it-show ((,class :background ,bg-dim :foreground 
,fg-special-warm)))
+    `(flx-highlight-face ((,c :inherit modus-themes-completion-match-0)))
 ;;;;; focus
-    `(focus-unfocused ((,class :foreground ,fg-unfocused)))
+    `(focus-unfocused ((,c :foreground "gray50")))
 ;;;;; fold-this
-    `(fold-this-overlay ((,class :inherit modus-themes-special-mild)))
+    `(fold-this-overlay ((,c :background ,bg-inactive)))
 ;;;;; font-lock
-    `(font-lock-builtin-face ((,class :inherit modus-themes-bold
-                                      ,@(modus-themes--syntax-extra
-                                         magenta-alt magenta-alt-faint
-                                         magenta magenta-faint))))
-    `(font-lock-comment-delimiter-face ((,class :inherit 
font-lock-comment-face)))
-    `(font-lock-comment-face ((,class :inherit modus-themes-slant
-                                      ,@(modus-themes--syntax-comment
-                                         fg-alt fg-comment-yellow 
yellow-alt-other-faint))))
-    `(font-lock-constant-face ((,class ,@(modus-themes--syntax-extra
-                                          blue-alt-other blue-alt-other-faint
-                                          magenta-alt-other 
magenta-alt-other-faint))))
-    `(font-lock-doc-face ((,class :inherit modus-themes-slant
-                                  ,@(modus-themes--syntax-string
-                                     fg-docstring fg-special-cold
-                                     fg-special-mild fg-special-calm
-                                     fg-special-mild magenta-nuanced-fg))))
-    `(font-lock-function-name-face ((,class ,@(modus-themes--syntax-extra
-                                               magenta magenta-faint
-                                               magenta-alt 
magenta-alt-faint))))
-    `(font-lock-keyword-face ((,class :inherit modus-themes-bold
-                                      ,@(modus-themes--syntax-extra
-                                         magenta-alt-other 
magenta-alt-other-faint
-                                         cyan cyan-faint))))
-    `(font-lock-negation-char-face ((,class :inherit modus-themes-bold
-                                            ,@(modus-themes--syntax-foreground
-                                               yellow yellow-faint))))
-    `(font-lock-preprocessor-face ((,class ,@(modus-themes--syntax-extra
-                                              red-alt-other red-alt-other-faint
-                                              cyan-alt-other cyan-alt-faint))))
-    `(font-lock-regexp-grouping-backslash ((,class :inherit modus-themes-bold
-                                                   
,@(modus-themes--syntax-string
-                                                      fg-escape-char-backslash 
yellow-alt-faint
-                                                      yellow-alt magenta-alt
-                                                      red-faint 
green-alt-other-faint))))
-    `(font-lock-regexp-grouping-construct ((,class :inherit modus-themes-bold
-                                                   
,@(modus-themes--syntax-string
-                                                      fg-escape-char-construct 
red-alt-other-faint
-                                                      red-alt-other 
blue-alt-other
-                                                      blue-faint 
blue-alt-other-faint))))
-    `(font-lock-string-face ((,class ,@(modus-themes--syntax-string
-                                        blue-alt blue-alt-faint
-                                        green-alt-other red-alt-other
-                                        green-alt-faint red-alt-faint))))
-    `(font-lock-type-face ((,class :inherit modus-themes-bold
-                                   ,@(modus-themes--syntax-extra
-                                      cyan-alt-other cyan-alt-faint
-                                      magenta-alt-other 
magenta-alt-other-faint))))
-    `(font-lock-variable-name-face ((,class ,@(modus-themes--syntax-extra
-                                               cyan cyan-faint
-                                               blue-alt blue-alt-faint))))
-    `(font-lock-warning-face ((,class :inherit modus-themes-bold
-                                      ,@(modus-themes--syntax-comment
-                                         yellow red yellow-alt-faint 
red-faint))))
-;;;;; forge
-    `(forge-post-author ((,class :inherit bold :foreground ,fg-main)))
-    `(forge-post-date ((,class :foreground ,fg-special-cold)))
-    `(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-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 font-lock-comment-face)))
-    `(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-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-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)))
+    `(font-lock-builtin-face ((,c :inherit modus-themes-bold :foreground 
,builtin)))
+    `(font-lock-comment-delimiter-face ((,c :inherit font-lock-comment-face)))
+    `(font-lock-comment-face ((,c :inherit modus-themes-slant :foreground 
,comment)))
+    `(font-lock-constant-face ((,c :foreground ,constant)))
+    `(font-lock-doc-face ((,c :inherit modus-themes-slant :foreground 
,docstring)))
+    `(font-lock-doc-markup-face ((,c :inherit modus-themes-slant :foreground 
,docmarkup)))
+    `(font-lock-function-name-face ((,c :foreground ,fnname)))
+    `(font-lock-keyword-face ((,c :inherit modus-themes-bold :foreground 
,keyword)))
+    `(font-lock-negation-char-face ((,c :inherit error)))
+    `(font-lock-preprocessor-face ((,c :foreground ,preprocessor)))
+    `(font-lock-regexp-grouping-backslash ((,c :inherit modus-themes-bold 
:foreground ,rx-backslash)))
+    `(font-lock-regexp-grouping-construct ((,c :inherit modus-themes-bold 
:foreground ,rx-construct)))
+    `(font-lock-string-face ((,c :foreground ,string)))
+    `(font-lock-type-face ((,c :inherit modus-themes-bold :foreground ,type)))
+    `(font-lock-variable-name-face ((,c :foreground ,variable)))
+    `(font-lock-warning-face ((,c :inherit modus-themes-bold :foreground 
,warning)))
 ;;;;; geiser
-    `(geiser-font-lock-autodoc-current-arg ((,class :inherit bold
-                                                    :background 
,yellow-nuanced-bg
-                                                    :foreground 
,yellow-alt-other)))
-    `(geiser-font-lock-autodoc-identifier ((,class :foreground ,cyan)))
-    `(geiser-font-lock-doc-button ((,class :inherit button :foreground 
,fg-docstring)))
-    `(geiser-font-lock-doc-link ((,class :inherit button)))
-    `(geiser-font-lock-error-link ((,class :inherit button :foreground ,red)))
-    `(geiser-font-lock-image-button ((,class :inherit button :foreground 
,green-alt)))
-    `(geiser-font-lock-repl-input ((,class :inherit bold)))
-    `(geiser-font-lock-repl-output ((,class :inherit font-lock-keyword-face)))
-    `(geiser-font-lock-repl-prompt ((,class :inherit modus-themes-prompt)))
-    `(geiser-font-lock-xref-header ((,class :inherit bold)))
-    `(geiser-font-lock-xref-link ((,class :inherit button)))
+    `(geiser-font-lock-autodoc-current-arg ((,c :inherit 
modus-themes-mark-alt)))
+    `(geiser-font-lock-autodoc-identifier ((,c :foreground ,docstring)))
+    `(geiser-font-lock-doc-button ((,c :inherit button)))
+    `(geiser-font-lock-doc-link ((,c :inherit button)))
+    `(geiser-font-lock-error-link ((,c :inherit button :foreground ,err)))
+    `(geiser-font-lock-image-button ((,c :inherit button :foreground ,info)))
+    `(geiser-font-lock-repl-input ((,c :inherit bold)))
+    `(geiser-font-lock-repl-output ((,c :inherit font-lock-keyword-face)))
+    `(geiser-font-lock-repl-prompt ((,c :inherit modus-themes-prompt)))
+    `(geiser-font-lock-xref-header ((,c :inherit bold)))
+    `(geiser-font-lock-xref-link ((,c :inherit button)))
 ;;;;; git-commit
-    `(git-commit-comment-action ((,class :inherit font-lock-comment-face)))
-    `(git-commit-comment-branch-local ((,class :inherit font-lock-comment-face 
:foreground ,blue-alt)))
-    `(git-commit-comment-branch-remote ((,class :inherit 
font-lock-comment-face :foreground ,magenta-alt)))
-    `(git-commit-comment-detached ((,class :inherit font-lock-comment-face 
:foreground ,cyan-alt)))
-    `(git-commit-comment-file ((,class :inherit font-lock-comment-face 
:foreground ,cyan)))
-    `(git-commit-comment-heading ((,class :inherit (bold 
font-lock-comment-face))))
-    `(git-commit-keyword ((,class :foreground ,magenta)))
-    `(git-commit-known-pseudo-header ((,class :foreground ,cyan-alt-other)))
-    `(git-commit-nonempty-second-line ((,class :inherit error)))
-    `(git-commit-overlong-summary ((,class :inherit warning)))
-    `(git-commit-pseudo-header ((,class :foreground ,blue)))
-    `(git-commit-summary ((,class :inherit bold :foreground ,blue)))
+    `(git-commit-comment-action ((,c :inherit font-lock-comment-face)))
+    `(git-commit-comment-branch-local ((,c :inherit font-lock-comment-face 
:foreground ,accent-0)))
+    `(git-commit-comment-branch-remote ((,c :inherit font-lock-comment-face 
:foreground ,accent-1)))
+    `(git-commit-comment-heading ((,c :inherit (bold font-lock-comment-face))))
+    `(git-commit-comment-file ((,c :inherit font-lock-comment-face :foreground 
,name)))
+    `(git-commit-keyword ((,c :foreground ,keyword)))
+    `(git-commit-nonempty-second-line ((,c :inherit error)))
+    `(git-commit-overlong-summary ((,c :inherit warning)))
+    `(git-commit-summary ((,c :inherit bold :foreground ,blue)))
 ;;;;; git-gutter
-    `(git-gutter:added ((,class :inherit modus-themes-grue-background-active)))
-    `(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:added ((,c :background ,bg-added-intense)))
+    `(git-gutter:deleted ((,c :background ,bg-removed-intense)))
+    `(git-gutter:modified ((,c :background ,bg-changed-intense)))
+    `(git-gutter:separator ((,c :inherit modus-themes-intense-cyan)))
+    `(git-gutter:unchanged ((,c :inherit modus-themes-intense-magenta)))
 ;;;;; git-gutter-fr
-    `(git-gutter-fr:added ((,class :inherit 
modus-themes-grue-background-active)))
-    `(git-gutter-fr:deleted ((,class :inherit modus-themes-fringe-red)))
-    `(git-gutter-fr:modified ((,class :inherit modus-themes-fringe-yellow)))
+    `(git-gutter-fr:added ((,c :background ,bg-added-intense)))
+    `(git-gutter-fr:deleted ((,c :background ,bg-removed-intense)))
+    `(git-gutter-fr:modified ((,c :background ,bg-changed-intense)))
 ;;;;; git-rebase
-    `(git-rebase-comment-hash ((,class :inherit font-lock-comment-face 
:foreground ,cyan)))
-    `(git-rebase-comment-heading  ((,class :inherit (bold 
font-lock-comment-face))))
-    `(git-rebase-description ((,class :foreground ,fg-main)))
-    `(git-rebase-hash ((,class :foreground ,cyan-alt-other)))
+    `(git-rebase-comment-hash ((,c :inherit (bold font-lock-comment-face) 
:foreground ,identifier)))
+    `(git-rebase-comment-heading  ((,c :inherit (bold 
font-lock-comment-face))))
+    `(git-rebase-description ((,c :foreground ,fg-main)))
+    `(git-rebase-hash ((,c :foreground ,identifier)))
 ;;;;; git-timemachine
-    `(git-timemachine-commit ((,class :inherit bold :foreground 
,yellow-active)))
-    `(git-timemachine-minibuffer-author-face ((,class :foreground 
,fg-special-warm)))
-    `(git-timemachine-minibuffer-detail-face ((,class :foreground ,red-alt)))
+    `(git-timemachine-commit ((,c :inherit warning)))
+    `(git-timemachine-minibuffer-author-face ((,c :foreground ,name)))
+    `(git-timemachine-minibuffer-detail-face ((,c :foreground ,fg-main)))
 ;;;;; gnus
-    `(gnus-button ((,class :inherit button)))
-    `(gnus-cite-1 ((,class :inherit message-cited-text-1)))
-    `(gnus-cite-2 ((,class :inherit message-cited-text-2)))
-    `(gnus-cite-3 ((,class :inherit message-cited-text-3)))
-    `(gnus-cite-4 ((,class :inherit message-cited-text-4)))
-    `(gnus-cite-5 ((,class :inherit gnus-cite-1)))
-    `(gnus-cite-6 ((,class :inherit gnus-cite-2)))
-    `(gnus-cite-7 ((,class :inherit gnus-cite-3)))
-    `(gnus-cite-8 ((,class :inherit gnus-cite-4)))
-    `(gnus-cite-9 ((,class :inherit gnus-cite-1)))
-    `(gnus-cite-10 ((,class :inherit gnus-cite-2)))
-    `(gnus-cite-11 ((,class :inherit gnus-cite-3)))
-    `(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-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)))
-    `(gnus-emphasis-underline-italic ((,class :inherit gnus-emphasis-italic 
:underline t)))
-    `(gnus-group-mail-1 ((,class :inherit bold :foreground ,magenta-alt)))
-    `(gnus-group-mail-1-empty ((,class :foreground ,magenta-alt)))
-    `(gnus-group-mail-2 ((,class :inherit bold :foreground ,magenta)))
-    `(gnus-group-mail-2-empty ((,class :foreground ,magenta)))
-    `(gnus-group-mail-3 ((,class :inherit bold :foreground 
,magenta-alt-other)))
-    `(gnus-group-mail-3-empty ((,class :foreground ,magenta-alt-other)))
-    `(gnus-group-mail-low ((,class :inherit bold :foreground 
,magenta-nuanced-fg)))
-    `(gnus-group-mail-low-empty ((,class :foreground ,magenta-nuanced-fg)))
-    `(gnus-group-news-1 ((,class :inherit bold :foreground ,green)))
-    `(gnus-group-news-1-empty ((,class :foreground ,green)))
-    `(gnus-group-news-2 ((,class :inherit bold :foreground ,cyan)))
-    `(gnus-group-news-2-empty ((,class :foreground ,cyan)))
-    `(gnus-group-news-3 ((,class :inherit bold :foreground 
,yellow-nuanced-fg)))
-    `(gnus-group-news-3-empty ((,class :foreground ,yellow-nuanced-fg)))
-    `(gnus-group-news-4 ((,class :inherit bold :foreground ,cyan-nuanced-fg)))
-    `(gnus-group-news-4-empty ((,class :foreground ,cyan-nuanced-fg)))
-    `(gnus-group-news-5 ((,class :inherit bold :foreground ,red-nuanced-fg)))
-    `(gnus-group-news-5-empty ((,class :foreground ,red-nuanced-fg)))
-    `(gnus-group-news-6 ((,class :inherit bold :foreground ,fg-unfocused)))
-    `(gnus-group-news-6-empty ((,class :foreground ,fg-unfocused)))
-    `(gnus-group-news-low ((,class :inherit bold :foreground 
,green-nuanced-fg)))
-    `(gnus-group-news-low-empty ((,class :foreground ,green-nuanced-fg)))
-    `(gnus-header-content ((,class :inherit message-header-other)))
-    `(gnus-header-from ((,class :inherit message-header-to :underline nil)))
-    `(gnus-header-name ((,class :inherit message-header-name)))
-    `(gnus-header-newsgroups ((,class :inherit message-header-newsgroups)))
-    `(gnus-header-subject ((,class :inherit message-header-subject)))
-    `(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-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-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)))
-    `(gnus-summary-high-undownloaded ((,class :inherit bold :foreground 
,yellow)))
-    `(gnus-summary-high-unread ((,class :inherit bold :foreground ,fg-main)))
-    `(gnus-summary-low-ancient ((,class :inherit italic :foreground ,fg-alt)))
-    `(gnus-summary-low-read ((,class :inherit italic :foreground ,fg-alt)))
-    `(gnus-summary-low-ticked ((,class :inherit italic :foreground 
,red-refine-fg)))
-    `(gnus-summary-low-undownloaded ((,class :inherit italic :foreground 
,yellow-refine-fg)))
-    `(gnus-summary-low-unread ((,class :inherit italic :foreground 
,fg-special-cold)))
-    `(gnus-summary-normal-ancient ((,class :foreground ,fg-special-calm)))
-    `(gnus-summary-normal-read ((,class :inherit shadow)))
-    `(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 highlight :extend t)))
+    `(gnus-button ((,c :inherit button)))
+    `(gnus-cite-1 ((,c :inherit message-cited-text-1)))
+    `(gnus-cite-2 ((,c :inherit message-cited-text-2)))
+    `(gnus-cite-3 ((,c :inherit message-cited-text-3)))
+    `(gnus-cite-4 ((,c :inherit message-cited-text-4)))
+    `(gnus-cite-5 ((,c :inherit message-cited-text-1)))
+    `(gnus-cite-6 ((,c :inherit message-cited-text-2)))
+    `(gnus-cite-7 ((,c :inherit message-cited-text-3)))
+    `(gnus-cite-8 ((,c :inherit message-cited-text-4)))
+    `(gnus-cite-9 ((,c :inherit message-cited-text-1)))
+    `(gnus-cite-10 ((,c :inherit message-cited-text-2)))
+    `(gnus-cite-11 ((,c :inherit message-cited-text-3)))
+    `(gnus-cite-attribution ((,c :inherit italic)))
+    `(gnus-emphasis-bold ((,c :inherit bold)))
+    `(gnus-emphasis-bold-italic ((,c :inherit bold-italic)))
+    `(gnus-emphasis-highlight-words ((,c :inherit warning)))
+    `(gnus-emphasis-italic ((,c :inherit italic)))
+    `(gnus-emphasis-underline-bold ((,c :inherit gnus-emphasis-bold :underline 
t)))
+    `(gnus-emphasis-underline-bold-italic ((,c :inherit 
gnus-emphasis-bold-italic :underline t)))
+    `(gnus-emphasis-underline-italic ((,c :inherit gnus-emphasis-italic 
:underline t)))
+    `(gnus-group-mail-1 ((,c :inherit (bold gnus-group-mail-1-empty))))
+    `(gnus-group-mail-1-empty ((,c :foreground ,magenta-warmer)))
+    `(gnus-group-mail-2 ((,c :inherit (bold gnus-group-mail-2-empty))))
+    `(gnus-group-mail-2-empty ((,c :foreground ,magenta)))
+    `(gnus-group-mail-3 ((,c :inherit (bold gnus-group-mail-3-empty))))
+    `(gnus-group-mail-3-empty ((,c :foreground ,magenta-cooler)))
+    `(gnus-group-mail-low ((,c :inherit (bold gnus-group-mail-low-empty))))
+    `(gnus-group-mail-low-empty ((,c :foreground ,fg-dim)))
+    `(gnus-group-news-1 ((,c :inherit (bold gnus-group-news-1-empty))))
+    `(gnus-group-news-1-empty ((,c :foreground ,green)))
+    `(gnus-group-news-2 ((,c :inherit (bold gnus-group-news-2-empty))))
+    `(gnus-group-news-2-empty ((,c :foreground ,cyan)))
+    `(gnus-group-news-3 ((,c :inherit (bold gnus-group-news-3-empty))))
+    `(gnus-group-news-3-empty ((,c :foreground ,yellow-faint)))
+    `(gnus-group-news-4 ((,c :inherit (bold gnus-group-news-4-empty))))
+    `(gnus-group-news-4-empty ((,c :foreground ,magenta-faint)))
+    `(gnus-group-news-5 ((,c :inherit (bold gnus-group-news-5-empty))))
+    `(gnus-group-news-5-empty ((,c :foreground ,fg-alt)))
+    `(gnus-group-news-6 ((,c :inherit (bold gnus-group-news-6-empty))))
+    `(gnus-group-news-6-empty ((,c :foreground ,fg-dim)))
+    `(gnus-group-news-low ((,c :inherit (bold gnus-group-news-low-empty))))
+    `(gnus-group-news-low-empty ((,c :foreground ,fg-dim)))
+    `(gnus-header-content ((,c :inherit message-header-other)))
+    `(gnus-header-from ((,c :inherit message-header-to :underline nil)))
+    `(gnus-header-name ((,c :inherit message-header-name)))
+    `(gnus-header-newsgroups ((,c :inherit message-header-newsgroups)))
+    `(gnus-header-subject ((,c :inherit message-header-subject)))
+    `(gnus-server-agent ((,c :inherit bold)))
+    `(gnus-server-closed ((,c :inherit italic)))
+    `(gnus-server-cloud ((,c :inherit bold :foreground ,fg-alt)))
+    `(gnus-server-cloud-host ((,c :inherit bold :foreground ,fg-alt :underline 
t)))
+    `(gnus-server-denied ((,c :inherit error)))
+    `(gnus-server-offline ((,c :inherit shadow)))
+    `(gnus-server-opened ((,c :inherit success)))
+    `(gnus-summary-cancelled ((,c :inherit italic :foreground ,warning)))
+    `(gnus-summary-high-ancient ((,c :inherit bold :foreground ,fg-alt)))
+    `(gnus-summary-high-read ((,c :inherit bold :foreground ,fg-dim)))
+    `(gnus-summary-high-ticked ((,c :inherit bold :foreground ,err)))
+    `(gnus-summary-high-undownloaded ((,c :inherit bold-italic :foreground 
,warning)))
+    `(gnus-summary-high-unread ((,c :inherit bold)))
+    `(gnus-summary-low-ancient ((,c :inherit italic)))
+    `(gnus-summary-low-read ((,c :inherit (shadow italic))))
+    `(gnus-summary-low-ticked ((,c :inherit italic :foreground ,err)))
+    `(gnus-summary-low-undownloaded ((,c :inherit italic :foreground 
,warning)))
+    `(gnus-summary-low-unread ((,c :inherit italic)))
+    `(gnus-summary-normal-ancient (( )))
+    `(gnus-summary-normal-read ((,c :inherit shadow)))
+    `(gnus-summary-normal-ticked ((,c :foreground ,err)))
+    `(gnus-summary-normal-undownloaded ((,c :foreground ,warning)))
+    `(gnus-summary-normal-unread (( )))
+    `(gnus-summary-selected ((,c :inherit highlight)))
 ;;;;; gotest
-    `(go-test--ok-face ((,class :inherit success)))
-    `(go-test--error-face ((,class :inherit error)))
-    `(go-test--warning-face ((,class :inherit warning)))
-    `(go-test--pointer-face ((,class :foreground ,magenta-alt-other)))
-    `(go-test--standard-face ((,class :foreground ,fg-special-cold)))
+    `(go-test--ok-face ((,c :inherit success)))
+    `(go-test--error-face ((,c :inherit error)))
+    `(go-test--warning-face ((,c :inherit warning)))
+    `(go-test--pointer-face ((,c :foreground ,accent-0)))
+    `(go-test--standard-face (( )))
 ;;;;; 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 modus-themes-key-binding)))
-    `(helm-action ((,class :underline t)))
-    `(helm-bookmark-addressbook ((,class :foreground ,green-alt)))
-    `(helm-bookmark-directory ((,class :inherit bold :foreground ,blue)))
-    `(helm-bookmark-file ((,class :foreground ,fg-main)))
-    `(helm-bookmark-file-not-found ((,class :background ,bg-alt :foreground 
,fg-alt)))
-    `(helm-bookmark-gnus ((,class :foreground ,magenta)))
-    `(helm-bookmark-info ((,class :foreground ,cyan-alt)))
-    `(helm-bookmark-man ((,class :foreground ,yellow-alt)))
-    `(helm-bookmark-w3m ((,class :foreground ,blue-alt)))
-    `(helm-buffer-archive ((,class :inherit bold :foreground ,cyan)))
-    `(helm-buffer-directory ((,class :inherit bold :foreground ,blue)))
-    `(helm-buffer-file ((,class :foreground ,fg-main)))
-    `(helm-buffer-modified ((,class :foreground ,yellow-alt)))
-    `(helm-buffer-not-saved ((,class :foreground ,red-alt)))
-    `(helm-buffer-process ((,class :foreground ,magenta)))
-    `(helm-buffer-saved-out ((,class :inherit bold :background ,bg-alt 
:foreground ,red)))
-    `(helm-buffer-size ((,class :inherit shadow)))
-    `(helm-candidate-number ((,class :foreground ,cyan-active)))
-    `(helm-candidate-number-suspended ((,class :foreground ,yellow-active)))
-    `(helm-comint-prompts-buffer-name ((,class :foreground ,green-active)))
-    `(helm-comint-prompts-promptidx ((,class :foreground ,cyan-active)))
-    `(helm-delete-async-message ((,class :inherit bold :foreground 
,magenta-active)))
-    `(helm-eob-line ((,class :background ,bg-main :foreground ,fg-main)))
-    `(helm-eshell-prompts-buffer-name ((,class :foreground ,green-active)))
-    `(helm-eshell-prompts-promptidx ((,class :foreground ,cyan-active)))
-    `(helm-etags-file ((,class :foreground ,fg-dim :underline t)))
-    `(helm-ff-backup-file ((,class :inherit shadow)))
-    `(helm-ff-denied ((,class :inherit modus-themes-intense-red)))
-    `(helm-ff-directory ((,class :inherit helm-buffer-directory)))
-    `(helm-ff-dirs ((,class :inherit bold :foreground ,blue-alt-other)))
-    `(helm-ff-dotted-directory ((,class :inherit bold :background ,bg-alt 
:foreground ,fg-alt)))
-    `(helm-ff-dotted-symlink-directory ((,class :inherit (button 
helm-ff-dotted-directory))))
-    `(helm-ff-executable ((,class :foreground ,magenta-alt)))
-    `(helm-ff-file ((,class :foreground ,fg-main)))
-    `(helm-ff-file-extension ((,class :foreground ,fg-special-warm)))
-    `(helm-ff-invalid-symlink ((,class :inherit modus-themes-link-broken)))
-    `(helm-ff-pipe ((,class :inherit modus-themes-special-calm)))
-    `(helm-ff-prefix ((,class :inherit modus-themes-special-warm)))
-    `(helm-ff-socket ((,class :foreground ,red-alt-other)))
-    `(helm-ff-suid ((,class :inherit modus-themes-special-warm)))
-    `(helm-ff-symlink ((,class :inherit modus-themes-link-symlink)))
-    `(helm-ff-truename ((,class :foreground ,blue-alt-other)))
-    `(helm-fd-finish ((,class :inherit success)))
-    `(helm-grep-cmd-line ((,class :foreground ,yellow-alt-other)))
-    `(helm-grep-file ((,class :inherit bold :foreground ,fg-special-cold)))
-    `(helm-grep-finish ((,class :inherit bold)))
-    `(helm-grep-lineno ((,class :foreground ,fg-special-warm)))
-    `(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 :inherit modus-themes-special-warm)))
-    `(helm-history-remote ((,class :foreground ,red-alt-other)))
-    `(helm-lisp-completion-info ((,class :inherit modus-themes-bold 
:foreground ,fg-special-cold)))
-    `(helm-lisp-show-completion ((,class :inherit modus-themes-special-warm)))
-    `(helm-locate-finish ((,class :inherit success)))
-    `(helm-match ((,class :inherit modus-themes-completion-match-0)))
-    `(helm-match-item ((,class :inherit helm-match)))
-    `(helm-minibuffer-prompt ((,class :inherit modus-themes-prompt)))
-    `(helm-moccur-buffer ((,class :inherit button :foreground 
,cyan-alt-other)))
-    `(helm-mode-prefix ((,class :inherit modus-themes-special-calm)))
-    `(helm-non-file-buffer ((,class :inherit shadow)))
-    `(helm-prefarg ((,class :foreground ,red-active)))
-    `(helm-resume-need-update ((,class :inherit modus-themes-special-calm)))
-    `(helm-selection ((,class :inherit modus-themes-completion-selected)))
-    `(helm-selection-line ((,class :background ,bg-hl-alt-intense)))
-    `(helm-separator ((,class :foreground ,fg-special-mild)))
-    `(helm-time-zone-current ((,class :foreground ,green)))
-    `(helm-time-zone-home ((,class :foreground ,magenta)))
-    `(helm-source-header ((,class :inherit modus-themes-pseudo-header 
:foreground ,fg-special-warm)))
-    `(helm-top-columns ((,class :inherit helm-header)))
-    `(helm-ucs-char ((,class :foreground ,yellow-alt-other)))
-    `(helm-visible-mark ((,class :inherit modus-themes-subtle-cyan)))
-;;;;; helm-ls-git
-    `(helm-ls-git-added-copied-face ((,class :foreground ,green-intense)))
-    `(helm-ls-git-added-modified-face ((,class :foreground ,yellow-intense)))
-    `(helm-ls-git-conflict-face ((,class :inherit bold :foreground 
,red-intense)))
-    `(helm-ls-git-deleted-and-staged-face ((,class :foreground 
,red-nuanced-fg)))
-    `(helm-ls-git-deleted-not-staged-face ((,class :foreground ,red)))
-    `(helm-ls-git-modified-and-staged-face ((,class :foreground 
,yellow-nuanced-fg)))
-    `(helm-ls-git-modified-not-staged-face ((,class :foreground ,yellow)))
-    `(helm-ls-git-renamed-modified-face ((,class :foreground ,magenta)))
-    `(helm-ls-git-untracked-face ((,class :foreground ,fg-special-cold)))
-;;;;; helm-switch-shell
-    `(helm-switch-shell-new-shell-face ((,class :inherit 
modus-themes-completion-match-0)))
-;;;;; helm-xref
-    `(helm-xref-file-name ((,class :inherit modus-themes-bold :foreground 
,fg-special-cold)))
+    `(golden-ratio-scroll-highlight-line-face ((,c :background ,bg-cyan-subtle 
:foreground ,fg-main)))
 ;;;;; helpful
-    `(helpful-heading ((,class :inherit modus-themes-heading-1)))
+    `(helpful-heading ((,c :inherit modus-themes-heading-1)))
 ;;;;; highlight region or ad-hoc regexp
     ;; HACK 2022-06-23: The :inverse-video prevents hl-line-mode from
     ;; overriding the background.  Such an override really defeats the
     ;; purpose of setting those highlights.
     ;;
-    ;; NOTE 2022-10-04: We do not use the ,class here but instead
+    ;; NOTE 2022-10-04: We do not use the ,c here but instead
     ;; hardcode color values.  We have to do this as the themes lack
     ;; entries in their palette for such an edge case.  Defining those
     ;; entries is not appropriate.
@@ -5714,26 +2349,26 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                       :background "white" :foreground "#227f9f" :inverse-video 
t)
                      (((class color) (min-colors 88) (background dark))
                       :background "black" :foreground "#66cbdc" :inverse-video 
t)))
-    `(hi-black-b ((,class :inverse-video t)))
-    `(hi-black-hb ((,class :background ,bg-main :foreground ,fg-alt 
:inverse-video t)))
+    `(hi-black-b ((,c :inverse-video t)))
+    `(hi-black-hb ((,c :background ,bg-main :foreground ,fg-dim :inverse-video 
t)))
     `(hi-blue ((((class color) (min-colors 88) (background light))
                 :background "white" :foreground "#3366dd" :inverse-video t)
                (((class color) (min-colors 88) (background dark))
                 :background "black" :foreground "#aaccff" :inverse-video t)))
-    `(hi-blue-b ((,class :inherit (bold hi-blue))))
+    `(hi-blue-b ((,c :inherit (bold hi-blue))))
     `(hi-green ((((class color) (min-colors 88) (background light))
-                  :background "white" :foreground "#008a00" :inverse-video t)
-                 (((class color) (min-colors 88) (background dark))
-                  :background "black" :foreground "#66dd66" :inverse-video t)))
-    `(hi-green-b ((,class :inherit (bold hi-green))))
+                 :background "white" :foreground "#008a00" :inverse-video t)
+                (((class color) (min-colors 88) (background dark))
+                 :background "black" :foreground "#66dd66" :inverse-video t)))
+    `(hi-green-b ((,c :inherit (bold hi-green))))
     `(hi-pink ((((class color) (min-colors 88) (background light))
-                  :background "white" :foreground "#bd30aa" :inverse-video t)
-                 (((class color) (min-colors 88) (background dark))
-                  :background "black" :foreground "#ff88ee" :inverse-video t)))
+                :background "white" :foreground "#bd30aa" :inverse-video t)
+               (((class color) (min-colors 88) (background dark))
+                :background "black" :foreground "#ff88ee" :inverse-video t)))
     `(hi-red-b ((((class color) (min-colors 88) (background light))
-                  :background "white" :foreground "#dd0000" :inverse-video t)
-                 (((class color) (min-colors 88) (background dark))
-                  :background "black" :foreground "#f06666" :inverse-video t)))
+                 :background "white" :foreground "#dd0000" :inverse-video t)
+                (((class color) (min-colors 88) (background dark))
+                 :background "black" :foreground "#f06666" :inverse-video t)))
     `(hi-salmon ((((class color) (min-colors 88) (background light))
                   :background "white" :foreground "#bf555a" :inverse-video t)
                  (((class color) (min-colors 88) (background dark))
@@ -5742,1734 +2377,1299 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                   :background "white" :foreground "#af6400" :inverse-video t)
                  (((class color) (min-colors 88) (background dark))
                   :background "black" :foreground "#faea00" :inverse-video t)))
-    `(highlight ((,class ,@(if modus-themes-intense-mouseovers
-                               (list :background blue-intense-bg :foreground 
fg-main)
-                             (list :background cyan-subtle-bg :foreground 
fg-main)))))
-    `(highlight-changes ((,class :foreground ,red-alt :underline nil)))
-    `(highlight-changes-delete ((,class :background ,red-nuanced-bg
-                                        :foreground ,red :underline t)))
-    `(hl-line ((,class :inherit modus-themes-hl-line)))
-;;;;; highlight-indentation
-    `(highlight-indentation-face ((,class :inherit modus-themes-hl-line)))
-    `(highlight-indentation-current-column-face ((,class :background 
,bg-active)))
+    `(highlight ((,c :background ,bg-hover)))
+    `(highlight-changes ((,c :foreground ,warning :underline nil)))
+    `(highlight-changes-delete ((,c :foreground ,err :underline t)))
+    `(hl-line ((,c :background ,bg-hl-line :extend t)))
 ;;;;; highlight-numbers
-    `(highlight-numbers-number ((,class :foreground ,blue-alt-other)))
+    `(highlight-numbers-number ((,c :foreground ,constant)))
 ;;;;; highlight-thing
-    `(highlight-thing ((,class :inherit modus-themes-special-calm)))
-;;;;; hl-defined
-    `(hdefd-functions ((,class :foreground ,blue)))
-    `(hdefd-undefined ((,class :foreground ,red-alt)))
-    `(hdefd-variables ((,class :foreground ,cyan-alt)))
+    `(highlight-thing ((,c :inherit match)))
 ;;;;; hl-fill-column
-    `(hl-fill-column-face ((,class :background ,bg-active :foreground 
,fg-active)))
+    `(hl-fill-column-face ((,c :background ,bg-active)))
 ;;;;; hl-todo
-    `(hl-todo ((,class :inherit (bold modus-themes-slant) :foreground 
,red-alt-other)))
+    `(hl-todo ((,c :inherit (bold font-lock-comment-face) :foreground ,err)))
 ;;;;; hydra
-    `(hydra-face-amaranth ((,class :inherit bold :foreground ,yellow-alt)))
-    `(hydra-face-blue ((,class :inherit bold :foreground ,blue)))
-    `(hydra-face-pink ((,class :inherit bold :foreground ,magenta-alt-faint)))
-    `(hydra-face-red ((,class :inherit bold :foreground ,red-faint)))
-    `(hydra-face-teal ((,class :inherit bold :foreground ,cyan-alt-other)))
+    `(hydra-face-amaranth ((,c :inherit bold :foreground ,yellow-warmer)))
+    `(hydra-face-blue ((,c :inherit bold :foreground ,blue)))
+    `(hydra-face-pink ((,c :inherit bold :foreground ,magenta)))
+    `(hydra-face-red ((,c :inherit bold :foreground ,red-faint)))
+    `(hydra-face-teal ((,c :inherit bold :foreground ,cyan-cooler)))
 ;;;;; icomplete
-    `(icomplete-first-match ((,class :inherit 
modus-themes-completion-match-0)))
-    `(icomplete-selected-match ((,class :inherit 
modus-themes-completion-selected)))
-;;;;; icomplete-vertical
-    `(icomplete-vertical-separator ((,class :inherit shadow)))
+    `(icomplete-first-match ((,c :inherit modus-themes-completion-match-0)))
+    `(icomplete-selected-match ((,c :inherit 
modus-themes-completion-selected)))
 ;;;;; ido-mode
-    `(ido-first-match ((,class :inherit modus-themes-completion-match-0)))
-    `(ido-incomplete-regexp ((,class :inherit error)))
-    `(ido-indicator ((,class :inherit modus-themes-subtle-yellow)))
-    `(ido-only-match ((,class :inherit ido-first-match)))
-    `(ido-subdir ((,class :foreground ,blue)))
-    `(ido-virtual ((,class :foreground ,magenta-alt-other)))
+    `(ido-first-match ((,c :inherit modus-themes-completion-match-0)))
+    `(ido-incomplete-regexp ((,c :inherit error)))
+    `(ido-indicator ((,c :inherit bold)))
+    `(ido-only-match ((,c :inherit ido-first-match)))
+    `(ido-subdir ((,c :foreground ,accent-0)))
+    `(ido-virtual ((,c :foreground ,accent-1)))
 ;;;;; iedit
-    `(iedit-occurrence ((,class :inherit modus-themes-refine-blue)))
-    `(iedit-read-only-occurrence ((,class :inherit 
modus-themes-intense-yellow)))
+    `(iedit-occurrence ((,c :inherit modus-themes-intense-blue)))
+    `(iedit-read-only-occurrence ((,c :inherit modus-themes-intense-yellow)))
 ;;;;; iflipb
-    `(iflipb-current-buffer-face ((,class :inherit bold :foreground 
,cyan-alt)))
-    `(iflipb-other-buffer-face ((,class :inherit shadow)))
+    `(iflipb-current-buffer-face ((,c :inherit bold :foreground ,name)))
+    `(iflipb-other-buffer-face ((,c :inherit shadow)))
 ;;;;; image-dired
-    `(image-dired-thumb-flagged ((,class :background ,red-intense-bg)))
-    `(image-dired-thumb-header-file-name ((,class :inherit bold)))
-    `(image-dired-thumb-header-file-size ((,class :foreground ,blue-active)))
-    `(image-dired-thumb-mark ((,class :inherit 
modus-themes-grue-background-intense)))
+    `(image-dired-thumb-flagged ((,c :inherit modus-themes-intense-red)))
+    `(image-dired-thumb-header-file-name ((,c :inherit bold)))
+    `(image-dired-thumb-header-file-size ((,c :foreground ,constant)))
+    `(image-dired-thumb-mark ((,c :inherit modus-themes-intense-cyan)))
 ;;;;; imenu-list
-    `(imenu-list-entry-face-0 ((,class :foreground ,cyan)))
-    `(imenu-list-entry-face-1 ((,class :foreground ,blue)))
-    `(imenu-list-entry-face-2 ((,class :foreground ,cyan-alt-other)))
-    `(imenu-list-entry-face-3 ((,class :foreground ,blue-alt)))
-    `(imenu-list-entry-subalist-face-0 ((,class :inherit bold :foreground 
,magenta-alt-other :underline t)))
-    `(imenu-list-entry-subalist-face-1 ((,class :inherit bold :foreground 
,magenta :underline t)))
-    `(imenu-list-entry-subalist-face-2 ((,class :inherit bold :foreground 
,green-alt-other :underline t)))
-    `(imenu-list-entry-subalist-face-3 ((,class :inherit bold :foreground 
,red-alt-other :underline t)))
+    `(imenu-list-entry-face-0 ((,c :foreground ,fg-heading-0)))
+    `(imenu-list-entry-face-1 ((,c :foreground ,fg-heading-1)))
+    `(imenu-list-entry-face-2 ((,c :foreground ,fg-heading-2)))
+    `(imenu-list-entry-face-3 ((,c :foreground ,fg-heading-3)))
+    `(imenu-list-entry-subalist-face-0 ((,c :inherit bold :foreground 
,fg-heading-4 :underline t)))
+    `(imenu-list-entry-subalist-face-1 ((,c :inherit bold :foreground 
,fg-heading-5 :underline t)))
+    `(imenu-list-entry-subalist-face-2 ((,c :inherit bold :foreground 
,fg-heading-6 :underline t)))
+    `(imenu-list-entry-subalist-face-3 ((,c :inherit bold :foreground 
,fg-heading-7 :underline t)))
 ;;;;; indium
-    `(indium-breakpoint-face ((,class :foreground ,red-active)))
-    `(indium-frame-url-face ((,class :inherit (shadow button))))
-    `(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 modus-themes-prompt)))
-    `(indium-repl-stdout-face ((,class :foreground ,fg-main)))
+    `(indium-breakpoint-face ((,c :foreground ,err)))
+    `(indium-frame-url-face ((,c :inherit (shadow button))))
+    `(indium-keyword-face ((,c :inherit font-lock-keyword-face)))
+    `(indium-litable-face ((,c :inherit modus-themes-slant)))
+    `(indium-repl-error-face ((,c :inherit error)))
+    `(indium-repl-prompt-face ((,c :inherit modus-themes-prompt)))
+    `(indium-repl-stdout-face (( )))
 ;;;;; info
-    `(Info-quoted ((,class :inherit modus-themes-markup-verbatim))) ; the 
capitalization is canonical
-    `(info-header-node ((,class :inherit (shadow bold))))
-    `(info-header-xref ((,class :foreground ,blue-active)))
-    `(info-index-match ((,class :inherit match)))
-    `(info-menu-header ((,class :inherit modus-themes-pseudo-header)))
-    `(info-menu-star ((,class :foreground ,red)))
-    `(info-node ((,class :inherit bold)))
-    `(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-quoted ((,c :inherit modus-themes-prose-verbatim))) ; the 
capitalization is canonical
+    `(info-header-node ((,c :inherit (shadow bold))))
+    `(info-header-xref ((,c :foreground ,fg-link)))
+    `(info-index-match ((,c :inherit match)))
+    `(info-menu-header ((,c :inherit bold)))
+    `(info-menu-star ((,c :foreground ,red-intense)))
+    `(info-node ((,c :inherit bold)))
+    `(info-title-1 ((,c :inherit modus-themes-heading-1)))
+    `(info-title-2 ((,c :inherit modus-themes-heading-2)))
+    `(info-title-3 ((,c :inherit modus-themes-heading-3)))
+    `(info-title-4 ((,c :inherit modus-themes-heading-4)))
 ;;;;; info+ (info-plus)
-    `(info-command-ref-item ((,class :inherit font-lock-function-name-face)))
-    `(info-constant-ref-item ((,class :inherit font-lock-constant-face)))
-    `(info-custom-delimited ((,class :inherit modus-themes-markup-verbatim)))
-    `(info-double-quoted-name ((,class :inherit font-lock-string-face)))
+    `(info-command-ref-item ((,c :inherit font-lock-function-name-face)))
+    `(info-constant-ref-item ((,c :inherit font-lock-constant-face)))
+    `(info-custom-delimited ((,c :inherit modus-themes-prose-verbatim)))
+    `(info-double-quoted-name ((,c :inherit font-lock-string-face)))
     `(info-file (( )))
-    `(info-function-ref-item ((,class :inherit font-lock-function-name-face)))
-    `(info-glossary-word ((,class :inherit modus-themes-box-button)))
+    `(info-function-ref-item ((,c :inherit font-lock-function-name-face)))
+    `(info-glossary-word ((,c :inherit modus-themes-button)))
     `(info-indented-text (( )))
     `(info-isolated-backquote (( )))
     `(info-isolated-quote (( )))
-    `(info-macro-ref-item ((,class :inherit font-lock-keyword-face)))
-    `(info-menu ((,class :inherit bold)))
-    `(info-quoted-name ((,class :inherit modus-themes-markup-verbatim)))
-    `(info-reference-item ((,class :inherit bold)))
-    `(info-special-form-ref-item ((,class :inherit warning)))
-    `(info-string ((,class :inherit font-lock-string-face)))
-    `(info-syntax-class-item ((,class :inherit modus-themes-markup-code)))
-    `(info-user-option-ref-item ((,class :inherit 
font-lock-variable-name-face)))
-    `(info-variable-ref-item ((,class :inherit font-lock-variable-name-face)))
+    `(info-macro-ref-item ((,c :inherit font-lock-keyword-face)))
+    `(info-menu ((,c :inherit bold)))
+    `(info-quoted-name ((,c :inherit modus-themes-prose-verbatim)))
+    `(info-reference-item ((,c :inherit bold)))
+    `(info-special-form-ref-item ((,c :inherit warning)))
+    `(info-string ((,c :inherit font-lock-string-face)))
+    `(info-syntax-class-item ((,c :inherit modus-themes-prose-code)))
+    `(info-user-option-ref-item ((,c :inherit font-lock-variable-name-face)))
+    `(info-variable-ref-item ((,c :inherit font-lock-variable-name-face)))
 ;;;;; info-colors
-    `(info-colors-lisp-code-block ((,class :inherit modus-themes-fixed-pitch)))
-    `(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)))
-    `(info-colors-ref-item-other ((,class :inherit font-lock-doc-face)))
-    `(info-colors-ref-item-special-form ((,class :inherit 
font-lock-keyword-face)))
-    `(info-colors-ref-item-syntax-class ((,class :inherit 
font-lock-builtin-face)))
-    `(info-colors-ref-item-type ((,class :inherit font-lock-type-face)))
-    `(info-colors-ref-item-user-option ((,class :inherit 
font-lock-variable-name-face)))
-    `(info-colors-ref-item-variable ((,class :inherit 
font-lock-variable-name-face)))
-;;;;; interaction-log
-    `(ilog-buffer-face ((,class :foreground ,magenta-alt-other)))
-    `(ilog-change-face ((,class :foreground ,magenta-alt)))
-    `(ilog-echo-face ((,class :foreground ,yellow-alt-other)))
-    `(ilog-load-face ((,class :foreground ,green)))
-    `(ilog-message-face ((,class :inherit shadow)))
-    `(ilog-non-change-face ((,class :foreground ,blue)))
+    `(info-colors-lisp-code-block ((,c :inherit modus-themes-fixed-pitch)))
+    `(info-colors-ref-item-command ((,c :inherit 
font-lock-function-name-face)))
+    `(info-colors-ref-item-constant ((,c :inherit font-lock-constant-face)))
+    `(info-colors-ref-item-function ((,c :inherit 
font-lock-function-name-face)))
+    `(info-colors-ref-item-macro ((,c :inherit font-lock-keyword-face)))
+    `(info-colors-ref-item-other ((,c :inherit font-lock-doc-face)))
+    `(info-colors-ref-item-special-form ((,c :inherit font-lock-keyword-face)))
+    `(info-colors-ref-item-syntax-class ((,c :inherit font-lock-builtin-face)))
+    `(info-colors-ref-item-type ((,c :inherit font-lock-type-face)))
+    `(info-colors-ref-item-user-option ((,c :inherit 
font-lock-variable-name-face)))
+    `(info-colors-ref-item-variable ((,c :inherit 
font-lock-variable-name-face)))
 ;;;;; ioccur
-    `(ioccur-cursor ((,class :foreground ,fg-main)))
-    `(ioccur-invalid-regexp ((,class :foreground ,red)))
-    `(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-themes-refine-blue :extend 
t)))
-    `(ioccur-regexp-face ((,class :inherit (modus-themes-intense-magenta 
bold))))
-    `(ioccur-title-face ((,class :inherit modus-themes-pseudo-header 
:foreground ,fg-special-cold)))
+    `(ioccur-cursor ((,c :foreground ,fg-main)))
+    `(ioccur-invalid-regexp ((,c :inherit error)))
+    `(ioccur-match-face ((,c :inherit match)))
+    `(ioccur-match-overlay-face ((,c :background ,bg-inactive :extend t)))
+    `(ioccur-num-line-face ((,c :inherit shadow)))
+    `(ioccur-overlay-face ((,c :background ,bg-hl-line :extend t)))
+    `(ioccur-regexp-face ((,c :inherit (modus-themes-search-current bold))))
+    `(ioccur-title-face ((,c :inherit bold :foreground ,name)))
 ;;;;; isearch, occur, and the like
-    `(isearch ((,class :inherit modus-themes-search-success)))
-    `(isearch-fail ((,class :inherit modus-themes-refine-red)))
-    `(isearch-group-1 ((,class :inherit modus-themes-refine-blue)))
-    `(isearch-group-2 ((,class :inherit modus-themes-refine-magenta)))
-    `(lazy-highlight ((,class :inherit modus-themes-search-success-lazy)))
-    `(match ((,class :inherit modus-themes-special-calm)))
-    `(query-replace ((,class :inherit modus-themes-intense-red)))
+    `(isearch ((,c :inherit modus-themes-search-current)))
+    `(isearch-fail ((,c :inherit modus-themes-intense-red)))
+    `(isearch-group-1 ((,c :inherit modus-themes-intense-blue)))
+    `(isearch-group-2 ((,c :inherit modus-themes-intense-magenta)))
+    `(lazy-highlight ((,c :inherit modus-themes-search-lazy)))
+    `(match ((,c :background ,bg-magenta-subtle :foreground ,fg-main)))
+    `(query-replace ((,c :inherit modus-themes-intense-red)))
 ;;;;; ivy
-    `(ivy-action ((,class :inherit modus-themes-key-binding)))
-    `(ivy-confirm-face ((,class :inherit success)))
-    `(ivy-current-match ((,class :inherit modus-themes-completion-selected)))
-    `(ivy-cursor ((,class :background ,fg-main :foreground ,bg-main)))
-    `(ivy-highlight-face ((,class :foreground ,magenta)))
-    `(ivy-match-required-face ((,class :inherit error)))
+    `(ivy-action ((,c :inherit modus-themes-key-binding)))
+    `(ivy-confirm-face ((,c :inherit success)))
+    `(ivy-current-match ((,c :inherit modus-themes-completion-selected)))
+    `(ivy-match-required-face ((,c :inherit error)))
     `(ivy-minibuffer-match-face-1 (( )))
-    `(ivy-minibuffer-match-face-2 ((,class :inherit 
modus-themes-completion-match-0)))
-    `(ivy-minibuffer-match-face-3 ((,class :inherit 
modus-themes-completion-match-1)))
-    `(ivy-minibuffer-match-face-4 ((,class :inherit 
modus-themes-completion-match-2)))
-    `(ivy-org ((,class :foreground ,cyan-alt-other)))
-    `(ivy-remote ((,class :foreground ,magenta)))
-    `(ivy-separator ((,class :inherit shadow)))
-    `(ivy-subdir ((,class :foreground ,blue)))
-    `(ivy-virtual ((,class :foreground ,magenta-alt-other)))
+    `(ivy-minibuffer-match-face-2 ((,c :inherit 
modus-themes-completion-match-0)))
+    `(ivy-minibuffer-match-face-3 ((,c :inherit 
modus-themes-completion-match-1)))
+    `(ivy-minibuffer-match-face-4 ((,c :inherit 
modus-themes-completion-match-2)))
+    `(ivy-remote ((,c :inherit italic)))
+    `(ivy-separator ((,c :inherit shadow)))
+    `(ivy-subdir ((,c :foreground ,accent-0)))
+    `(ivy-virtual ((,c :foreground ,accent-1)))
 ;;;;; ivy-posframe
-    `(ivy-posframe-border ((,class :background ,fg-window-divider-inner)))
-    `(ivy-posframe-cursor ((,class :background ,fg-main :foreground ,bg-main)))
+    `(ivy-posframe-border ((,c :background ,border)))
+    `(ivy-posframe-cursor ((,c :background ,fg-main :foreground ,bg-main)))
 ;;;;; jira (org-jira)
-    `(jiralib-comment-face ((,class :background ,bg-alt)))
-    `(jiralib-comment-header-face ((,class :inherit 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)))
+    `(jiralib-comment-face ((,c :background ,bg-inactive)))
+    `(jiralib-comment-header-face ((,c :inherit bold)))
+    `(jiralib-issue-info-face ((,c :background ,bg-inactive)))
+    `(jiralib-issue-info-header-face ((,c :inherit bold :background 
,bg-inactive)))
+    `(jiralib-issue-summary-face ((,c :inherit bold)))
+    `(jiralib-link-filter-face ((,c :underline t)))
+    `(jiralib-link-issue-face ((,c :underline t)))
+    `(jiralib-link-project-face ((,c :underline t)))
 ;;;;; journalctl-mode
-    `(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 warning)))
+    `(journalctl-error-face ((,c :inherit error)))
+    `(journalctl-finished-face ((,c :inherit success)))
+    `(journalctl-host-face ((,c :foreground ,name)))
+    `(journalctl-process-face ((,c :foreground ,warning)))
+    `(journalctl-starting-face ((,c :foreground ,info)))
+    `(journalctl-timestamp-face ((,c :foreground ,date-common)))
+    `(journalctl-warning-face ((,c :inherit warning)))
 ;;;;; js2-mode
-    `(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 :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 :inherit 
font-lock-preprocessor-face)))
-    `(js2-private-member ((,class :inherit font-lock-warning-face)))
-    `(js2-warning ((,class :inherit modus-themes-lang-warning)))
+    `(js2-error ((,c :inherit modus-themes-lang-error)))
+    `(js2-external-variable ((,c :inherit font-lock-variable-name-face)))
+    `(js2-function-call ((,c :inherit font-lock-function-name-face)))
+    `(js2-function-param ((,c :inherit font-lock-constant-face)))
+    `(js2-instance-member ((,c :inherit font-lock-keyword-face)))
+    `(js2-jsdoc-html-tag-delimiter ((,c :foreground ,fg-main)))
+    `(js2-jsdoc-html-tag-name ((,c :inherit font-lock-function-name-face)))
+    `(js2-jsdoc-tag ((,c :inherit (font-lock-builtin-face 
font-lock-comment-face) :weight normal)))
+    `(js2-jsdoc-type ((,c :inherit (font-lock-type-face 
font-lock-comment-face) :weight normal)))
+    `(js2-jsdoc-value ((,c :inherit (font-lock-constant-face 
font-lock-comment-face) :weight normal)))
+    `(js2-object-property ((,c :foreground ,fg-main)))
+    `(js2-object-property-access ((,c :foreground ,fg-main)))
+    `(js2-private-function-call ((,c :inherit font-lock-preprocessor-face)))
+    `(js2-private-member ((,c :inherit font-lock-warning-face)))
+    `(js2-warning ((,c :inherit modus-themes-lang-warning)))
 ;;;;; julia
-    `(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-themes-intense-red)))
+    `(julia-macro-face ((,c :inherit font-lock-builtin-face)))
+    `(julia-quoted-symbol-face ((,c :inherit font-lock-constant-face)))
 ;;;;; kaocha-runner
-    `(kaocha-runner-error-face ((,class :inherit error)))
-    `(kaocha-runner-success-face ((,class :inherit success)))
-    `(kaocha-runner-warning-face ((,class :inherit warning)))
+    `(kaocha-runner-error-face ((,c :inherit error)))
+    `(kaocha-runner-success-face ((,c :inherit success)))
+    `(kaocha-runner-warning-face ((,c :inherit warning)))
 ;;;;; keycast
-    `(keycast-command ((,class :inherit bold :foreground ,blue-active)))
-    ;; FIXME 2022-05-03: The padding breaks `keycast-tab-bar-mode'
-    `(keycast-key ((,class ;; ,@(modus-themes--mode-line-padded-box 
blue-active)
-                           :background ,blue-active :foreground ,bg-main)))
+    `(keycast-command ((,c :inherit bold :foreground ,keybind)))
+    `(keycast-key ((,c :background ,keybind :foreground ,bg-main :box 
,keybind)))
 ;;;;; ledger-mode
-    `(ledger-font-auto-xact-face ((,class :foreground ,magenta)))
-    `(ledger-font-account-name-face ((,class :foreground ,fg-special-cold)))
-    `(ledger-font-directive-face ((,class :foreground ,magenta-alt-other)))
-    `(ledger-font-posting-date-face ((,class :inherit bold :foreground 
,fg-main)))
-    `(ledger-font-periodic-xact-face ((,class :foreground ,cyan-alt-other)))
-    `(ledger-font-posting-amount-face ((,class :foreground ,fg-special-mild)))
-    `(ledger-font-payee-cleared-face ((,class :foreground ,blue-alt)))
-    `(ledger-font-payee-pending-face ((,class :foreground ,yellow)))
-    `(ledger-font-payee-uncleared-face ((,class :foreground ,red-alt-other)))
-    `(ledger-font-xact-highlight-face ((,class :background ,bg-hl-alt)))
+    `(ledger-font-auto-xact-face ((,c :inherit font-lock-builtin-face)))
+    `(ledger-font-account-name-face ((,c :foreground ,name)))
+    `(ledger-font-directive-face ((,c :inherit font-lock-keyword-face)))
+    `(ledger-font-posting-date-face ((,c :inherit modus-themes-bold 
:foreground ,date-common)))
+    `(ledger-font-periodic-xact-face ((,c :inherit 
font-lock-variable-name-face)))
+    `(ledger-font-posting-amount-face ((,c :inherit font-lock-constant-face)))
+    `(ledger-font-payee-cleared-face ((,c :inherit success)))
+    `(ledger-font-payee-pending-face ((,c :inherit warning)))
+    `(ledger-font-payee-uncleared-face ((,c :inherit error)))
+    `(ledger-font-xact-highlight-face ((,c :inherit highlight)))
 ;;;;; leerzeichen
-    `(leerzeichen ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
+    `(leerzeichen ((,c :background ,bg-inactive)))
 ;;;;; line numbers (display-line-numbers-mode and global variant)
     ;; Here we cannot inherit `modus-themes-fixed-pitch'.  We need to
     ;; fall back to `default' otherwise line numbers do not scale when
     ;; using `text-scale-adjust'.
-    `(line-number
-      ((,class :inherit ,(if modus-themes-mixed-fonts '(fixed-pitch default) 
'default)
-               ,@(modus-themes--line-numbers
-                  fg-alt bg-dim
-                  fg-unfocused))))
-    `(line-number-current-line
-      ((,class :inherit (bold line-number)
-               ,@(modus-themes--line-numbers
-                  fg-main bg-active
-                  blue-alt-other))))
-    `(line-number-major-tick
-      ((,class :inherit (bold line-number)
-               ,@(modus-themes--line-numbers
-                  yellow-nuanced-fg yellow-nuanced-bg
-                  red-alt))))
-    `(line-number-minor-tick
-      ((,class :inherit (bold line-number)
-               ,@(modus-themes--line-numbers
-                  fg-alt bg-inactive
-                  fg-inactive))))
-;;;;; lsp-mode
-    `(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 ((,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-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-themes-bold :foreground 
,magenta-alt)))
-    `(lsp-face-semhl-preprocessor ((,class :foreground ,red-alt-other)))
-    `(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-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)))
-    `(lsp-lens-face ((,class  :inherit shadow :height 0.8)))
-    `(lsp-lens-mouse-face ((,class :height 0.8 :foreground ,blue-alt-other 
:underline t)))
-    `(lsp-ui-doc-background ((,class :background ,bg-alt)))
-    `(lsp-ui-doc-header ((,class :background ,bg-header :foreground 
,fg-header)))
-    `(lsp-ui-doc-url ((,class :inherit button)))
-    `(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-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-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)))
-    `(lsp-ui-sideline-symbol-info ((,class :inherit italic :height 0.99)))
-;;;;; macrostep
-    `(macrostep-compiler-macro-face ((,class :inherit italic)))
-    `(macrostep-expansion-highlight-face ((,class :background 
,blue-nuanced-bg)))
-    `(macrostep-gensym-1 ((,class :inherit bold :foreground ,blue :box t)))
-    `(macrostep-gensym-2 ((,class :inherit bold :foreground ,green :box t)))
-    `(macrostep-gensym-3 ((,class :inherit bold :foreground ,yellow :box t)))
-    `(macrostep-gensym-4 ((,class :inherit bold :foreground ,red :box t)))
-    `(macrostep-gensym-5 ((,class :inherit bold :foreground ,magenta :box t)))
-    `(macrostep-macro-face ((,class :inherit button :foreground ,green-alt)))
+    `(line-number ((,c :inherit ,(if modus-themes-mixed-fonts '(fixed-pitch 
default) 'default) :background ,bg-line-number-inactive :foreground 
,fg-line-number-inactive)))
+    `(line-number-current-line ((,c :inherit (bold line-number) :background 
,bg-line-number-active :foreground ,fg-line-number-active)))
+    `(line-number-major-tick ((,c :inherit line-number :foreground ,err)))
+    `(line-number-minor-tick ((,c :inherit line-number :foreground ,fg-alt)))
 ;;;;; magit
-    `(magit-bisect-bad ((,class :inherit error)))
-    `(magit-bisect-good ((,class :inherit success)))
-    `(magit-bisect-skip ((,class :inherit warning)))
-    `(magit-blame-date ((,class :foreground ,blue)))
-    `(magit-blame-dimmed ((,class :inherit (shadow modus-themes-reset-hard))))
-    `(magit-blame-hash ((,class :foreground ,fg-special-warm)))
-    `(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)))
-    ;; ;; NOTE 2021-11-23: we do not set the `magit-branch-current'
-    ;; ;; because its definition checks if the :box attribute can be set
-    ;; ;; and if not, it uses :inverse-video.  Useful for terminal
-    ;; ;; emulators.
-    ;;
-    ;; `(magit-branch-current ((,class :foreground ,blue-alt-other :box t)))
-    `(magit-branch-local ((,class :foreground ,blue-alt)))
-    `(magit-branch-remote ((,class :foreground ,magenta-alt)))
-    `(magit-branch-remote-head ((,class :foreground ,magenta-alt-other :box 
t)))
-    `(magit-branch-upstream ((,class :inherit italic)))
-    `(magit-branch-warning ((,class :inherit warning)))
-    `(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-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
-                                   bg-diff-added fg-diff-added
-                                   green-nuanced-bg fg-diff-added
-                                   bg-diff-added-deuteran 
fg-diff-added-deuteran
-                                   blue-nuanced-bg fg-diff-added-deuteran))))
-    `(magit-diff-added-highlight ((,class :inherit 
modus-themes-diff-focus-added)))
-    `(magit-diff-base ((,class ,@(modus-themes--diff
-                                  bg-diff-changed fg-diff-changed
-                                  yellow-nuanced-bg fg-diff-changed))))
-    `(magit-diff-base-highlight ((,class :inherit 
modus-themes-diff-focus-changed)))
-    `(magit-diff-context ((,class ,@(unless (eq modus-themes-diffs 'bg-only) 
(list :foreground fg-unfocused)))))
-    `(magit-diff-context-highlight ((,class ,@(modus-themes--diff
-                                               bg-inactive fg-inactive
-                                               bg-dim fg-alt
-                                               bg-dim fg-alt))))
-    `(magit-diff-file-heading ((,class :inherit bold :foreground 
,fg-special-cold)))
-    `(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-themes-diff-* faces.
-    `(magit-diff-hunk-heading ((,class :inherit bold
-                                       ,@(modus-themes--diff
-                                          bg-active fg-inactive
-                                          bg-inactive fg-inactive
-                                          bg-inactive fg-inactive
-                                          nil nil
-                                          t))))
-    ;; NOTE: we do not follow the pattern of inheriting from
-    ;; modus-themes-grue-* faces, as this is a special case.
-    `(magit-diff-hunk-heading-highlight
-      ((,class :inherit bold
-               :background ,@(modus-themes--deuteran bg-active bg-diff-heading)
-               :foreground ,@(modus-themes--deuteran fg-main 
fg-diff-heading))))
-    `(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-themes-refine-magenta)))
-    `(magit-diff-removed ((,class ,@(modus-themes--diff
-                                     bg-diff-removed fg-diff-removed
-                                     red-nuanced-bg fg-diff-removed))))
-    `(magit-diff-removed-highlight ((,class :inherit 
modus-themes-diff-focus-removed)))
-    `(magit-diffstat-added ((,class :inherit modus-themes-grue)))
-    `(magit-diffstat-removed ((,class :foreground ,red)))
-    `(magit-dimmed ((,class :foreground ,fg-unfocused)))
-    `(magit-filename ((,class :foreground ,fg-special-cold)))
-    `(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 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)))
-    `(magit-log-author ((,class :foreground ,cyan)))
-    `(magit-log-date ((,class :inherit shadow)))
-    `(magit-log-graph ((,class :foreground ,fg-dim)))
-    `(magit-mode-line-process ((,class :inherit bold :foreground 
,cyan-active)))
-    `(magit-mode-line-process-error ((,class :inherit bold :foreground 
,red-active)))
-    `(magit-process-ng ((,class :inherit error)))
-    `(magit-process-ok ((,class :inherit success)))
-    `(magit-reflog-amend ((,class :inherit warning)))
-    `(magit-reflog-checkout ((,class :inherit bold :foreground ,blue-alt)))
-    `(magit-reflog-cherry-pick ((,class :inherit success)))
-    `(magit-reflog-commit ((,class :inherit bold)))
-    `(magit-reflog-merge ((,class :inherit success)))
-    `(magit-reflog-other ((,class :inherit bold :foreground ,cyan)))
-    `(magit-reflog-rebase ((,class :inherit bold :foreground ,magenta)))
-    `(magit-reflog-remote ((,class :inherit bold :foreground 
,magenta-alt-other)))
-    `(magit-reflog-reset ((,class :inherit error)))
-    `(magit-refname ((,class :inherit shadow)))
-    `(magit-refname-pullreq ((,class :inherit shadow)))
-    `(magit-refname-stash ((,class :inherit shadow)))
-    `(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-themes-refine-cyan bold))))
-    `(magit-section-highlight ((,class :background ,bg-alt)))
-    `(magit-sequence-done ((,class :inherit success)))
-    `(magit-sequence-drop ((,class :inherit error)))
-    `(magit-sequence-exec ((,class :inherit bold :foreground ,magenta-alt)))
-    `(magit-sequence-head ((,class :inherit bold :foreground ,cyan-alt)))
-    `(magit-sequence-onto ((,class :inherit (bold shadow))))
-    `(magit-sequence-part ((,class :inherit warning)))
-    `(magit-sequence-pick ((,class :inherit bold)))
-    `(magit-sequence-stop ((,class :inherit error)))
-    `(magit-signature-bad ((,class :inherit error)))
-    `(magit-signature-error ((,class :inherit error)))
-    `(magit-signature-expired ((,class :inherit warning)))
-    `(magit-signature-expired-key ((,class :foreground ,yellow)))
-    `(magit-signature-good ((,class :inherit success)))
-    `(magit-signature-revoked ((,class :inherit bold :foreground ,magenta)))
-    `(magit-signature-untrusted ((,class :inherit (bold shadow))))
-    `(magit-tag ((,class :foreground ,yellow-alt-other)))
-;;;;; magit-imerge
-    `(magit-imerge-overriding-value ((,class :inherit bold :foreground 
,red-alt)))
+    `(magit-bisect-bad ((,c :inherit error)))
+    `(magit-bisect-good ((,c :inherit success)))
+    `(magit-bisect-skip ((,c :inherit warning)))
+    `(magit-blame-date (( )))
+    `(magit-blame-dimmed ((,c :inherit shadow)))
+    `(magit-blame-hash (( )))
+    `(magit-blame-highlight ((,c :background ,bg-active :foreground ,fg-main)))
+    `(magit-blame-name (( )))
+    `(magit-blame-summary ((  )))
+    `(magit-branch-local ((,c :foreground ,accent-0)))
+    `(magit-branch-remote ((,c :foreground ,accent-1)))
+    `(magit-branch-upstream ((,c :inherit italic)))
+    `(magit-branch-warning ((,c :inherit warning)))
+    `(magit-cherry-equivalent ((,c :foreground ,magenta)))
+    `(magit-cherry-unmatched ((,c :foreground ,cyan)))
+    `(magit-diff-added ((,c :background ,bg-added-faint :foreground 
,fg-added)))
+    `(magit-diff-added-highlight ((,c :background ,bg-added :foreground 
,fg-added)))
+    `(magit-diff-base ((,c :background ,bg-changed-faint :foreground 
,fg-changed)))
+    `(magit-diff-base-highlight ((,c :background ,bg-changed :foreground 
,fg-changed)))
+    `(magit-diff-context ((,c :inherit shadow)))
+    `(magit-diff-context-highlight ((,c :background ,bg-dim)))
+    `(magit-diff-file-heading ((,c :inherit bold :foreground ,accent-0)))
+    `(magit-diff-file-heading-highlight ((,c :inherit magit-diff-file-heading 
:background ,bg-inactive)))
+    `(magit-diff-file-heading-selection ((,c :inherit bold :background 
,bg-hover-secondary)))
+    `(magit-diff-hunk-heading ((,c :background ,bg-inactive)))
+    `(magit-diff-hunk-heading-highlight ((,c :inherit bold :background 
,bg-active)))
+    `(magit-diff-hunk-heading-selection ((,c :inherit bold :background 
,bg-hover-secondary)))
+    `(magit-diff-hunk-region ((,c :inherit bold)))
+    `(magit-diff-lines-boundary ((,c :background ,fg-main)))
+    `(magit-diff-lines-heading ((,c :background ,fg-dim :foreground ,bg-main)))
+    `(magit-diff-removed ((,c :background ,bg-removed-faint :foreground 
,fg-removed)))
+    `(magit-diff-removed-highlight ((,c :background ,bg-removed :foreground 
,fg-removed)))
+    `(magit-diffstat-added ((,c :foreground ,fg-added-intense)))
+    `(magit-diffstat-removed ((,c :foreground ,fg-removed-intense)))
+    `(magit-dimmed ((,c :inherit shadow)))
+    `(magit-filename ((,c :foreground ,accent-2)))
+    `(magit-hash ((,c :foreground ,identifier)))
+    `(magit-head ((,c :inherit magit-branch-local)))
+    `(magit-header-line ((,c :inherit bold)))
+    `(magit-header-line-key ((,c :inherit modus-themes-key-binding)))
+    `(magit-header-line-log-select ((,c :inherit bold)))
+    `(magit-keyword ((,c :foreground ,keyword)))
+    `(magit-keyword-squash ((,c :inherit bold :foreground ,warning)))
+    `(magit-log-author ((,c :foreground ,name)))
+    `(magit-log-date ((,c :foreground ,date-common)))
+    `(magit-log-graph ((,c :inherit shadow)))
+    `(magit-mode-line-process ((,c :inherit bold :foreground ,modeline-info)))
+    `(magit-mode-line-process-error ((,c :inherit bold :foreground 
,modeline-err)))
+    `(magit-process-ng ((,c :inherit error)))
+    `(magit-process-ok ((,c :inherit success)))
+    `(magit-reflog-amend ((,c :inherit warning)))
+    `(magit-reflog-checkout ((,c :inherit bold :foreground ,blue)))
+    `(magit-reflog-cherry-pick ((,c :inherit success)))
+    `(magit-reflog-commit ((,c :inherit bold)))
+    `(magit-reflog-merge ((,c :inherit success)))
+    `(magit-reflog-other ((,c :inherit bold :foreground ,cyan)))
+    `(magit-reflog-rebase ((,c :inherit bold :foreground ,magenta)))
+    `(magit-reflog-remote ((,c :inherit (bold magit-branch-remote))))
+    `(magit-reflog-reset ((,c :inherit error)))
+    `(magit-refname ((,c :inherit shadow)))
+    `(magit-refname-pullreq ((,c :inherit shadow)))
+    `(magit-refname-stash ((,c :inherit shadow)))
+    `(magit-refname-wip ((,c :inherit shadow)))
+    `(magit-section ((,c :background ,bg-dim :foreground ,fg-main)))
+    `(magit-section-heading ((,c :inherit bold)))
+    `(magit-section-heading-selection ((,c :inherit bold :background 
,bg-hover-secondary)))
+    `(magit-section-highlight ((,c :background ,bg-dim)))
+    `(magit-sequence-done ((,c :inherit success)))
+    `(magit-sequence-drop ((,c :inherit error)))
+    `(magit-sequence-exec ((,c :inherit bold :foreground ,magenta)))
+    `(magit-sequence-head ((,c :inherit bold :foreground ,cyan)))
+    `(magit-sequence-onto ((,c :inherit (bold shadow))))
+    `(magit-sequence-part ((,c :inherit warning)))
+    `(magit-sequence-pick ((,c :inherit bold)))
+    `(magit-sequence-stop ((,c :inherit error)))
+    `(magit-signature-bad ((,c :inherit error)))
+    `(magit-signature-error ((,c :inherit error)))
+    `(magit-signature-expired ((,c :inherit warning)))
+    `(magit-signature-expired-key ((,c :foreground ,warning)))
+    `(magit-signature-good ((,c :inherit success)))
+    `(magit-signature-revoked ((,c :inherit bold :foreground ,warning)))
+    `(magit-signature-untrusted ((,c :inherit (bold shadow))))
+    `(magit-tag ((,c :foreground ,accent-3))) ; compare with branches
 ;;;;; make-mode (makefiles)
-    `(makefile-makepp-perl ((,class :background ,cyan-nuanced-bg)))
-    `(makefile-space ((,class :background ,magenta-nuanced-bg)))
+    `(makefile-makepp-perl ((,c :background ,bg-dim)))
+    `(makefile-space ((,c :background ,bg-inactive)))
 ;;;;; man
-    `(Man-overstrike ((,class :inherit bold :foreground ,magenta-alt)))
-    `(Man-reverse ((,class :inherit modus-themes-subtle-magenta)))
-    `(Man-underline ((,class :foreground ,cyan-alt-other :underline t)))
+    `(Man-overstrike ((,c :inherit bold :foreground ,accent-0)))
+    `(Man-underline ((,c :foreground ,accent-1 :underline t)))
 ;;;;; marginalia
-    `(marginalia-archive ((,class :foreground ,cyan-alt-other)))
-    `(marginalia-char ((,class :foreground ,magenta)))
-    `(marginalia-date ((,class :foreground ,cyan)))
-    `(marginalia-documentation ((,class :inherit modus-themes-slant 
:foreground ,fg-docstring)))
-    `(marginalia-file-name ((,class :foreground ,blue-faint)))
-    `(marginalia-file-owner ((,class :foreground ,red-faint)))
-    `(marginalia-file-priv-dir ((,class :foreground ,blue-alt)))
-    `(marginalia-file-priv-exec ((,class :foreground ,magenta-alt)))
-    `(marginalia-file-priv-link ((,class :foreground ,blue-alt-other)))
-    `(marginalia-file-priv-no ((,class :foreground "gray50")))
-    `(marginalia-file-priv-other ((,class :foreground ,yellow)))
-    `(marginalia-file-priv-rare ((,class :foreground ,red)))
-    `(marginalia-file-priv-read ((,class :foreground ,fg-main)))
-    `(marginalia-file-priv-write ((,class :foreground ,cyan)))
-    `(marginalia-function ((,class :foreground ,magenta-alt-faint)))
-    `(marginalia-key ((,class :inherit modus-themes-key-binding)))
-    `(marginalia-lighter ((,class :foreground ,blue-alt)))
-    `(marginalia-list ((,class :foreground ,magenta-alt-other-faint)))
-    `(marginalia-mode ((,class :foreground ,cyan)))
-    `(marginalia-modified ((,class :foreground ,magenta-alt-faint)))
-    `(marginalia-null ((,class :inherit shadow)))
-    `(marginalia-number ((,class :foreground ,cyan)))
-    `(marginalia-size ((,class :foreground ,cyan-alt-other-faint)))
-    `(marginalia-string ((,class :foreground ,blue-alt)))
-    `(marginalia-symbol ((,class :foreground ,blue-alt-other-faint)))
-    `(marginalia-true ((,class :foreground ,fg-main)))
-    `(marginalia-type ((,class :foreground ,cyan-alt-other)))
-    `(marginalia-value ((,class :foreground ,cyan)))
-    `(marginalia-version ((,class :foreground ,cyan)))
+    `(marginalia-archive ((,c :foreground ,accent-0)))
+    `(marginalia-char ((,c :foreground ,accent-2)))
+    `(marginalia-date ((,c :foreground ,date-common)))
+    `(marginalia-documentation ((,c :inherit italic :foreground ,docstring)))
+    `(marginalia-file-name (( )))
+    `(marginalia-file-owner ((,c :inherit shadow)))
+    `(marginalia-file-priv-dir ((,c :foreground ,accent-0)))
+    `(marginalia-file-priv-exec ((,c :foreground ,accent-1)))
+    `(marginalia-file-priv-link ((,c :foreground ,fg-link)))
+    `(marginalia-file-priv-no ((,c :inherit shadow)))
+    `(marginalia-file-priv-other ((,c :foreground ,accent-2)))
+    `(marginalia-file-priv-rare ((,c :foreground ,accent-3)))
+    `(marginalia-file-priv-read ((,c :foreground ,fg-main)))
+    `(marginalia-file-priv-write ((,c :foreground ,accent-0)))
+    `(marginalia-function ((,c :foreground ,fnname)))
+    `(marginalia-key ((,c :inherit modus-themes-key-binding)))
+    `(marginalia-lighter ((,c :inherit shadow)))
+    `(marginalia-liqst ((,c :inherit shadow)))
+    `(marginalia-mode ((,c :foreground ,constant)))
+    `(marginalia-modified ((,c :inherit warning)))
+    `(marginalia-null ((,c :inherit shadow)))
+    `(marginalia-number ((,c :foreground ,constant)))
+    `(marginalia-size ((,c :foreground ,variable)))
+    `(marginalia-string ((,c :foreground ,string)))
+    `(marginalia-symbol ((,c :foreground ,builtin)))
+    `(marginalia-true (( )))
+    `(marginalia-type ((,c :foreground ,type)))
+    `(marginalia-value ((,c :inherit shadow)))
+    `(marginalia-version ((,c :foreground ,date-common)))
 ;;;;; markdown-mode
-    `(markdown-blockquote-face ((,class :inherit modus-themes-slant 
:foreground ,fg-special-cold)))
-    `(markdown-bold-face ((,class :inherit bold)))
-    `(markdown-code-face ((,class :inherit modus-themes-fixed-pitch 
:background ,bg-dim :extend t)))
-    `(markdown-comment-face ((,class :inherit font-lock-comment-face)))
-    `(markdown-footnote-marker-face ((,class :inherit bold :foreground 
,cyan-alt)))
-    `(markdown-footnote-text-face ((,class :inherit modus-themes-slant 
:foreground ,fg-main)))
-    `(markdown-gfm-checkbox-face ((,class :foreground ,yellow-alt-other)))
-    `(markdown-header-delimiter-face ((,class :inherit modus-themes-bold 
:foreground ,fg-dim)))
-    `(markdown-header-face ((t nil)))
-    `(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-highlighting-face ((,class :inherit 
modus-themes-refine-yellow)))
-    `(markdown-hr-face ((,class :inherit bold :foreground ,fg-special-warm)))
-    `(markdown-html-attr-name-face ((,class :inherit modus-themes-fixed-pitch
-                                            :foreground ,cyan)))
-    `(markdown-html-attr-value-face ((,class :inherit modus-themes-fixed-pitch
-                                             :foreground ,blue)))
-    `(markdown-html-entity-face ((,class :inherit modus-themes-fixed-pitch
-                                         :foreground ,cyan)))
-    `(markdown-html-tag-delimiter-face ((,class :inherit 
modus-themes-fixed-pitch
-                                                :foreground ,fg-special-mild)))
-    `(markdown-html-tag-name-face ((,class :inherit modus-themes-fixed-pitch
-                                           :foreground ,magenta-alt)))
-    `(markdown-inline-code-face ((,class :inherit 
modus-themes-markup-verbatim)))
-    `(markdown-italic-face ((,class :inherit italic)))
-    `(markdown-language-info-face ((,class :inherit modus-themes-fixed-pitch
-                                           :foreground ,fg-special-cold)))
-    `(markdown-language-keyword-face ((,class :inherit modus-themes-fixed-pitch
-                                              :background ,bg-alt
-                                              :foreground ,fg-alt)))
-    `(markdown-line-break-face ((,class :inherit modus-themes-refine-cyan 
:underline t)))
-    `(markdown-link-face ((,class :inherit button)))
-    `(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)))
-    `(markdown-metadata-key-face ((,class :foreground ,cyan-alt-other)))
-    `(markdown-metadata-value-face ((,class :foreground ,blue-alt)))
-    `(markdown-missing-link-face ((,class :inherit bold :foreground ,yellow)))
-    `(markdown-plain-url-face ((,class :inherit markdown-link-face)))
-    `(markdown-pre-face ((,class :inherit markdown-code-face :foreground 
,fg-special-mild)))
-    `(markdown-reference-face ((,class :inherit markdown-markup-face)))
-    `(markdown-strike-through-face ((,class :strike-through t)))
-    `(markdown-table-face ((,class :inherit modus-themes-fixed-pitch
-                                   :foreground ,fg-special-cold)))
-    `(markdown-url-face ((,class :foreground ,blue-alt)))
+    `(markdown-blockquote-face ((,c :inherit font-lock-doc-face)))
+    `(markdown-bold-face ((,c :inherit bold)))
+    `(markdown-code-face ((,c :inherit modus-themes-fixed-pitch :background 
,bg-dim :extend t)))
+    `(markdown-gfm-checkbox-face ((,c :foreground ,warning)))
+    `(markdown-header-face (( )))
+    `(markdown-header-face-1 ((,c :inherit modus-themes-heading-1)))
+    `(markdown-header-face-2 ((,c :inherit modus-themes-heading-2)))
+    `(markdown-header-face-3 ((,c :inherit modus-themes-heading-3)))
+    `(markdown-header-face-4 ((,c :inherit modus-themes-heading-4)))
+    `(markdown-header-face-5 ((,c :inherit modus-themes-heading-5)))
+    `(markdown-header-face-6 ((,c :inherit modus-themes-heading-6)))
+    `(markdown-highlighting-face ((,c :inherit secondary-selection)))
+    `(markdown-inline-code-face ((,c :inherit modus-themes-prose-code)))
+    `(markdown-italic-face ((,c :inherit italic)))
+    `(markdown-language-keyword-face ((,c :inherit modus-themes-fixed-pitch 
:foreground ,prose-block)))
+    `(markdown-line-break-face ((,c :inherit nobreak-space)))
+    `(markdown-link-face ((,c :inherit link)))
+    `(markdown-markup-face ((,c :inherit shadow)))
+    `(markdown-metadata-key-face ((,c :inherit bold)))
+    `(markdown-metadata-value-face ((,c :foreground ,string)))
+    `(markdown-missing-link-face ((,c :inherit warning)))
+    `(markdown-pre-face ((,c :inherit markdown-code-face)))
+    `(markdown-table-face ((,c :inherit modus-themes-fixed-pitch :foreground 
,prose-table)))
+    `(markdown-url-face ((,c :foreground ,fg-alt)))
 ;;;;; markup-faces (`adoc-mode')
-    `(markup-attribute-face ((,class :inherit (italic markup-meta-face))))
-    `(markup-bold-face ((,class :inherit bold :foreground ,red-nuanced-fg)))
-    `(markup-code-face ((,class :foreground ,magenta)))
-    `(markup-comment-face ((,class :inherit font-lock-comment-face)))
-    `(markup-complex-replacement-face ((,class :background ,magenta-nuanced-bg 
:foreground ,magenta-alt-other)))
-    `(markup-emphasis-face ((,class :inherit markup-italic-face)))
-    `(markup-error-face ((,class :inherit error)))
-    `(markup-gen-face ((,class :foreground ,magenta-alt)))
-    `(markup-internal-reference-face ((,class :inherit modus-themes-slant 
:foreground ,fg-alt)))
-    `(markup-italic-face ((,class :inherit italic)))
-    `(markup-list-face ((,class :inherit modus-themes-special-cold)))
-    `(markup-meta-face ((,class :inherit (modus-themes-fixed-pitch shadow))))
-    `(markup-meta-hide-face ((,class :foreground "gray50")))
-    `(markup-reference-face ((,class :inherit modus-themes-slant :foreground 
,blue-alt)))
-    `(markup-replacement-face ((,class :inherit modus-themes-fixed-pitch 
:foreground ,red-alt)))
-    `(markup-secondary-text-face ((,class :height 0.9 :foreground 
,cyan-alt-other)))
-    `(markup-small-face ((,class :inherit markup-gen-face :height 0.9)))
-    `(markup-strong-face ((,class :inherit markup-bold-face)))
-    `(markup-subscript-face ((,class :height 0.9 :foreground 
,magenta-alt-other)))
-    `(markup-superscript-face ((,class :height 0.9 :foreground 
,magenta-alt-other)))
-    `(markup-table-cell-face ((,class :inherit modus-themes-subtle-neutral)))
-    `(markup-table-face ((,class :inherit modus-themes-subtle-neutral)))
-    `(markup-table-row-face ((,class :inherit modus-themes-special-cold)))
-    `(markup-title-0-face ((,class :inherit modus-themes-heading-1)))
-    `(markup-title-1-face ((,class :inherit modus-themes-heading-2)))
-    `(markup-title-2-face ((,class :inherit modus-themes-heading-3)))
-    `(markup-title-3-face ((,class :inherit modus-themes-heading-4)))
-    `(markup-title-4-face ((,class :inherit modus-themes-heading-5)))
-    `(markup-title-5-face ((,class :inherit modus-themes-heading-6)))
-    `(markup-verbatim-face ((,class :inherit modus-themes-fixed-pitch 
:background ,bg-alt)))
-;;;;; mentor
-    `(mentor-download-message ((,class :foreground ,fg-special-warm)))
-    `(mentor-download-name ((,class :foreground ,fg-special-cold)))
-    `(mentor-download-progress ((,class :foreground ,blue-alt-other)))
-    `(mentor-download-size ((,class :foreground ,magenta-alt-other)))
-    `(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-themes-subtle-blue)))
-    `(mentor-tracker-name ((,class :foreground ,magenta-alt)))
+    `(markup-attribute-face ((,c :inherit (italic markup-meta-face))))
+    `(markup-bold-face ((,c :inherit bold)))
+    `(markup-code-face ((,c :foreground ,prose-code)))
+    `(markup-comment-face ((,c :inherit font-lock-comment-face)))
+    `(markup-complex-replacement-face ((,c :foreground ,prose-macro)))
+    `(markup-emphasis-face ((,c :inherit markup-italic-face)))
+    `(markup-error-face ((,c :inherit error)))
+    `(markup-gen-face ((,c :foreground ,prose-verbatim)))
+    `(markup-internal-reference-face ((,c :inherit (shadow 
modus-themes-slant))))
+    `(markup-italic-face ((,c :inherit italic)))
+    `(markup-list-face ((,c :background ,bg-inactive)))
+    `(markup-meta-face ((,c :inherit (modus-themes-fixed-pitch shadow))))
+    `(markup-meta-hide-face ((,c :foreground "gray50")))
+    `(markup-reference-face ((,c :inherit modus-themes-slant :foreground 
,fg-alt)))
+    `(markup-replacement-face ((,c :inherit modus-themes-fixed-pitch 
:foreground ,err)))
+    `(markup-secondary-text-face ((,c :height 0.9 :foreground ,fg-alt)))
+    `(markup-small-face ((,c :inherit markup-gen-face :height 0.9)))
+    `(markup-strong-face ((,c :inherit markup-bold-face)))
+    `(markup-subscript-face ((,c :height 0.9 :foreground ,fg-alt)))
+    `(markup-superscript-face ((,c :height 0.9 :foreground ,fg-alt)))
+    `(markup-table-cell-face (( )))
+    `(markup-table-face ((,c :foreground ,prose-table)))
+    `(markup-table-row-face (( )))
+    `(markup-title-0-face ((,c :inherit modus-themes-heading-1)))
+    `(markup-title-1-face ((,c :inherit modus-themes-heading-2)))
+    `(markup-title-2-face ((,c :inherit modus-themes-heading-3)))
+    `(markup-title-3-face ((,c :inherit modus-themes-heading-4)))
+    `(markup-title-4-face ((,c :inherit modus-themes-heading-5)))
+    `(markup-title-5-face ((,c :inherit modus-themes-heading-6)))
+    `(markup-verbatim-face ((,c :inherit modus-themes-fixed-pitch :foreground 
,prose-verbatim)))
 ;;;;; messages
-    `(message-cited-text-1 ((,class ,@(modus-themes--mail-cite blue-faint blue 
fg-special-cold))))
-    `(message-cited-text-2 ((,class ,@(modus-themes--mail-cite yellow-faint 
yellow yellow-alt-faint))))
-    `(message-cited-text-3 ((,class ,@(modus-themes--mail-cite 
magenta-alt-faint magenta-alt fg-special-calm))))
-    `(message-cited-text-4 ((,class ,@(modus-themes--mail-cite 
cyan-alt-other-faint cyan-alt-other fg-special-mild))))
-    `(message-header-cc ((,class :foreground ,blue-alt-other)))
-    `(message-header-name ((,class :inherit bold :foreground ,cyan)))
-    `(message-header-newsgroups ((,class :inherit message-header-other)))
-    `(message-header-other ((,class :foreground ,fg-special-calm)))
-    `(message-header-subject ((,class :inherit bold :foreground ,magenta-alt)))
-    `(message-header-to ((,class :inherit bold :foreground 
,magenta-alt-other)))
-    `(message-header-xheader ((,class :foreground ,blue-alt)))
-    `(message-mml ((,class :foreground ,cyan-alt-other)))
-    `(message-separator ((,class :inherit modus-themes-intense-neutral)))
-;;;;; mini-modeline
-    `(mini-modeline-mode-line ((,class :background ,blue-intense :height 
0.14)))
-    `(mini-modeline-mode-line-inactive ((,class :background 
,fg-window-divider-inner :height 0.1)))
+    `(message-cited-text-1 ((,c :foreground ,mail-cite-0)))
+    `(message-cited-text-2 ((,c :foreground ,mail-cite-1)))
+    `(message-cited-text-3 ((,c :foreground ,mail-cite-2)))
+    `(message-cited-text-4 ((,c :foreground ,mail-cite-3)))
+    `(message-header-name ((,c :inherit bold)))
+    `(message-header-newsgroups ((,c :inherit message-header-other)))
+    `(message-header-to ((,c :inherit bold :foreground ,mail-recipient)))
+    `(message-header-cc ((,c :foreground ,mail-recipient)))
+    `(message-header-subject ((,c :inherit bold :foreground ,mail-subject)))
+    `(message-header-xheader ((,c :inherit message-header-other)))
+    `(message-header-other ((,c :foreground ,mail-other)))
+    `(message-mml ((,c :foreground ,mail-part)))
+    `(message-separator ((,c :background ,bg-active)))
 ;;;;; minimap
-    `(minimap-active-region-background ((,class :background ,bg-active)))
-    `(minimap-current-line-face ((,class :background ,cyan-intense-bg 
:foreground ,fg-main)))
-;;;;; mmm-mode
-    `(mmm-cleanup-submode-face ((,class :background ,yellow-nuanced-bg)))
-    `(mmm-code-submode-face ((,class :background ,bg-alt)))
-    `(mmm-comment-submode-face ((,class :background ,blue-nuanced-bg)))
-    `(mmm-declaration-submode-face ((,class :background ,cyan-nuanced-bg)))
-    `(mmm-default-submode-face ((,class :background ,bg-dim)))
-    `(mmm-init-submode-face ((,class :background ,magenta-nuanced-bg)))
-    `(mmm-output-submode-face ((,class :background ,red-nuanced-bg)))
-    `(mmm-special-submode-face ((,class :background ,green-nuanced-bg)))
+    `(minimap-active-region-background ((,c :background ,bg-active)))
+    `(minimap-current-line-face ((,c :background ,bg-cyan-intense :foreground 
,fg-main)))
 ;;;;; mode-line
-    `(mode-line ((,class :inherit modus-themes-ui-variable-pitch
-                         ,@(modus-themes--mode-line-attrs
-                            fg-active bg-active
-                            fg-dim bg-active
-                            fg-main bg-active-accent
-                            fg-alt bg-active
-                            'alt-style bg-main))))
-    `(mode-line-active ((,class :inherit mode-line)))
-    `(mode-line-buffer-id ((,class :inherit bold)))
-    `(mode-line-emphasis ((,class :inherit bold :foreground ,magenta-active)))
-    `(mode-line-highlight ((,class ,@(if modus-themes-intense-mouseovers
-                                         (list :inherit 
'modus-themes-active-blue)
-                                       (list :inherit 'highlight)))))
-    `(mode-line-inactive ((,class :inherit modus-themes-ui-variable-pitch
-                                  ,@(modus-themes--mode-line-attrs
-                                     fg-inactive bg-inactive
-                                     fg-alt bg-dim
-                                     fg-inactive bg-inactive
-                                     bg-region bg-active))))
+    `(mode-line ((,c :inherit modus-themes-ui-variable-pitch
+                     :box ,border-mode-line-active
+                     :background ,bg-mode-line-active
+                     :foreground ,fg-mode-line-active)))
+    `(mode-line-active ((,c :inherit mode-line)))
+    `(mode-line-buffer-id ((,c :inherit bold)))
+    `(mode-line-emphasis ((,c :inherit bold :foreground ,modeline-info)))
+    `(mode-line-highlight ((,c :background ,bg-hover :foreground ,fg-main :box 
,fg-main)))
+    `(mode-line-inactive ((,c :inherit modus-themes-ui-variable-pitch
+                              :box ,border-mode-line-inactive
+                              :background ,bg-mode-line-inactive
+                              :foreground ,fg-mode-line-inactive)))
 ;;;;; mood-line
-    `(mood-line-modified ((,class :foreground ,magenta-active)))
-    `(mood-line-status-error ((,class :inherit bold :foreground ,red-active)))
-    `(mood-line-status-info ((,class :foreground ,cyan-active)))
-    `(mood-line-status-neutral ((,class :foreground ,blue-active)))
-    `(mood-line-status-success ((,class :inherit modus-themes-grue-active)))
-    `(mood-line-status-warning ((,class :inherit bold :foreground 
,yellow-active)))
-    `(mood-line-unimportant ((,class :foreground ,fg-inactive)))
+    `(mood-line-modified ((,c :inherit italic)))
+    `(mood-line-status-error ((,c :inherit error)))
+    `(mood-line-status-info ((,c :foreground ,info)))
+    `(mood-line-status-neutral (( )))
+    `(mood-line-status-success ((,c :inherit success)))
+    `(mood-line-status-warning ((,c :inherit warning)))
+    `(mood-line-unimportant ((,c :inherit shadow)))
 ;;;;; mpdel
-    `(mpdel-browser-directory-face ((,class :foreground ,blue)))
-    `(mpdel-playlist-current-song-face ((,class :inherit bold :foreground 
,blue-alt-other)))
+    `(mpdel-browser-directory-face ((,c :foreground ,accent-0)))
+    `(mpdel-playlist-current-song-face ((,c :inherit bold :foreground 
,accent-0)))
 ;;;;; mu4e
-    `(mu4e-attach-number-face ((,class :inherit bold :foreground ,fg-dim)))
-    `(mu4e-cited-1-face ((,class :inherit message-cited-text-1)))
-    `(mu4e-cited-2-face ((,class :inherit message-cited-text-2)))
-    `(mu4e-cited-3-face ((,class :inherit message-cited-text-3)))
-    `(mu4e-cited-4-face ((,class :inherit message-cited-text-4)))
-    `(mu4e-cited-5-face ((,class :inherit message-cited-text-1)))
-    `(mu4e-cited-6-face ((,class :inherit message-cited-text-2)))
-    `(mu4e-cited-7-face ((,class :inherit message-cited-text-3)))
-    `(mu4e-compose-header-face ((,class :inherit mu4e-compose-separator-face)))
-    `(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-other)))
-    `(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-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 modus-themes-key-binding)))
-    `(mu4e-link-face ((,class :inherit button)))
-    `(mu4e-modeline-face ((,class :foreground ,magenta-active)))
-    `(mu4e-moved-face ((,class :inherit modus-themes-slant :foreground 
,yellow)))
-    `(mu4e-ok-face ((,class :inherit bold :foreground ,green)))
-    `(mu4e-region-code ((,class :inherit modus-themes-special-calm)))
-    `(mu4e-related-face ((,class :inherit (italic shadow))))
-    `(mu4e-replied-face ((,class :foreground ,blue)))
-    `(mu4e-special-header-value-face ((,class :inherit 
message-header-subject)))
-    `(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)))
-    `(mu4e-url-number-face ((,class :inherit shadow)))
-    `(mu4e-view-body-face ((,class :foreground ,fg-main)))
-    `(mu4e-warning-face ((,class :inherit warning)))
+    `(mu4e-attach-number-face ((,c :inherit bold :foreground ,fg-dim)))
+    `(mu4e-cited-1-face ((,c :inherit message-cited-text-1)))
+    `(mu4e-cited-2-face ((,c :inherit message-cited-text-2)))
+    `(mu4e-cited-3-face ((,c :inherit message-cited-text-3)))
+    `(mu4e-cited-4-face ((,c :inherit message-cited-text-4)))
+    `(mu4e-cited-5-face ((,c :inherit message-cited-text-1)))
+    `(mu4e-cited-6-face ((,c :inherit message-cited-text-2)))
+    `(mu4e-cited-7-face ((,c :inherit message-cited-text-3)))
+    `(mu4e-compose-header-face ((,c :inherit mu4e-compose-separator-face)))
+    `(mu4e-compose-separator-face ((,c :inherit message-separator)))
+    `(mu4e-contact-face ((,c :inherit message-header-to)))
+    `(mu4e-context-face ((,c :inherit bold)))
+    `(mu4e-draft-face ((,c :foreground ,warning)))
+    `(mu4e-flagged-face ((,c :foreground ,err)))
+    `(mu4e-footer-face ((,c :inherit italic :foreground ,fg-alt)))
+    `(mu4e-forwarded-face ((,c :inherit italic :foreground ,info)))
+    `(mu4e-header-face ((,c :inherit shadow)))
+    `(mu4e-header-highlight-face ((,c :inherit highlight)))
+    `(mu4e-header-key-face ((,c :inherit message-header-name)))
+    `(mu4e-header-marks-face ((,c :inherit mu4e-special-header-value-face)))
+    `(mu4e-header-title-face ((,c :foreground ,fg-alt)))
+    `(mu4e-header-value-face ((,c :inherit message-header-other)))
+    `(mu4e-highlight-face ((,c :inherit modus-themes-key-binding)))
+    `(mu4e-link-face ((,c :inherit link)))
+    `(mu4e-modeline-face (( )))
+    `(mu4e-moved-face ((,c :inherit italic :foreground ,warning)))
+    `(mu4e-ok-face ((,c :inherit success)))
+    `(mu4e-region-code ((,c :foreground ,builtin)))
+    `(mu4e-related-face ((,c :inherit (italic shadow))))
+    `(mu4e-replied-face ((,c :foreground ,info)))
+    `(mu4e-special-header-value-face ((,c :inherit message-header-subject)))
+    `(mu4e-system-face ((,c :inherit italic)))
+    `(mu4e-title-face (( )))
+    `(mu4e-trashed-face ((,c :foreground ,err)))
+    `(mu4e-unread-face ((,c :inherit bold)))
+    `(mu4e-url-number-face ((,c :inherit shadow)))
+    `(mu4e-view-body-face (( )))
+    `(mu4e-warning-face ((,c :inherit warning)))
 ;;;;; multiple-cursors
-    `(mc/cursor-bar-face ((,class :height 1 :background ,fg-main)))
-    `(mc/cursor-face ((,class :inverse-video t)))
-    `(mc/region-face ((,class :inherit region)))
-;;;;; nano-modeline
-    `(nano-modeline-active-primary ((,class :inherit mode-line :foreground 
,fg-special-mild)))
-    `(nano-modeline-active-secondary ((,class :inherit mode-line :foreground 
,fg-special-cold)))
-    `(nano-modeline-active-status-** ((,class :inherit mode-line :background 
,yellow-subtle-bg)))
-    `(nano-modeline-active-status-RO ((,class :inherit mode-line :background 
,red-subtle-bg)))
-    `(nano-modeline-active-status-RW ((,class :inherit mode-line :background 
,cyan-subtle-bg)))
-    `(nano-modeline-inactive-primary ((,class :inherit mode-line-inactive 
:foreground ,fg-inactive)))
-    `(nano-modeline-inactive-secondary ((,class :inherit mode-line-inactive 
:foreground ,fg-inactive)))
-    `(nano-modeline-inactive-status-** ((,class :inherit mode-line-inactive 
:foreground ,yellow-active)))
-    `(nano-modeline-inactive-status-RO ((,class :inherit mode-line-inactive 
:foreground ,red-active)))
-    `(nano-modeline-inactive-status-RW ((,class :inherit mode-line-inactive 
:foreground ,cyan-active)))
+    `(mc/cursor-bar-face ((,c :height 1 :foreground ,fg-main :background 
,bg-main)))
+    `(mc/cursor-face ((,c :inverse-video t)))
+    `(mc/region-face ((,c :inherit region)))
 ;;;;; neotree
-    `(neo-banner-face ((,class :foreground ,magenta)))
-    `(neo-button-face ((,class :inherit button)))
-    `(neo-dir-link-face ((,class :inherit bold :foreground ,blue)))
-    `(neo-expand-btn-face ((,class :foreground ,cyan)))
-    `(neo-file-link-face ((,class :foreground ,fg-main)))
-    `(neo-header-face ((,class :inherit bold :foreground ,fg-main)))
-    `(neo-root-dir-face ((,class :inherit bold :foreground ,cyan-alt)))
-    `(neo-vc-added-face ((,class :inherit modus-themes-grue)))
-    `(neo-vc-conflict-face ((,class :inherit error)))
-    `(neo-vc-default-face ((,class :foreground ,fg-main)))
-    `(neo-vc-edited-face ((,class :foreground ,yellow)))
-    `(neo-vc-ignored-face ((,class :foreground ,fg-inactive)))
-    `(neo-vc-missing-face ((,class :foreground ,red-alt)))
-    `(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-themes-refine-blue)))
-    `(neo-vc-up-to-date-face ((,class :inherit shadow)))
-    `(neo-vc-user-face ((,class :foreground ,magenta)))
+    `(neo-banner-face ((,c :foreground ,accent-0)))
+    `(neo-button-face ((,c :inherit button)))
+    `(neo-dir-link-face (( )))
+    `(neo-expand-btn-face (( )))
+    `(neo-file-link-face (( )))
+    `(neo-header-face ((,c :inherit bold)))
+    `(neo-root-dir-face ((,c :inherit bold :foreground ,accent-0)))
+    `(neo-vc-added-face ((,c :inherit success)))
+    `(neo-vc-conflict-face ((,c :inherit error)))
+    `(neo-vc-default-face (( )))
+    `(neo-vc-edited-face ((,c :inherit italic)))
+    `(neo-vc-ignored-face ((,c :inherit shadow)))
+    `(neo-vc-missing-face ((,c :inherit error)))
+    `(neo-vc-needs-merge-face ((,c :inherit italic)))
+    `(neo-vc-needs-update-face ((,c :underline t)))
+    `(neo-vc-removed-face ((,c :strike-through t)))
+    `(neo-vc-unlocked-changes-face ((,c :inherit success)))
+    `(neo-vc-up-to-date-face (( )))
+    `(neo-vc-user-face ((,c :inherit warning)))
 ;;;;; notmuch
-    `(notmuch-crypto-decryption ((,class :inherit (shadow bold))))
-    `(notmuch-crypto-part-header ((,class :foreground ,magenta-alt-other)))
-    `(notmuch-crypto-signature-bad ((,class :inherit error)))
-    `(notmuch-crypto-signature-good ((,class :inherit success)))
-    `(notmuch-crypto-signature-good-key ((,class :inherit bold :foreground 
,cyan)))
-    `(notmuch-crypto-signature-unknown ((,class :inherit warning)))
-    `(notmuch-hello-logo-background ((,class :background "gray50")))
-    `(notmuch-jump-key ((,class :inherit modus-themes-key-binding)))
-    `(notmuch-message-summary-face ((,class :inherit (bold 
modus-themes-nuanced-cyan))))
-    `(notmuch-search-count ((,class :inherit shadow)))
-    `(notmuch-search-date ((,class :foreground ,cyan)))
-    `(notmuch-search-flagged-face ((,class :foreground ,red-alt-other)))
-    `(notmuch-search-matching-authors ((,class :foreground ,fg-special-cold)))
-    `(notmuch-search-non-matching-authors ((,class :inherit shadow)))
-    `(notmuch-search-subject ((,class :foreground ,fg-main)))
-    `(notmuch-search-unread-face ((,class :inherit bold)))
-    `(notmuch-tag-added ((,class :underline ,blue)))
-    `(notmuch-tag-deleted ((,class :strike-through ,red)))
-    `(notmuch-tag-face ((,class :foreground ,blue)))
-    `(notmuch-tag-flagged ((,class :foreground ,red-alt)))
-    `(notmuch-tag-unread ((,class :foreground ,magenta-alt)))
-    `(notmuch-tree-match-author-face ((,class :inherit 
notmuch-search-matching-authors)))
-    `(notmuch-tree-match-date-face ((,class :inherit notmuch-search-date)))
-    `(notmuch-tree-match-face ((,class :foreground ,fg-main)))
-    `(notmuch-tree-match-tag-face ((,class :inherit notmuch-tag-face)))
-    `(notmuch-tree-no-match-face ((,class :inherit shadow)))
-    `(notmuch-tree-no-match-date-face ((,class :inherit shadow)))
-    `(notmuch-wash-cited-text ((,class :inherit message-cited-text-1)))
-    `(notmuch-wash-toggle-button ((,class :background ,bg-alt :foreground 
,fg-alt)))
+    `(notmuch-crypto-decryption ((,c :inherit bold)))
+    `(notmuch-crypto-part-header ((,c :foreground ,mail-part))) ; like 
`message-mml'
+    `(notmuch-crypto-signature-bad ((,c :inherit error)))
+    `(notmuch-crypto-signature-good ((,c :inherit success)))
+    `(notmuch-crypto-signature-good-key ((,c :inherit success)))
+    `(notmuch-crypto-signature-unknown ((,c :inherit warning)))
+    `(notmuch-jump-key ((,c :inherit modus-themes-key-binding)))
+    `(notmuch-message-summary-face ((,c :inherit bold :background 
,bg-inactive)))
+    `(notmuch-search-count ((,c :foreground ,fg-dim)))
+    `(notmuch-search-date ((,c :foreground ,date-common)))
+    `(notmuch-search-flagged-face ((,c :foreground ,err)))
+    `(notmuch-search-matching-authors ((,c :foreground ,mail-recipient)))
+    `(notmuch-search-non-matching-authors ((,c :inherit shadow)))
+    `(notmuch-search-subject ((,c :foreground ,fg-main)))
+    `(notmuch-search-unread-face ((,c :inherit bold)))
+    `(notmuch-tag-added ((,c :underline ,info)))
+    `(notmuch-tag-deleted ((,c :strike-through ,err)))
+    `(notmuch-tag-face ((,c :foreground ,accent-0)))
+    `(notmuch-tag-flagged ((,c :foreground ,err)))
+    `(notmuch-tag-unread ((,c :foreground ,accent-1)))
+    `(notmuch-tree-match-author-face ((,c :inherit 
notmuch-search-matching-authors)))
+    `(notmuch-tree-match-date-face ((,c :inherit notmuch-search-date)))
+    `(notmuch-tree-match-face ((,c :foreground ,fg-main)))
+    `(notmuch-tree-match-tag-face ((,c :inherit notmuch-tag-face)))
+    `(notmuch-tree-no-match-face ((,c :inherit shadow)))
+    `(notmuch-tree-no-match-date-face ((,c :inherit shadow)))
+    `(notmuch-wash-cited-text ((,c :inherit message-cited-text-1)))
+    `(notmuch-wash-toggle-button ((,c :background ,bg-dim)))
 ;;;;; num3-mode
-    `(num3-face-even ((,class :inherit bold :background ,bg-alt)))
+    `(num3-face-even ((,c :inherit bold :background ,bg-inactive)))
 ;;;;; nxml-mode
-    `(nxml-attribute-colon ((,class :foreground ,fg-main)))
-    `(nxml-attribute-local-name ((,class :inherit 
font-lock-variable-name-face)))
-    `(nxml-attribute-prefix ((,class  :inherit font-lock-type-face)))
-    `(nxml-attribute-value ((,class :inherit font-lock-constant-face)))
-    `(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-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-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)))
-    `(nxml-namespace-attribute-colon ((,class :foreground ,fg-main)))
-    `(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-themes-bold :foreground 
,fg-special-mild)))
-    `(rng-error ((,class :inherit error)))
+    `(nxml-attribute-colon ((,c :foreground ,fg-main)))
+    `(nxml-attribute-local-name ((,c :inherit font-lock-variable-name-face)))
+    `(nxml-attribute-prefix ((,c :inherit font-lock-type-face)))
+    `(nxml-attribute-value ((,c :inherit font-lock-constant-face)))
+    `(nxml-cdata-section-CDATA ((,c :inherit error)))
+    `(nxml-cdata-section-delimiter ((,c :inherit error)))
+    `(nxml-char-ref-delimiter ((,c :inherit shadow)))
+    `(nxml-char-ref-number ((,c :inherit (shadow modus-themes-bold))))
+    `(nxml-delimited-data ((,c :inherit (shadow modus-themes-slant))))
+    `(nxml-delimiter ((,c :foreground ,fg-dim)))
+    `(nxml-element-colon ((,c :foreground ,fg-main)))
+    `(nxml-element-local-name ((,c :inherit font-lock-function-name-face)))
+    `(nxml-element-prefix ((,c :inherit font-lock-builtin-face)))
+    `(nxml-entity-ref-delimiter ((,c :inherit shadow)))
+    `(nxml-entity-ref-name ((,c :inherit (shadow modus-themes-bold))))
+    `(nxml-glyph ((,c :background ,bg-active :foreground ,fg-main)))
+    `(nxml-hash ((,c :inherit (bold font-lock-string-face))))
+    `(nxml-heading ((,c :inherit bold)))
+    `(nxml-name ((,c :inherit font-lock-builtin-face)))
+    `(nxml-namespace-attribute-colon ((,c :foreground ,fg-main)))
+    `(nxml-namespace-attribute-prefix ((,c :inherit 
font-lock-variable-name-face)))
+    `(nxml-processing-instruction-target ((,c :inherit 
font-lock-keyword-face)))
+    `(nxml-prolog-keyword ((,c :inherit font-lock-keyword-face)))
+    `(nxml-ref ((,c :inherit (shadow modus-themes-bold))))
+    `(rng-error ((,c :inherit error)))
 ;;;;; olivetti
-    `(olivetti-fringe ((,class :background ,bg-main)))
+    `(olivetti-fringe ((,c :background ,bg-main)))
 ;;;;; orderless
-    `(orderless-match-face-0 ((,class :inherit 
modus-themes-completion-match-0)))
-    `(orderless-match-face-1 ((,class :inherit 
modus-themes-completion-match-1)))
-    `(orderless-match-face-2 ((,class :inherit 
modus-themes-completion-match-2)))
-    `(orderless-match-face-3 ((,class :inherit 
modus-themes-completion-match-3)))
+    `(orderless-match-face-0 ((,c :inherit modus-themes-completion-match-0)))
+    `(orderless-match-face-1 ((,c :inherit modus-themes-completion-match-1)))
+    `(orderless-match-face-2 ((,c :inherit modus-themes-completion-match-2)))
+    `(orderless-match-face-3 ((,c :inherit modus-themes-completion-match-3)))
 ;;;;; org
-    `(org-agenda-calendar-event ((,class ,@(modus-themes--agenda-event 
blue-alt))))
-    `(org-agenda-calendar-sexp ((,class ,@(modus-themes--agenda-event blue-alt 
t))))
-    `(org-agenda-clocking ((,class :background ,yellow-nuanced-bg :foreground 
,red-alt)))
-    `(org-agenda-column-dateline ((,class :background ,bg-alt)))
-    `(org-agenda-current-time ((,class :foreground ,blue-alt-other-faint)))
-    `(org-agenda-date ((,class ,@(modus-themes--agenda-date cyan fg-main))))
-    `(org-agenda-date-today
-      ((,class ,@(modus-themes--agenda-date cyan fg-main nil nil 
bg-special-cold t t))))
-    `(org-agenda-date-weekend
-      ((,class ,@(modus-themes--agenda-date cyan-alt-other-faint fg-alt cyan 
fg-main))))
-    `(org-agenda-date-weekend-today
-      ((,class ,@(modus-themes--agenda-date cyan-alt-other-faint fg-alt cyan 
fg-main bg-special-cold t t))))
-    `(org-agenda-diary ((,class :inherit org-agenda-calendar-sexp)))
-    `(org-agenda-dimmed-todo-face ((,class :inherit shadow)))
-    `(org-agenda-done ((,class :inherit modus-themes-grue-nuanced)))
-    `(org-agenda-filter-category ((,class :inherit bold :foreground 
,cyan-active)))
-    `(org-agenda-filter-effort ((,class :inherit bold :foreground 
,cyan-active)))
-    `(org-agenda-filter-regexp ((,class :inherit bold :foreground 
,cyan-active)))
-    `(org-agenda-filter-tags ((,class :inherit bold :foreground ,cyan-active)))
-    `(org-agenda-restriction-lock ((,class :background ,bg-dim :foreground 
,fg-dim)))
-    `(org-agenda-structure ((,class ,@(modus-themes--agenda-structure 
blue-alt))))
-    `(org-agenda-structure-filter ((,class :inherit org-agenda-structure 
:foreground ,yellow)))
-    `(org-agenda-structure-secondary ((,class :foreground ,cyan)))
-    `(org-archived ((,class :background ,bg-alt :foreground ,fg-alt)))
-    `(org-block ((,class :inherit modus-themes-fixed-pitch
-                         ,@(modus-themes--org-block bg-dim fg-main))))
-    `(org-block-begin-line ((,class :inherit modus-themes-fixed-pitch
-                                    ,@(modus-themes--org-block-delim
-                                       bg-dim fg-special-cold
-                                       bg-alt fg-alt))))
-    `(org-block-end-line ((,class :inherit org-block-begin-line)))
-    `(org-checkbox ((,class :foreground ,yellow-alt-other)))
-    `(org-checkbox-statistics-done ((,class :inherit org-done)))
-    `(org-checkbox-statistics-todo ((,class :inherit org-todo)))
-    `(org-clock-overlay ((,class :background ,yellow-nuanced-bg :foreground 
,red-alt-faint)))
-    `(org-code ((,class :inherit modus-themes-markup-code :extend t)))
-    `(org-column ((,class :inherit (modus-themes-fixed-pitch default)
-                          :background ,bg-alt)))
-    `(org-column-title ((,class :inherit (bold modus-themes-fixed-pitch 
default)
-                                :underline t :background ,bg-alt)))
-    `(org-date ((,class :inherit (modus-themes-link-symlink 
modus-themes-fixed-pitch))))
-    `(org-date-selected ((,class :foreground ,blue-alt :inverse-video t)))
-    `(org-dispatcher-highlight ((,class :inherit (bold 
modus-themes-mark-alt))))
-    `(org-document-info ((,class :foreground ,fg-special-cold)))
-    `(org-document-info-keyword ((,class :inherit (shadow 
modus-themes-fixed-pitch))))
-    `(org-document-title ((,class :inherit modus-themes-heading-0)))
-    `(org-done ((,class :inherit modus-themes-grue)))
-    `(org-drawer ((,class :inherit (shadow modus-themes-fixed-pitch))))
-    `(org-ellipsis (())) ; inherits from the heading's color
-    `(org-footnote ((,class :inherit button
-                            ,@(modus-themes--link-color
-                               blue-alt blue-alt-faint))))
-    `(org-formula ((,class :inherit modus-themes-fixed-pitch :foreground 
,red-alt)))
-    `(org-habit-alert-face ((,class ,@(modus-themes--agenda-habit
-                                       yellow-graph-0-bg
-                                       yellow-graph-0-bg
-                                       yellow-graph-1-bg)
-                                    :foreground "black"))) ; special case
-    `(org-habit-alert-future-face ((,class ,@(modus-themes--agenda-habit
-                                              yellow-graph-1-bg
-                                              yellow-graph-0-bg
-                                              yellow-graph-1-bg))))
-    `(org-habit-clear-face ((,class ,@(modus-themes--agenda-habit
-                                       blue-graph-0-bg
-                                       green-graph-1-bg
-                                       blue-graph-1-bg
-                                       blue-graph-1-bg
-                                       blue-graph-1-bg)
-                                    :foreground "black"))) ; special case
-    `(org-habit-clear-future-face ((,class ,@(modus-themes--agenda-habit
-                                              blue-graph-1-bg
-                                              green-graph-1-bg
-                                              blue-graph-1-bg
-                                              blue-graph-1-bg
-                                              blue-graph-1-bg))))
-    `(org-habit-overdue-face ((,class ,@(modus-themes--agenda-habit
-                                         red-graph-0-bg
-                                         red-graph-0-bg
-                                         red-graph-1-bg))))
-    `(org-habit-overdue-future-face ((,class ,@(modus-themes--agenda-habit
-                                                red-graph-1-bg
-                                                red-graph-0-bg
-                                                red-graph-1-bg))))
-    `(org-habit-ready-face ((,class ,@(modus-themes--agenda-habit
-                                       green-graph-0-bg
-                                       green-graph-0-bg
-                                       green-graph-1-bg
-                                       cyan-graph-0-bg
-                                       blue-graph-0-bg
-                                       cyan-graph-1-bg)
-                                    :foreground "black"))) ; special case
-    `(org-habit-ready-future-face ((,class ,@(modus-themes--agenda-habit
-                                              green-graph-1-bg
-                                              green-graph-0-bg
-                                              green-graph-1-bg
-                                              cyan-graph-1-bg
-                                              blue-graph-0-bg
-                                              cyan-graph-1-bg))))
-    `(org-headline-done ((,class :inherit (modus-themes-variable-pitch 
modus-themes-grue-nuanced))))
-    `(org-headline-todo ((,class :inherit modus-themes-variable-pitch 
:foreground ,red-nuanced-fg)))
-    `(org-hide ((,class :foreground ,bg-main)))
-    `(org-indent ((,class :inherit (fixed-pitch org-hide))))
-    `(org-imminent-deadline ((,class :foreground ,red-intense)))
-    `(org-latex-and-related ((,class :foreground ,magenta-faint)))
-    `(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 :inherit modus-themes-markup-macro)))
-    `(org-meta-line ((,class :inherit (shadow modus-themes-fixed-pitch))))
-    `(org-mode-line-clock ((,class :foreground ,fg-main)))
-    `(org-mode-line-clock-overrun ((,class :inherit bold :foreground 
,red-active)))
-    `(org-priority ((,class :foreground ,magenta)))
-    `(org-property-value ((,class :inherit modus-themes-fixed-pitch 
:foreground ,fg-special-cold)))
-    `(org-quote ((,class ,@(modus-themes--org-block bg-dim fg-special-cold 
fg-main))))
-    `(org-scheduled ((,class ,@(modus-themes--agenda-scheduled yellow-faint 
fg-special-warm magenta-alt))))
-    `(org-scheduled-previously ((,class ,@(modus-themes--agenda-scheduled 
yellow fg-special-warm yellow-alt-other))))
-    `(org-scheduled-today ((,class ,@(modus-themes--agenda-scheduled yellow 
fg-special-warm magenta-alt-other))))
-    `(org-sexp-date ((,class :foreground ,cyan-alt-other)))
-    `(org-special-keyword ((,class :inherit (shadow 
modus-themes-fixed-pitch))))
-    `(org-table ((,class :inherit modus-themes-fixed-pitch :foreground 
,fg-special-cold)))
-    `(org-table-header ((,class :inherit (fixed-pitch 
modus-themes-special-cold))))
-    `(org-tag ((,class :foreground ,magenta-nuanced-fg)))
-    `(org-tag-group ((,class :inherit bold :foreground ,cyan-nuanced-fg)))
-    `(org-target ((,class :underline t)))
-    `(org-time-grid ((,class :inherit shadow)))
-    `(org-todo ((,class :foreground ,red)))
-    `(org-upcoming-deadline ((,class :foreground ,red-alt-other)))
-    `(org-upcoming-distant-deadline ((,class :foreground ,red-faint)))
-    `(org-verbatim ((,class :inherit modus-themes-markup-verbatim)))
-    `(org-verse ((,class :inherit org-quote)))
-    `(org-warning ((,class :inherit bold :foreground ,red-alt-other)))
+    `(org-agenda-calendar-event ((,c :foreground ,date-event)))
+    `(org-agenda-calendar-sexp ((,c :inherit (italic 
org-agenda-calendar-event))))
+    `(org-agenda-clocking ((,c :inherit modus-themes-mark-alt)))
+    `(org-agenda-column-dateline ((,c :background ,bg-inactive)))
+    `(org-agenda-current-time ((,c :foreground ,date-now)))
+    `(org-agenda-date ((,c ,@(modus-themes--heading 'agenda-date 
date-weekday))))
+    `(org-agenda-date-today ((,c :inherit org-agenda-date :underline t)))
+    `(org-agenda-date-weekend ((,c :inherit org-agenda-date :foreground 
,date-weekend)))
+    `(org-agenda-date-weekend-today ((,c :inherit org-agenda-date-today 
:foreground ,date-weekend)))
+    `(org-agenda-diary ((,c :inherit org-agenda-calendar-sexp)))
+    `(org-agenda-dimmed-todo-face ((,c :inherit shadow)))
+    `(org-agenda-done ((,c :inherit org-done)))
+    `(org-agenda-filter-category ((,c :inherit bold :foreground 
,modeline-err)))
+    `(org-agenda-filter-effort ((,c :inherit bold :foreground ,modeline-err)))
+    `(org-agenda-filter-regexp ((,c :inherit bold :foreground ,modeline-err)))
+    `(org-agenda-filter-tags ((,c :inherit bold :foreground ,modeline-err)))
+    `(org-agenda-restriction-lock ((,c :background ,bg-dim :foreground 
,fg-dim)))
+    `(org-agenda-structure ((,c ,@(modus-themes--heading 'agenda-structure 
fg-alt))))
+    `(org-agenda-structure-filter ((,c :inherit org-agenda-structure 
:foreground ,warning)))
+    `(org-agenda-structure-secondary ((,c :inherit font-lock-doc-face)))
+    `(org-archived ((,c :background ,bg-inactive :foreground ,fg-main)))
+    `(org-block ((,c ,@(modus-themes--org-block fg-main bg-dim))))
+    `(org-block-begin-line ((,c ,@(modus-themes--org-block prose-block 
bg-inactive))))
+    `(org-block-end-line ((,c :inherit org-block-begin-line)))
+    `(org-checkbox ((,c :foreground ,warning)))
+    `(org-checkbox-statistics-done ((,c :inherit org-done)))
+    `(org-checkbox-statistics-todo ((,c :inherit org-todo)))
+    `(org-clock-overlay ((,c :inherit secondary-selection)))
+    `(org-code ((,c :inherit modus-themes-prose-code)))
+    `(org-column ((,c :inherit default :background ,bg-dim)))
+    `(org-column-title ((,c :inherit (bold default) :underline t :background 
,bg-dim)))
+    `(org-date ((,c :inherit modus-themes-fixed-pitch :foreground 
,date-common)))
+    `(org-date-selected ((,c :foreground ,date-common :inverse-video t)))
+    `(org-document-info ((,c :foreground ,prose-metadata-value)))
+    `(org-document-info-keyword ((,c :foreground ,prose-metadata)))
+    `(org-document-title ((,c :inherit modus-themes-heading-0)))
+    `(org-done ((,c :foreground ,prose-done)))
+    `(org-drawer ((,c :inherit modus-themes-fixed-pitch :foreground 
,prose-metadata)))
+    `(org-ellipsis (( ))) ; inherits from the heading's color
+    `(org-footnote ((,c :inherit link)))
+    `(org-formula ((,c :inherit modus-themes-fixed-pitch :foreground ,fnname)))
+    `(org-headline-done ((,c :inherit org-done)))
+    `(org-headline-todo ((,c :inherit org-todo)))
+    `(org-hide ((,c :foreground ,bg-main)))
+    `(org-indent ((,c :inherit (fixed-pitch org-hide))))
+    `(org-imminent-deadline ((,c :inherit bold :foreground ,date-deadline)))
+    `(org-latex-and-related ((,c :foreground ,type)))
+    `(org-level-1 ((,c :inherit modus-themes-heading-1)))
+    `(org-level-2 ((,c :inherit modus-themes-heading-2)))
+    `(org-level-3 ((,c :inherit modus-themes-heading-3)))
+    `(org-level-4 ((,c :inherit modus-themes-heading-4)))
+    `(org-level-5 ((,c :inherit modus-themes-heading-5)))
+    `(org-level-6 ((,c :inherit modus-themes-heading-6)))
+    `(org-level-7 ((,c :inherit modus-themes-heading-7)))
+    `(org-level-8 ((,c :inherit modus-themes-heading-8)))
+    `(org-link ((,c :inherit link)))
+    `(org-list-dt ((,c :inherit bold)))
+    `(org-macro ((,c :inherit modus-themes-prose-macro)))
+    `(org-meta-line ((,c :inherit modus-themes-fixed-pitch :foreground 
,prose-metadata)))
+    `(org-mode-line-clock (( )))
+    `(org-mode-line-clock-overrun ((,c :inherit bold :foreground 
,modeline-err)))
+    `(org-priority ((,c :foreground ,prose-tag)))
+    `(org-property-value ((,c :inherit modus-themes-fixed-pitch :foreground 
,prose-metadata-value)))
+    `(org-quote ((,c :inherit org-block)))
+    `(org-scheduled ((,c :foreground ,date-scheduled)))
+    `(org-scheduled-previously ((,c :inherit org-scheduled)))
+    `(org-scheduled-today ((,c :inherit (bold org-scheduled))))
+    `(org-sexp-date ((,c :foreground ,date-common)))
+    `(org-special-keyword ((,c :inherit org-drawer)))
+    `(org-table ((,c :inherit modus-themes-fixed-pitch :foreground 
,prose-table)))
+    `(org-table-header ((,c :inherit (bold org-table))))
+    `(org-tag ((,c :foreground ,prose-tag)))
+    `(org-tag-group ((,c :inherit (bold org-tag))))
+    `(org-target ((,c :underline t)))
+    `(org-time-grid ((,c :foreground ,fg-dim)))
+    `(org-todo ((,c :foreground ,prose-todo)))
+    `(org-upcoming-deadline ((,c :foreground ,date-deadline)))
+    `(org-upcoming-distant-deadline ((,c :inherit org-upcoming-deadline)))
+    `(org-verbatim ((,c :inherit modus-themes-prose-verbatim)))
+    `(org-verse ((,c :inherit org-block)))
+    `(org-warning ((,c :inherit warning)))
+;;;;; org-habit
+    `(org-habit-alert-face ((,c :background ,bg-graph-yellow-0 :foreground 
"black"))) ; fg is special case
+    `(org-habit-alert-future-face ((,c :background ,bg-graph-yellow-1)))
+    `(org-habit-clear-face ((,c :background ,bg-graph-blue-0 :foreground 
"black"))) ; fg is special case
+    `(org-habit-clear-future-face ((,c :background ,bg-graph-blue-1)))
+    `(org-habit-overdue-face ((,c :background ,bg-graph-red-0)))
+    `(org-habit-overdue-future-face ((,c :background ,bg-graph-red-1)))
+    `(org-habit-ready-face ((,c :background ,bg-graph-blue-0 :foreground 
"black"))) ; fg is special case
+    `(org-habit-ready-future-face ((,c :background ,bg-graph-blue-1)))
 ;;;;; org-journal
-    `(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-journal-calendar-entry-face ((,c :inherit modus-themes-slant 
:foreground ,date-common)))
+    `(org-journal-calendar-scheduled-face ((,c :inherit (modus-themes-slant 
org-scheduled))))
+    `(org-journal-highlight ((,c :foreground ,err)))
 ;;;;; org-noter
-    `(org-noter-no-notes-exist-face ((,class :inherit error)))
-    `(org-noter-notes-exist-face ((,class :inherit success)))
+    `(org-noter-no-notes-exist-face ((,c :inherit error)))
+    `(org-noter-notes-exist-face ((,c :inherit success)))
 ;;;;; org-pomodoro
-    `(org-pomodoro-mode-line ((,class :foreground ,red-active)))
-    `(org-pomodoro-mode-line-break ((,class :foreground ,cyan-active)))
-    `(org-pomodoro-mode-line-overtime ((,class :inherit bold :foreground 
,red-active)))
+    `(org-pomodoro-mode-line ((,c :foreground ,err)))
+    `(org-pomodoro-mode-line-break ((,c :foreground ,info)))
+    `(org-pomodoro-mode-line-overtime ((,c :inherit error)))
 ;;;;; org-recur
-    `(org-recur ((,class :foreground ,magenta-active)))
+    `(org-recur ((,c :foreground ,fg-alt)))
 ;;;;; org-roam
-    `(org-roam-dim ((,class :foreground "gray50")))
-    `(org-roam-header-line ((,class :inherit bold :foreground 
,magenta-active)))
-    `(org-roam-olp ((,class :inherit shadow)))
-    `(org-roam-preview-heading ((,class :inherit modus-themes-subtle-neutral)))
-    `(org-roam-preview-heading-highlight ((,class :inherit 
modus-themes-intense-neutral)))
-    `(org-roam-preview-heading-selection ((,class :inherit 
modus-themes-special-cold)))
-    `(org-roam-preview-region ((,class :inherit bold)))
-    `(org-roam-title ((,class :inherit modus-themes-pseudo-header)))
+    `(org-roam-dim ((,c :foreground "gray50")))
+    `(org-roam-olp ((,c :inherit shadow)))
+    `(org-roam-preview-heading ((,c :background ,bg-inactive)))
+    `(org-roam-preview-heading-highlight ((,c :background ,bg-active 
:foreground ,fg-main)))
+    `(org-roam-preview-region ((,c :inherit bold)))
+    `(org-roam-title ((,c :inherit bold)))
 ;;;;; org-superstar
-    `(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-themes-special-cold)))
+    `(org-superstar-item ((,c :foreground ,fg-main)))
 ;;;;; org-tree-slide
-    `(org-tree-slide-header-overlay-face ((,class :inherit 
org-document-title)))
+    `(org-tree-slide-header-overlay-face ((,c :inherit org-document-title)))
 ;;;;; 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)))
+    `(origami-fold-header-face ((,c :background ,bg-dim :foreground ,fg-dim 
:box t)))
+    `(origami-fold-replacement-face ((,c :background ,bg-inactive :foreground 
,fg-dim)))
 ;;;;; outline-mode
-    `(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-1 ((,c :inherit modus-themes-heading-1)))
+    `(outline-2 ((,c :inherit modus-themes-heading-2)))
+    `(outline-3 ((,c :inherit modus-themes-heading-3)))
+    `(outline-4 ((,c :inherit modus-themes-heading-4)))
+    `(outline-5 ((,c :inherit modus-themes-heading-5)))
+    `(outline-6 ((,c :inherit modus-themes-heading-6)))
+    `(outline-7 ((,c :inherit modus-themes-heading-7)))
+    `(outline-8 ((,c :inherit modus-themes-heading-8)))
 ;;;;; outline-minor-faces
     `(outline-minor-0 (()))
 ;;;;; package (M-x list-packages)
-    `(package-description ((,class :foreground ,fg-special-cold)))
-    `(package-help-section-name ((,class :inherit bold :foreground ,cyan)))
-    `(package-name ((,class :inherit button)))
-    `(package-status-available ((,class :foreground ,cyan-alt-other)))
-    `(package-status-avail-obso ((,class :inherit error)))
-    `(package-status-built-in ((,class :foreground ,magenta)))
-    `(package-status-dependency ((,class :foreground ,magenta-alt-other)))
-    `(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 warning)))
-    `(package-status-installed ((,class :foreground ,fg-special-warm)))
-    `(package-status-new ((,class :inherit success)))
-    `(package-status-unsigned ((,class :inherit error)))
+    `(package-description ((,c :foreground ,docstring)))
+    `(package-help-section-name ((,c :inherit bold)))
+    `(package-name ((,c :inherit link)))
+    `(package-status-available ((,c :foreground ,date-common)))
+    `(package-status-avail-obso ((,c :inherit error)))
+    `(package-status-built-in ((,c :foreground ,builtin)))
+    `(package-status-dependency ((,c :foreground ,warning)))
+    `(package-status-disabled ((,c :inherit error :strike-through t)))
+    `(package-status-from-source ((,c :foreground ,type)))
+    `(package-status-held ((,c :foreground ,warning)))
+    `(package-status-incompat ((,c :inherit warning)))
+    `(package-status-installed ((,c :foreground ,fg-alt)))
+    `(package-status-new ((,c :inherit success)))
+    `(package-status-unsigned ((,c :inherit error)))
 ;;;;; page-break-lines
-    `(page-break-lines ((,class :inherit default :foreground 
,fg-window-divider-outer)))
+    `(page-break-lines ((,c :inherit default :foreground "gray50")))
 ;;;;; 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)))
+    `(pandoc-citation-key-face ((,c :inherit font-lock-builtin-face)))
+    `(pandoc-directive-@@-face ((,c :inherit font-lock-keyword-face)))
+    `(pandoc-directive-braces-face ((,c :inherit font-lock-constant-face)))
+    `(pandoc-directive-contents-face ((,c :inherit font-lock-string-face)))
+    `(pandoc-directive-type-face ((,c :inherit font-lock-type-face)))
 ;;;;; paren-face
-    `(parenthesis ((,class :foreground ,fg-unfocused)))
+    `(parenthesis ((,c :inherit shadow)))
 ;;;;; pass
-    `(pass-mode-directory-face ((,class :inherit bold :foreground 
,fg-special-cold)))
-    `(pass-mode-entry-face ((,class :background ,bg-main :foreground 
,fg-main)))
-    `(pass-mode-header-face ((,class :foreground ,fg-special-warm)))
+    `(pass-mode-directory-face ((,c :inherit bold :foreground ,accent-0)))
+    `(pass-mode-entry-face ((,c :background ,bg-main :foreground ,fg-main)))
+    `(pass-mode-header-face ((,c :inherit shadow)))
 ;;;;; pdf-tools
-    `(pdf-links-read-link ((,class :background ,fg-main :foreground 
,magenta-intense-bg :inherit bold))) ; Foreground is background and vice versa
-    `(pdf-occur-document-face ((,class :inherit shadow)))
-    `(pdf-occur-page-face ((,class :inherit shadow)))
+    `(pdf-links-read-link ((,c :background ,fg-main :foreground 
,bg-magenta-intense :inherit bold))) ; Foreground is background and vice versa
+    `(pdf-occur-document-face ((,c :inherit shadow)))
+    `(pdf-occur-page-face ((,c :inherit shadow)))
 ;;;;; persp-mode
-    `(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)))
+    `(persp-face-lighter-buffer-not-in-persp ((,c :inherit error)))
+    `(persp-face-lighter-default ((,c :inherit bold :foreground ,name)))
+    `(persp-face-lighter-nil-persp ((,c :inherit bold)))
 ;;;;; perspective
-    `(persp-selected-face ((,class :inherit bold :foreground ,blue-active)))
-;;;;; phi-grep
-    `(phi-grep-heading-face ((,class :inherit modus-themes-pseudo-header 
:foreground ,fg-special-cold)))
-    `(phi-grep-line-number-face ((,class :foreground ,fg-special-warm)))
-    `(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)))
-;;;;; pomidor
-    `(pomidor-break-face ((,class :foreground ,blue-alt-other)))
-    `(pomidor-overwork-face ((,class :foreground ,red-alt-other)))
-    `(pomidor-skip-face ((,class :inherit (shadow modus-themes-slant))))
-    `(pomidor-work-face ((,class :inherit modus-themes-grue)))
+    `(persp-selected-face ((,c :inherit bold :foreground ,name)))
 ;;;;; popup
-    `(popup-face ((,class :background ,bg-alt :foreground ,fg-main)))
-    `(popup-isearch-match ((,class :inherit modus-themes-search-success)))
-    `(popup-menu-mouse-face ((,class :inherit highlight)))
-    `(popup-menu-selection-face ((,class :inherit 
modus-themes-completion-selected-popup)))
-    `(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-themes-refine-yellow)))
+    `(popup-face ((,c :background ,bg-inactive :foreground ,fg-main)))
+    `(popup-isearch-match ((,c :inherit modus-themes-search-current)))
+    `(popup-menu-mouse-face ((,c :inherit highlight)))
+    `(popup-menu-selection-face ((,c :inherit 
modus-themes-completion-selected)))
+    `(popup-scroll-bar-background-face ((,c :background ,bg-active)))
+    `(popup-scroll-bar-foreground-face (( )))
+    `(popup-summary-face ((,c :background ,bg-active :foreground ,fg-dim)))
+    `(popup-tip-face ((,c :inherit modus-themes-intense-yellow)))
 ;;;;; powerline
-    `(powerline-active0 ((,class :background ,fg-unfocused :foreground 
,bg-main)))
-    `(powerline-active1 ((,class :inherit mode-line-active)))
-    `(powerline-active2 ((,class :inherit mode-line-inactive)))
-    `(powerline-inactive0 ((,class :background ,bg-active :foreground 
,fg-alt)))
-    `(powerline-inactive1 ((,class :background ,bg-main :foreground ,fg-alt)))
-    `(powerline-inactive2 ((,class :inherit mode-line-inactive)))
+    `(powerline-active0 ((,c :background ,fg-dim :foreground ,bg-main)))
+    `(powerline-active1 ((,c :inherit mode-line-active)))
+    `(powerline-active2 ((,c :inherit mode-line-inactive)))
+    `(powerline-inactive0 ((,c :background ,bg-active :foreground ,fg-dim)))
+    `(powerline-inactive1 ((,c :background ,bg-main :foreground ,fg-dim)))
+    `(powerline-inactive2 ((,c :inherit mode-line-inactive)))
 ;;;;; powerline-evil
-    `(powerline-evil-base-face ((,class :background ,fg-main :foreground 
,bg-main)))
-    `(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-themes-active-yellow)))
-    `(powerline-evil-replace-face ((,class :inherit modus-themes-active-red)))
-    `(powerline-evil-visual-face ((,class :inherit modus-themes-active-cyan)))
+    `(powerline-evil-base-face ((,c :background ,fg-main :foreground 
,bg-main)))
+    `(powerline-evil-emacs-face ((,c :inherit modus-themes-intense-magenta)))
+    `(powerline-evil-insert-face ((,c :inherit modus-themes-intense-green)))
+    `(powerline-evil-motion-face ((,c :inherit modus-themes-intense-blue)))
+    `(powerline-evil-normal-face ((,c :background ,fg-alt :foreground 
,bg-main)))
+    `(powerline-evil-operator-face ((,c :inherit modus-themes-intense-yellow)))
+    `(powerline-evil-replace-face ((,c :inherit modus-themes-intense-red)))
+    `(powerline-evil-visual-face ((,c :inherit modus-themes-intense-cyan)))
 ;;;;; prescient
-    `(prescient-primary-highlight ((,class :inherit 
modus-themes-completion-match-0)))
-    `(prescient-secondary-highlight ((,class :inherit 
modus-themes-completion-match-1)))
+    `(prescient-primary-highlight ((,c :inherit 
modus-themes-completion-match-0)))
+    `(prescient-secondary-highlight ((,c :inherit 
modus-themes-completion-match-1)))
 ;;;;; proced
-    `(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)))
+    `(proced-mark ((,c :inherit bold)))
+    `(proced-marked ((,c :inherit modus-themes-mark-alt)))
+    `(proced-sort-header ((,c :inherit bold :underline t)))
 ;;;;; prodigy
-    `(prodigy-green-face ((,class :inherit success)))
-    `(prodigy-red-face ((,class :inherit error)))
-    `(prodigy-yellow-face ((,class :inherit warning)))
+    `(prodigy-green-face ((,c :inherit success)))
+    `(prodigy-red-face ((,c :inherit error)))
+    `(prodigy-yellow-face ((,c :inherit warning)))
 ;;;;; pulse
-    `(pulse-highlight-start-face ((,class :background ,bg-active-accent 
:extend t)))
+    `(pulse-highlight-start-face ((,c :background ,bg-blue-intense :extend t)))
 ;;;;; pyim
-    `(pyim-page ((,class :background ,bg-active :foreground ,fg-active)))
-    `(pyim-page-selection ((,class :inherit bold :background ,bg-active 
:foreground ,blue-active)))
-    `(pyim-page-subword ((,class :background ,bg-inactive)))
+    `(pyim-page ((,c :background ,bg-active)))
+    `(pyim-page-selection ((,c :inherit bold :background ,bg-active 
:foreground ,info)))
+    `(pyim-page-subword ((,c :background ,bg-inactive)))
 ;;;;; quick-peek
-    `(quick-peek-background-face ((,class :background ,bg-alt)))
-    `(quick-peek-border-face ((,class :background ,fg-window-divider-inner 
:height 1)))
-    `(quick-peek-padding-face ((,class :background ,bg-alt :height 0.15)))
-;;;;; racket-mode
-    `(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 (shadow 
modus-themes-slant))))
-    `(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-themes-slant 
:foreground ,magenta)))
-    `(racket-selfeval-face ((,class :foreground ,green-alt)))
-    `(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)))
-    `(rainbow-blocks-depth-3-face ((,class :foreground ,magenta-alt)))
-    `(rainbow-blocks-depth-4-face ((,class :foreground ,green)))
-    `(rainbow-blocks-depth-5-face ((,class :foreground ,magenta)))
-    `(rainbow-blocks-depth-6-face ((,class :foreground ,cyan)))
-    `(rainbow-blocks-depth-7-face ((,class :foreground ,yellow)))
-    `(rainbow-blocks-depth-8-face ((,class :foreground ,cyan-alt)))
-    `(rainbow-blocks-depth-9-face ((,class :foreground ,red-alt)))
-    `(rainbow-blocks-unmatched-face ((,class :foreground ,red)))
+    `(quick-peek-background-face ((,c :background ,bg-inactive)))
+    `(quick-peek-border-face ((,c :background ,border :height 1)))
+    `(quick-peek-padding-face ((,c :background ,bg-inactive :height 0.15)))
 ;;;;; rainbow-delimiters
-    `(rainbow-delimiters-base-error-face ((,class :background ,red-subtle-bg 
:foreground ,fg-main)))
-    `(rainbow-delimiters-base-face ((,class :foreground ,fg-main)))
-    `(rainbow-delimiters-depth-1-face ((,class :foreground ,fg-main)))
-    `(rainbow-delimiters-depth-2-face ((,class :foreground ,magenta-intense)))
-    `(rainbow-delimiters-depth-3-face ((,class :foreground ,cyan-intense)))
-    `(rainbow-delimiters-depth-4-face ((,class :foreground ,orange-intense)))
-    `(rainbow-delimiters-depth-5-face ((,class :foreground ,purple-intense)))
-    `(rainbow-delimiters-depth-6-face ((,class :foreground ,green-intense)))
-    `(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-themes-refine-yellow))))
-    `(rainbow-delimiters-unmatched-face ((,class :inherit (bold 
modus-themes-refine-red))))
+    `(rainbow-delimiters-base-error-face ((,c :inherit 
modus-themes-subtle-red)))
+    `(rainbow-delimiters-base-face ((,c :foreground ,fg-main)))
+    `(rainbow-delimiters-depth-1-face ((,c :foreground ,rainbow-0)))
+    `(rainbow-delimiters-depth-2-face ((,c :foreground ,rainbow-1)))
+    `(rainbow-delimiters-depth-3-face ((,c :foreground ,rainbow-2)))
+    `(rainbow-delimiters-depth-4-face ((,c :foreground ,rainbow-3)))
+    `(rainbow-delimiters-depth-5-face ((,c :foreground ,rainbow-4)))
+    `(rainbow-delimiters-depth-6-face ((,c :foreground ,rainbow-5)))
+    `(rainbow-delimiters-depth-7-face ((,c :foreground ,rainbow-6)))
+    `(rainbow-delimiters-depth-8-face ((,c :foreground ,rainbow-7)))
+    `(rainbow-delimiters-depth-9-face ((,c :foreground ,rainbow-8)))
+    `(rainbow-delimiters-mismatched-face ((,c :inherit (bold 
modus-themes-intense-yellow))))
+    `(rainbow-delimiters-unmatched-face ((,c :inherit (bold 
modus-themes-intense-red))))
 ;;;;; rcirc
-    `(rcirc-bright-nick ((,class :inherit bold :foreground ,magenta-intense)))
-    `(rcirc-dim-nick ((,class :inherit shadow)))
-    `(rcirc-monospace-text ((,class :inherit fixed-pitch)))
-    `(rcirc-my-nick ((,class :inherit bold :foreground ,magenta)))
-    `(rcirc-nick-in-message ((,class :inherit bold :foreground ,red-alt)))
-    `(rcirc-nick-in-message-full-line ((,class :inherit bold :foreground 
,cyan-alt-other)))
-    `(rcirc-other-nick ((,class :inherit bold :foreground ,blue)))
-    `(rcirc-prompt ((,class :inherit modus-themes-prompt)))
-    `(rcirc-server ((,class :inherit shadow)))
-    `(rcirc-timestamp ((,class :foreground ,cyan)))
-    `(rcirc-track-keyword ((,class :inherit bold)))
-    `(rcirc-track-nick ((,class :inherit bold :foreground ,red-active)))
-    `(rcirc-url ((,class :inherit link)))
+    `(rcirc-bright-nick ((,c :inherit bold :foreground ,accent-2)))
+    `(rcirc-dim-nick ((,c :inherit shadow)))
+    `(rcirc-monospace-text ((,c :inherit fixed-pitch)))
+    `(rcirc-my-nick ((,c :inherit bold :foreground ,accent-1)))
+    `(rcirc-nick-in-message ((,c :inherit rcirc-my-nick)))
+    `(rcirc-nick-in-message-full-line ((,c :inherit rcirc-my-nick)))
+    `(rcirc-other-nick ((,c :inherit bold :foreground ,accent-0)))
+    `(rcirc-prompt ((,c :inherit minibuffer-prompt)))
+    `(rcirc-server ((,c :inherit font-lock-comment-face)))
+    `(rcirc-timestamp ((,c :foreground ,date-common)))
+    `(rcirc-track-keyword ((,c :inherit bold :foreground ,modeline-warning)))
+    `(rcirc-track-nick ((,c :inherit rcirc-my-nick)))
+    `(rcirc-url ((,c :inherit link)))
 ;;;;; recursion-indicator
-    `(recursion-indicator-general ((,class :foreground ,blue-active)))
-    `(recursion-indicator-minibuffer ((,class :foreground ,red-active)))
+    `(recursion-indicator-general ((,c :foreground ,modeline-err)))
+    `(recursion-indicator-minibuffer ((,c :foreground ,modeline-info)))
 ;;;;; regexp-builder (re-builder)
-    `(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)))
+    `(reb-match-0 ((,c :inherit modus-themes-intense-cyan)))
+    `(reb-match-1 ((,c :inherit modus-themes-subtle-magenta)))
+    `(reb-match-2 ((,c :inherit modus-themes-subtle-green)))
+    `(reb-match-3 ((,c :inherit modus-themes-intense-yellow)))
+    `(reb-regexp-grouping-backslash ((,c :inherit 
font-lock-regexp-grouping-backslash)))
+    `(reb-regexp-grouping-construct ((,c :inherit 
font-lock-regexp-grouping-construct)))
 ;;;;; rg (rg.el)
-    `(rg-column-number-face ((,class :foreground ,magenta-alt-other)))
-    `(rg-context-face ((,class :foreground ,fg-unfocused)))
-    `(rg-error-face ((,class :inherit bold :foreground ,red)))
-    `(rg-file-tag-face ((,class :foreground ,fg-special-cold)))
-    `(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-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)))
-    `(rg-warning-face ((,class :inherit bold :foreground ,yellow)))
+    `(rg-column-number-face ((,c :inherit shadow)))
+    `(rg-context-face ((,c :inherit shadow)))
+    `(rg-error-face ((,c :inherit error)))
+    `(rg-file-tag-face ((,c :inherit font-lock-builtin-face)))
+    `(rg-filename-face ((,c :inherit bold :foreground ,name)))
+    `(rg-line-number-face ((,c :inherit shadow)))
+    `(rg-literal-face ((,c :inherit font-lock-constant-face)))
+    `(rg-match-face ((,c :inherit match)))
+    `(rg-regexp-face ((,c :foreground ,name)))
+    `(rg-toggle-off-face ((,c :inherit (shadow bold))))
+    `(rg-toggle-on-face ((,c :inherit success)))
+    `(rg-warning-face ((,c :inherit warning)))
 ;;;;; ripgrep
-    `(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-themes-special-calm)))
+    `(ripgrep-context-face ((,c :inherit shadow)))
+    `(ripgrep-error-face ((,c :inherit error)))
+    `(ripgrep-hit-face ((,c :inherit success)))
+    `(ripgrep-match-face ((,c :inherit match)))
 ;;;;; rmail
-    `(rmail-header-name ((,class :foreground ,cyan-alt-other)))
-    `(rmail-highlight ((,class :inherit bold :foreground ,magenta-alt)))
+    `(rmail-header-name ((,c :inherit bold)))
+    `(rmail-highlight ((,c :inherit bold :foreground ,mail-other)))
 ;;;;; ruler-mode
-    `(ruler-mode-column-number ((,class :inherit ruler-mode-default 
:foreground ,fg-main)))
-    `(ruler-mode-comment-column ((,class :inherit ruler-mode-default 
:foreground ,red)))
-    `(ruler-mode-current-column ((,class :inherit ruler-mode-default 
:background ,blue-subtle-bg :foreground ,fg-main)))
-    `(ruler-mode-default ((,class :inherit default :background ,bg-alt 
:foreground ,fg-unfocused)))
-    `(ruler-mode-fill-column ((,class :inherit ruler-mode-default :foreground 
,green)))
-    `(ruler-mode-fringes ((,class :inherit ruler-mode-default :foreground 
,cyan)))
-    `(ruler-mode-goal-column ((,class :inherit ruler-mode-default :foreground 
,blue)))
-    `(ruler-mode-margins ((,class :inherit ruler-mode-default :foreground 
,bg-main)))
-    `(ruler-mode-pad ((,class :inherit ruler-mode-default :background 
,bg-active :foreground ,fg-inactive)))
-    `(ruler-mode-tab-stop ((,class :inherit ruler-mode-default :foreground 
,fg-special-warm)))
-;;;;; selectrum
-    `(selectrum-current-candidate ((,class :inherit 
modus-themes-completion-selected)))
-    `(selectrum-mouse-highlight ((,class :inherit highlight)))
-    `(selectrum-quick-keys-highlight ((,class :inherit bold :background 
,bg-char-0)))
-    `(selectrum-quick-keys-match ((,class :inherit bold :background 
,bg-char-1)))
-;;;;; semantic
-    `(semantic-complete-inline-face ((,class :foreground ,fg-special-warm 
:underline t)))
-    `(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-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-themes-special-mild)))
-    `(semantic-tag-boundary-face ((,class :overline ,blue-intense)))
-    `(semantic-unmatched-syntax-face ((,class :underline ,fg-lang-error)))
+    `(ruler-mode-column-number ((,c :inherit ruler-mode-default)))
+    `(ruler-mode-comment-column ((,c :inherit ruler-mode-default :foreground 
,red)))
+    `(ruler-mode-current-column ((,c :inherit ruler-mode-default :background 
,bg-active :foreground ,fg-main)))
+    `(ruler-mode-default ((,c :inherit default :background ,bg-dim :foreground 
,fg-dim)))
+    `(ruler-mode-fill-column ((,c :inherit ruler-mode-default :foreground 
,green)))
+    `(ruler-mode-fringes ((,c :inherit ruler-mode-default :foreground ,cyan)))
+    `(ruler-mode-goal-column ((,c :inherit ruler-mode-default :foreground 
,blue)))
+    `(ruler-mode-margins ((,c :inherit ruler-mode-default :foreground 
,bg-main)))
+    `(ruler-mode-pad ((,c :inherit ruler-mode-default :background ,bg-inactive 
:foreground ,fg-dim)))
+    `(ruler-mode-tab-stop ((,c :inherit ruler-mode-default :foreground 
,yellow)))
 ;;;;; sesman
-    `(sesman-browser-button-face ((,class :inherit button)))
-    `(sesman-browser-highligh-face ((,class :inherit highlight)))
-    `(sesman-buffer-face ((,class :foreground ,magenta)))
-    `(sesman-directory-face ((,class :inherit bold :foreground ,blue)))
-    `(sesman-project-face ((,class :inherit bold :foreground 
,magenta-alt-other)))
+    `(sesman-browser-button-face ((,c :inherit button)))
+    `(sesman-browser-highligh-face ((,c :inherit highlight)))
+    `(sesman-buffer-face ((,c :foreground ,accent-1)))
+    `(sesman-directory-face ((,c :inherit bold :foreground ,accent-0)))
+    `(sesman-project-face ((,c :inherit bold :foreground ,accent-2)))
 ;;;;; shell-script-mode
-    `(sh-heredoc ((,class :foreground ,blue-alt)))
-    `(sh-quoted-exec ((,class :inherit modus-themes-bold :foreground 
,magenta-alt)))
+    `(sh-heredoc ((,c :inherit font-lock-string-face)))
+    `(sh-quoted-exec ((,c :inherit font-lock-builtin-face)))
 ;;;;; shortdoc
-    `(shortdoc-heading ((,class :inherit modus-themes-pseudo-header)))
+    `(shortdoc-heading ((,c :inherit bold)))
     `(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 :background ,bg-paren-expression)))
-    `(show-paren-mismatch ((,class :inherit modus-themes-intense-red)))
+    `(show-paren-match ((,c :background ,bg-paren-match :foreground ,fg-main 
:underline ,underline-paren-match)))
+    `(show-paren-match-expression ((,c :background ,bg-paren-expression)))
+    `(show-paren-mismatch ((,c :inherit modus-themes-intense-red)))
 ;;;;; shr
-    `(shr-abbreviation ((,class :inherit modus-themes-lang-note)))
-    `(shr-code ((,class :inherit modus-themes-markup-verbatim)))
-    `(shr-h1 ((,class :inherit modus-themes-heading-1)))
-    `(shr-h2 ((,class :inherit modus-themes-heading-2)))
-    `(shr-h3 ((,class :inherit modus-themes-heading-3)))
-    `(shr-h4 ((,class :inherit modus-themes-heading-4)))
-    `(shr-h5 ((,class :inherit modus-themes-heading-5)))
-    `(shr-h6 ((,class :inherit modus-themes-heading-6)))
-    `(shr-selected-link ((,class :inherit modus-themes-subtle-red)))
+    `(shr-abbreviation ((,c :inherit modus-themes-lang-note)))
+    `(shr-code ((,c :inherit modus-themes-prose-verbatim)))
+    `(shr-h1 ((,c :inherit modus-themes-heading-1)))
+    `(shr-h2 ((,c :inherit modus-themes-heading-2)))
+    `(shr-h3 ((,c :inherit modus-themes-heading-3)))
+    `(shr-h4 ((,c :inherit modus-themes-heading-4)))
+    `(shr-h5 ((,c :inherit modus-themes-heading-5)))
+    `(shr-h6 ((,c :inherit modus-themes-heading-6)))
+    `(shr-selected-link ((,c :inherit modus-themes-subtle-red)))
 ;;;;; side-notes
-    `(side-notes ((,class :background ,bg-dim :foreground ,fg-dim)))
+    `(side-notes ((,c :background ,bg-dim :foreground ,fg-dim)))
 ;;;;; sieve-mode
-    `(sieve-action-commands ((,class :inherit font-lock-builtin-face)))
-    `(sieve-control-commands ((,class :inherit font-lock-keyword-face)))
-    `(sieve-tagged-arguments ((,class :inherit font-lock-type-face)))
-    `(sieve-test-commands ((,class :inherit font-lock-function-name-face)))
+    `(sieve-action-commands ((,c :inherit font-lock-builtin-face)))
+    `(sieve-control-commands ((,c :inherit font-lock-keyword-face)))
+    `(sieve-tagged-arguments ((,c :inherit font-lock-type-face)))
+    `(sieve-test-commands ((,c :inherit font-lock-function-name-face)))
 ;;;;; skewer-mode
-    `(skewer-error-face ((,class :foreground ,red :underline t)))
+    `(skewer-error-face ((,c :inherit modus-themes-lang-error)))
 ;;;;; slime (sldb)
-    `(sldb-condition-face ((,class :inherit font-lock-preprocessor-face)))
-    `(sldb-restart-number-face ((,class :inherit bold)))
-    `(sldb-restart-type-face ((,class :inherit font-lock-type-face)))
-    `(sldb-restartable-frame-line-face ((,class :inherit success)))
-    `(sldb-section-face ((,class :inherit modus-themes-pseudo-header)))
-    `(slime-error-face ((,class :inherit modus-themes-lang-error)))
-    `(slime-note-face ((,class :underline t)))
-    `(slime-repl-input-face ((,class :inherit bold)))
-    `(slime-repl-inputed-output-face ((,class :inherit font-lock-string-face)))
-    `(slime-repl-output-mouseover-face ((,class :inherit highlight)))
-    `(slime-repl-prompt-face ((,class :inherit modus-themes-prompt)))
-    `(slime-style-warning-face ((,class :inherit modus-themes-lang-note)))
-    `(slime-warning-face ((,class :inherit modus-themes-lang-warning)))
+    `(sldb-condition-face ((,c :inherit font-lock-preprocessor-face)))
+    `(sldb-restart-number-face ((,c :inherit bold)))
+    `(sldb-restart-type-face ((,c :inherit font-lock-type-face)))
+    `(sldb-restartable-frame-line-face ((,c :inherit success)))
+    `(sldb-section-face ((,c :inherit bold)))
+    `(slime-error-face ((,c :inherit modus-themes-lang-error)))
+    `(slime-note-face ((,c :underline t)))
+    `(slime-repl-input-face ((,c :inherit bold)))
+    `(slime-repl-inputed-output-face ((,c :inherit font-lock-string-face)))
+    `(slime-repl-output-mouseover-face ((,c :inherit highlight)))
+    `(slime-repl-prompt-face ((,c :inherit modus-themes-prompt)))
+    `(slime-style-warning-face ((,c :inherit modus-themes-lang-note)))
+    `(slime-warning-face ((,c :inherit modus-themes-lang-warning)))
 ;;;;; sly
-    `(sly-action-face ((,class :inherit font-lock-type-face)))
-    `(sly-db-condition-face ((,class :inherit font-lock-preprocessor-face)))
-    `(sly-db-restartable-frame-line-face ((,class :inherit success)))
-    `(sly-error-face ((,class :inherit modus-themes-lang-error)))
-    `(sly-mode-line ((,class :inherit mode-line-emphasis)))
-    `(sly-mrepl-output-face ((,class :inherit font-lock-string-face)))
-    `(sly-mrepl-output-face ((,class :inherit font-lock-string-face)))
-    `(sly-mrepl-prompt-face ((,class :inherit modus-themes-prompt)))
-    `(sly-note-face ((,class :inherit modus-themes-lang-note)))
-    `(sly-stickers-placed-face ((,class :inherit modus-themes-subtle-neutral)))
-    `(sly-style-warning-face ((,class :inherit modus-themes-lang-note)))
-    `(sly-warning-face ((,class :inherit modus-themes-lang-warning)))
+    `(sly-action-face ((,c :inherit font-lock-type-face)))
+    `(sly-db-condition-face ((,c :inherit font-lock-preprocessor-face)))
+    `(sly-db-restartable-frame-line-face ((,c :inherit success)))
+    `(sly-error-face ((,c :inherit modus-themes-lang-error)))
+    `(sly-mode-line ((,c :inherit mode-line-emphasis)))
+    `(sly-mrepl-output-face ((,c :inherit font-lock-string-face)))
+    `(sly-mrepl-output-face ((,c :inherit font-lock-string-face)))
+    `(sly-mrepl-prompt-face ((,c :inherit modus-themes-prompt)))
+    `(sly-note-face ((,c :inherit modus-themes-lang-note)))
+    `(sly-stickers-placed-face ((,c :background ,bg-inactive)))
+    `(sly-style-warning-face ((,c :inherit modus-themes-lang-note)))
+    `(sly-warning-face ((,c :inherit modus-themes-lang-warning)))
 ;;;;; smart-mode-line
-    `(sml/charging ((,class :foreground ,green-active)))
-    `(sml/discharging ((,class :foreground ,red-active)))
-    `(sml/filename ((,class :inherit bold :foreground ,blue-active)))
-    `(sml/folder ((,class :foreground ,fg-active)))
-    `(sml/git ((,class :inherit bold :foreground ,green-active)))
-    `(sml/global ((,class :foreground ,fg-active)))
-    `(sml/line-number ((,class :inherit sml/global)))
-    `(sml/minor-modes ((,class :inherit sml/global)))
-    `(sml/modes ((,class :inherit bold :foreground ,fg-active)))
-    `(sml/modified ((,class :inherit bold :foreground ,magenta-active)))
-    `(sml/mule-info ((,class :inherit sml/global)))
-    `(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-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-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-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-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)))
+    `(sml/charging ((,c :foreground ,info)))
+    `(sml/discharging ((,c :foreground ,err)))
+    `(sml/filename ((,c :inherit bold :foreground ,name)))
+    `(sml/folder (( )))
+    `(sml/git ((,c :inherit success)))
+    `(sml/global (( )))
+    `(sml/line-number ((,c :inherit sml/global)))
+    `(sml/minor-modes ((,c :inherit sml/global)))
+    `(sml/modes ((,c :inherit bold)))
+    `(sml/modified ((,c :inherit italic)))
+    `(sml/mule-info ((,c :inherit sml/global)))
+    `(sml/name-filling ((,c :inherit warning)))
+    `(sml/not-modified ((,c :inherit sml/global)))
+    `(sml/numbers-separator ((,c :inherit sml/global)))
+    `(sml/outside-modified ((,c :inherit modus-themes-intense-red)))
+    `(sml/position-percentage ((,c :inherit sml/global)))
+    `(sml/prefix ((,c :foreground ,fg-alt)))
+    `(sml/process ((,c :inherit sml/prefix)))
+    `(sml/projectile ((,c :inherit sml/git)))
+    `(sml/read-only (( )))
+    `(sml/remote ((,c :inherit sml/global)))
+    `(sml/sudo ((,c :inherit warning)))
+    `(sml/time ((,c :inherit sml/global)))
+    `(sml/vc ((,c :inherit sml/git)))
+    `(sml/vc-edited ((,c :inherit italic)))
 ;;;;; smerge
-    `(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-base ((,c :inherit diff-changed)))
+    `(smerge-lower ((,c :inherit diff-added)))
+    `(smerge-markers ((,c :inherit diff-heading)))
+    `(smerge-refined-added ((,c :inherit diff-refine-added)))
     `(smerge-refined-changed (()))
-    `(smerge-refined-removed ((,class :inherit 
modus-themes-diff-refine-removed)))
-    `(smerge-upper ((,class :inherit modus-themes-diff-removed)))
-;;;;; spaceline
-    `(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-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-themes-fringe-blue)))
-    `(spaceline-modified ((,class :inherit modus-themes-fringe-magenta)))
-    `(spaceline-python-venv ((,class :foreground ,magenta-active)))
-    `(spaceline-read-only ((,class :inherit modus-themes-fringe-red)))
-    `(spaceline-unmodified ((,class :inherit modus-themes-fringe-cyan)))
+    `(smerge-refined-removed ((,c :inherit diff-refine-removed)))
+    `(smerge-upper ((,c :inherit diff-removed)))
 ;;;;; 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 highlight)))
-    `(speedbar-selected-face ((,class :inherit bold :foreground ,cyan)))
-    `(speedbar-separator-face ((,class :inherit modus-themes-intense-neutral)))
-    `(speedbar-tag-face ((,class :foreground ,yellow-alt-other)))
+    `(speedbar-button-face ((,c :inherit button)))
+    `(speedbar-directory-face ((,c :inherit bold :foreground ,accent-0)))
+    `(speedbar-file-face ((,c :foreground ,fg-main)))
+    `(speedbar-highlight-face ((,c :inherit highlight)))
+    `(speedbar-selected-face ((,c :inherit modus-themes-mark-sel)))
+    `(speedbar-separator-face ((,c :background ,bg-active :foreground 
,fg-main)))
+    `(speedbar-tag-face ((,c :foreground ,accent-1)))
 ;;;;; spell-fu
-    `(spell-fu-incorrect-face ((,class :inherit modus-themes-lang-error)))
+    `(spell-fu-incorrect-face ((,c :inherit modus-themes-lang-error)))
 ;;;;; stripes
-    `(stripes ((,class :background ,bg-alt)))
+    `(stripes ((,c :background ,bg-inactive)))
 ;;;;; suggest
-    `(suggest-heading ((,class :inherit bold :foreground ,yellow-alt-other)))
+    `(suggest-heading ((,c :inherit warning)))
 ;;;;; switch-window
-    `(switch-window-background ((,class :background ,bg-dim)))
-    `(switch-window-label ((,class :height 3.0 :foreground ,blue-intense)))
+    `(switch-window-background ((,c :background ,bg-inactive)))
+    `(switch-window-label ((,c :height 3.0 :foreground ,red-intense)))
 ;;;;; swiper
     `(swiper-background-match-face-1 (( )))
-    `(swiper-background-match-face-2 ((,class :inherit 
modus-themes-completion-match-0)))
-    `(swiper-background-match-face-3 ((,class :inherit 
modus-themes-completion-match-1)))
-    `(swiper-background-match-face-4 ((,class :inherit 
modus-themes-completion-match-2)))
-    `(swiper-line-face ((,class :background ,bg-hl-alt-intense)))
+    `(swiper-background-match-face-2 ((,c :inherit 
modus-themes-completion-match-0)))
+    `(swiper-background-match-face-3 ((,c :inherit 
modus-themes-completion-match-1)))
+    `(swiper-background-match-face-4 ((,c :inherit 
modus-themes-completion-match-2)))
+    `(swiper-line-face ((,c :inherit highlight)))
     `(swiper-match-face-1 (( )))
-    `(swiper-match-face-2 ((,class :inherit modus-themes-completion-match-0)))
-    `(swiper-match-face-3 ((,class :inherit modus-themes-completion-match-1)))
-    `(swiper-match-face-4 ((,class :inherit modus-themes-completion-match-2)))
-;;;;; sx
-    `(sx-inbox-item-type ((,class :foreground ,magenta-alt-other)))
-    `(sx-inbox-item-type-unread ((,class :inherit (sx-inbox-item-type bold))))
-    `(sx-question-list-answers ((,class :foreground ,green)))
-    `(sx-question-list-answers-accepted ((,class :box t :foreground ,green)))
-    `(sx-question-list-bounty ((,class :inherit bold :background ,bg-alt 
:foreground ,yellow)))
-    `(sx-question-list-date ((,class :foreground ,fg-special-cold)))
-    `(sx-question-list-favorite ((,class :inherit bold :foreground 
,fg-special-warm)))
-    `(sx-question-list-parent ((,class :foreground ,fg-main)))
-    `(sx-question-list-read-question ((,class :inherit shadow)))
-    `(sx-question-list-score ((,class :foreground ,fg-special-mild)))
-    `(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-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)))
-    `(sx-question-mode-header ((,class :inherit bold :foreground ,cyan)))
-    `(sx-question-mode-kbd-tag ((,class :inherit bold :height 0.9 :box 
(:line-width 3 :color ,fg-main :style released-button) :foreground ,fg-main)))
-    `(sx-question-mode-score ((,class :foreground ,fg-dim)))
-    `(sx-question-mode-score-downvoted ((,class :foreground ,yellow)))
-    `(sx-question-mode-score-upvoted ((,class :inherit bold :foreground 
,magenta)))
-    `(sx-question-mode-title ((,class :inherit bold :foreground ,fg-main)))
-    `(sx-question-mode-title-comments ((,class :inherit (shadow bold))))
-    `(sx-tag ((,class :foreground ,magenta-alt)))
-    `(sx-user-name ((,class :foreground ,blue-alt)))
-    `(sx-user-reputation ((,class :inherit shadow)))
+    `(swiper-match-face-2 ((,c :inherit modus-themes-completion-match-0)))
+    `(swiper-match-face-3 ((,c :inherit modus-themes-completion-match-1)))
+    `(swiper-match-face-4 ((,c :inherit modus-themes-completion-match-2)))
 ;;;;; symbol-overlay
-    `(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)))
+    `(symbol-overlay-default-face ((,c :background ,bg-inactive)))
+    `(symbol-overlay-face-1 ((,c :inherit modus-themes-intense-blue)))
+    `(symbol-overlay-face-2 ((,c :inherit modus-themes-intense-magenta)))
+    `(symbol-overlay-face-3 ((,c :inherit modus-themes-intense-yellow)))
+    `(symbol-overlay-face-4 ((,c :inherit modus-themes-intense-magenta)))
+    `(symbol-overlay-face-5 ((,c :inherit modus-themes-intense-red)))
+    `(symbol-overlay-face-6 ((,c :inherit modus-themes-intense-red)))
+    `(symbol-overlay-face-7 ((,c :inherit modus-themes-intense-cyan)))
+    `(symbol-overlay-face-8 ((,c :inherit modus-themes-intense-cyan)))
 ;;;;; syslog-mode
-    `(syslog-debug ((,class :inherit bold :foreground ,cyan-alt-other)))
-    `(syslog-error ((,class :inherit error)))
-    `(syslog-file ((,class :inherit bold :foreground ,fg-special-cold)))
-    `(syslog-hide ((,class :background ,bg-main :foreground ,fg-main)))
-    `(syslog-hour ((,class :inherit bold :foreground ,magenta-alt-other)))
-    `(syslog-info ((,class :inherit success)))
-    `(syslog-ip ((,class :inherit bold :foreground ,fg-special-mild :underline 
t)))
-    `(syslog-su ((,class :inherit bold :foreground ,red-alt)))
-    `(syslog-warn ((,class :inherit warning)))
-;;;;; tab-bar-groups
-    `(tab-bar-groups-tab-1 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,blue-tab)))
-    `(tab-bar-groups-tab-2 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,red-tab)))
-    `(tab-bar-groups-tab-3 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,green-tab)))
-    `(tab-bar-groups-tab-4 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,orange-tab)))
-    `(tab-bar-groups-tab-5 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,purple-tab)))
-    `(tab-bar-groups-tab-6 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,cyan-tab)))
-    `(tab-bar-groups-tab-7 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,yellow-tab)))
-    `(tab-bar-groups-tab-8 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,magenta-tab)))
+    `(syslog-debug ((,c :inherit italic)))
+    `(syslog-error ((,c :inherit error)))
+    `(syslog-file ((,c :inherit bold :foreground ,name)))
+    `(syslog-hide ((,c :background ,bg-main :foreground ,fg-main)))
+    `(syslog-hour ((,c :inherit bold :foreground ,date-common)))
+    `(syslog-info ((,c :inherit success)))
+    `(syslog-ip ((,c :inherit bold :foreground ,name :underline t)))
+    `(syslog-su ((,c :inherit error :underline t)))
+    `(syslog-warn ((,c :inherit warning)))
 ;;;;; tab-bar-mode
-    `(tab-bar ((,class :inherit modus-themes-tab-backdrop)))
-    `(tab-bar-tab-group-current ((,class ,@(modus-themes--tab bg-tab-active)
-                                         :box (:line-width (2 . -2) :color 
"gray50"))))
-    `(tab-bar-tab-group-inactive ((,class ,@(modus-themes--tab bg-tab-inactive 
bg-tab-inactive-accent fg-dim)
-                                          :box (:line-width (2 . -2) :color 
"gray50"))))
-    `(tab-bar-tab ((,class :inherit modus-themes-tab-active)))
-    `(tab-bar-tab-inactive ((,class :inherit modus-themes-tab-inactive)))
+    `(tab-bar ((,c :inherit modus-themes-ui-variable-pitch :background 
,bg-tab-bar)))
+    `(tab-bar-tab-group-current ((,c :inherit bold :background ,bg-tab-current 
:box (:line-width -2 :color ,bg-tab-current) :foreground ,fg-alt)))
+    `(tab-bar-tab-group-inactive ((,c :background ,bg-tab-bar :box 
(:line-width -2 :color ,bg-tab-bar) :foreground ,fg-alt)))
+    `(tab-bar-tab ((,c :inherit bold :box (:line-width -2 :color 
,bg-tab-current) :background ,bg-tab-current)))
+    `(tab-bar-tab-inactive ((,c :box (:line-width -2 :color ,bg-tab-other) 
:background ,bg-tab-other)))
+    `(tab-bar-tab-ungrouped ((,c :inherit tab-bar-tab-inactive)))
 ;;;;; tab-line-mode
-    `(tab-line ((,class :inherit modus-themes-tab-backdrop :height 0.95)))
-    `(tab-line-close-highlight ((,class :foreground ,red)))
-    `(tab-line-highlight ((,class :inherit modus-themes-active-blue)))
-    `(tab-line-tab ((,class :inherit modus-themes-tab-active)))
-    `(tab-line-tab-current ((,class :inherit tab-line-tab)))
-    `(tab-line-tab-inactive ((,class :inherit modus-themes-tab-inactive)))
-    `(tab-line-tab-inactive-alternate ((,class ,@(modus-themes--tab 
bg-tab-inactive-alt
-                                                                    
bg-tab-inactive-alt-accent fg-main nil t))))
-    `(tab-line-tab-modified ((,class :foreground ,red-alt-other-faint)))
+    `(tab-line ((,c :inherit modus-themes-ui-variable-pitch :background 
,bg-tab-bar :height 0.95)))
+    `(tab-line-close-highlight ((,c :foreground ,err)))
+    `(tab-line-highlight ((,c :inherit highlight)))
+    `(tab-line-tab (( )))
+    `(tab-line-tab-current ((,c :inherit bold :box (:line-width -2 :color 
,bg-tab-current) :background ,bg-tab-current)))
+    `(tab-line-tab-inactive ((,c :box (:line-width -2 :color ,bg-tab-other) 
:background ,bg-tab-other)))
+    `(tab-line-tab-inactive-alternate ((,c :inherit tab-line-tab-inactive 
:foreground ,fg-alt)))
+    `(tab-line-tab-modified ((,c :foreground ,warning)))
 ;;;;; table (built-in table.el)
-    `(table-cell ((,class :background ,blue-nuanced-bg)))
+    `(table-cell ((,c :background ,bg-dim)))
 ;;;;; telega
-    `(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 modus-themes-markup-verbatim)))
-    `(telega-entity-type-mention ((,class :foreground ,cyan)))
-    `(telega-entity-type-pre ((,class :inherit modus-themes-markup-code)))
-    `(telega-entity-type-spoiler ((,class :background ,fg-main :foreground 
,fg-main)))
-    `(telega-msg-heading ((,class :background ,bg-alt)))
-    `(telega-msg-self-title ((,class :inherit bold)))
-    `(telega-root-heading ((,class :inherit modus-themes-subtle-neutral)))
-    `(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 modus-themes-fixed-pitch :height 
0.85)))
-    `(telega-webpage-header ((,class :inherit modus-themes-variable-pitch 
:height 1.3)))
-    `(telega-webpage-preformatted ((,class :inherit modus-themes-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)))
-    `(telephone-line-error ((,class :inherit bold :foreground ,red-active)))
-    `(telephone-line-evil ((,class :foreground ,fg-main)))
-    `(telephone-line-evil-emacs ((,class :inherit telephone-line-evil 
:background ,magenta-intense-bg)))
-    `(telephone-line-evil-insert ((,class :inherit telephone-line-evil 
:background ,green-intense-bg)))
-    `(telephone-line-evil-motion ((,class :inherit telephone-line-evil 
:background ,yellow-intense-bg)))
-    `(telephone-line-evil-normal ((,class :inherit telephone-line-evil 
:background ,bg-alt)))
-    `(telephone-line-evil-operator ((,class :inherit telephone-line-evil 
:background ,yellow-subtle-bg)))
-    `(telephone-line-evil-replace ((,class :inherit telephone-line-evil 
:background ,red-intense-bg)))
-    `(telephone-line-evil-visual ((,class :inherit telephone-line-evil 
:background ,cyan-intense-bg)))
-    `(telephone-line-projectile ((,class :foreground ,cyan-active)))
-    `(telephone-line-unimportant ((,class :foreground ,fg-inactive)))
-    `(telephone-line-warning ((,class :inherit bold :foreground 
,yellow-active)))
+    `(telega-button ((,c :box t :foreground ,fg-link)))
+    `(telega-button-active ((,c :box ,fg-link :background ,fg-link :foreground 
,bg-main)))
+    `(telega-button-highlight ((,c :inherit secondary-selection)))
+    `(telega-chat-prompt ((,c :inherit modus-themes-prompt)))
+    `(telega-entity-type-code ((,c :inherit modus-themes-prose-verbatim)))
+    `(telega-entity-type-mention ((,c :foreground ,cyan)))
+    `(telega-entity-type-pre ((,c :inherit modus-themes-prose-code)))
+    `(telega-entity-type-spoiler ((,c :background ,fg-main :foreground 
,fg-main)))
+    `(telega-msg-heading ((,c :background ,bg-inactive)))
+    `(telega-msg-self-title ((,c :inherit bold)))
+    `(telega-root-heading ((,c :background ,bg-inactive)))
+    `(telega-secret-title ((,c :foreground ,magenta-warmer)))
+    `(telega-unmuted-count ((,c :foreground ,blue-cooler)))
+    `(telega-user-online-status ((,c :foreground ,cyan)))
+    `(telega-username ((,c :foreground ,cyan-cooler)))
+    `(telega-webpage-chat-link ((,c :background ,bg-inactive)))
+    `(telega-webpage-fixed ((,c :inherit modus-themes-fixed-pitch :height 
0.85)))
+    `(telega-webpage-header ((,c :inherit modus-themes-variable-pitch :height 
1.3)))
+    `(telega-webpage-preformatted ((,c :inherit modus-themes-fixed-pitch 
:background ,bg-inactive)))
+    `(telega-webpage-subheader ((,c :inherit modus-themes-variable-pitch 
:height 1.15)))
 ;;;;; terraform-mode
-    `(terraform--resource-name-face ((,class ,@(modus-themes--syntax-string
-                                                magenta-alt-other 
magenta-alt-other-faint
-                                                red-alt red-alt))))
-    `(terraform--resource-type-face ((,class ,@(modus-themes--syntax-string
-                                                green green-faint
-                                                blue-alt magenta-alt))))
+    `(terraform--resource-name-face ((,c :foreground ,keyword)))
+    `(terraform--resource-type-face ((,c :foreground ,type)))
 ;;;;; term
-    `(term ((,class :background ,bg-main :foreground ,fg-main)))
-    `(term-bold ((,class :inherit bold)))
-    `(term-color-black ((,class :background "gray35" :foreground "gray35")))
-    `(term-color-blue ((,class :background ,blue :foreground ,blue)))
-    `(term-color-cyan ((,class :background ,cyan :foreground ,cyan)))
-    `(term-color-green ((,class :background ,green :foreground ,green)))
-    `(term-color-magenta ((,class :background ,magenta :foreground ,magenta)))
-    `(term-color-red ((,class :background ,red :foreground ,red)))
-    `(term-color-white ((,class :background "gray65" :foreground "gray65")))
-    `(term-color-yellow ((,class :background ,yellow :foreground ,yellow)))
-    `(term-underline ((,class :underline t)))
+    `(term ((,c :background ,bg-main :foreground ,fg-main)))
+    `(term-bold ((,c :inherit bold)))
+    `(term-color-black ((,c :background "gray35" :foreground "gray35")))
+    `(term-color-blue ((,c :background ,blue :foreground ,blue)))
+    `(term-color-cyan ((,c :background ,cyan :foreground ,cyan)))
+    `(term-color-green ((,c :background ,green :foreground ,green)))
+    `(term-color-magenta ((,c :background ,magenta :foreground ,magenta)))
+    `(term-color-red ((,c :background ,red :foreground ,red)))
+    `(term-color-white ((,c :background "gray65" :foreground "gray65")))
+    `(term-color-yellow ((,c :background ,yellow :foreground ,yellow)))
+    `(term-underline ((,c :underline t)))
 ;;;;; textsec
-    `(textsec-suspicious (()))
-;;;;; tomatinho
-    `(tomatinho-ok-face ((,class :foreground ,blue-intense)))
-    `(tomatinho-pause-face ((,class :foreground ,yellow-intense)))
-    `(tomatinho-reset-face ((,class :inherit shadow)))
+    `(textsec-suspicious (( )))
 ;;;;; transient
-    `(transient-active-infix ((,class :inherit modus-themes-special-mild)))
-    `(transient-amaranth ((,class :inherit bold :foreground ,yellow-alt)))
+    `(transient-active-infix ((,c :inherit highlight)))
+    `(transient-amaranth ((,c :inherit bold :foreground ,yellow-warmer)))
     ;; Placate the compiler for what is a spurious warning.  We also
     ;; have to do this with `eldoc-highlight-function-argument'.
-    (list 'transient-argument `((,class :inherit bold :background 
,cyan-nuanced-bg :foreground ,cyan)))
-    `(transient-blue ((,class :inherit bold :foreground ,blue)))
-    `(transient-disabled-suffix ((,class :inherit modus-themes-intense-red)))
-    `(transient-enabled-suffix ((,class :inherit 
modus-themes-grue-background-subtle)))
-    `(transient-heading ((,class :inherit bold :foreground ,fg-main)))
-    `(transient-inactive-argument ((,class :inherit shadow)))
-    `(transient-inactive-value ((,class :inherit shadow)))
-    `(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-alt-faint)))
-    `(transient-purple ((,class :inherit bold :foreground ,magenta-alt-other)))
-    `(transient-red ((,class :inherit bold :foreground ,red-faint)))
-    `(transient-teal ((,class :inherit bold :foreground ,cyan-alt-other)))
-    `(transient-unreachable ((,class :inherit shadow)))
-    `(transient-unreachable-key ((,class :inherit shadow)))
-    `(transient-value ((,class :inherit bold :background ,yellow-nuanced-bg 
:foreground ,yellow-alt-other)))
+    (list 'transient-argument `((,c :inherit (bold modus-themes-mark-alt))))
+    `(transient-blue ((,c :inherit bold :foreground ,blue)))
+    `(transient-disabled-suffix ((,c :inherit modus-themes-intense-red)))
+    `(transient-enabled-suffix ((,c :inherit modus-themes-subtle-cyan)))
+    `(transient-heading ((,c :inherit bold :foreground ,fg-main)))
+    `(transient-inactive-argument ((,c :inherit shadow)))
+    `(transient-inactive-value ((,c :inherit shadow)))
+    `(transient-key ((,c :inherit modus-themes-key-binding)))
+    `(transient-mismatched-key ((,c :underline t)))
+    `(transient-nonstandard-key ((,c :underline t)))
+    `(transient-pink ((,c :inherit bold :foreground ,magenta)))
+    `(transient-purple ((,c :inherit bold :foreground ,magenta-cooler)))
+    `(transient-red ((,c :inherit bold :foreground ,red-faint)))
+    `(transient-teal ((,c :inherit bold :foreground ,cyan-cooler)))
+    `(transient-unreachable ((,c :inherit shadow)))
+    `(transient-unreachable-key ((,c :inherit shadow)))
+    `(transient-value ((,c :inherit (bold modus-themes-mark-sel))))
 ;;;;; trashed
-    `(trashed-deleted ((,class :inherit modus-themes-mark-del)))
-    `(trashed-directory ((,class :foreground ,blue)))
-    `(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 modus-themes-link-symlink)))
+    `(trashed-deleted ((,c :inherit modus-themes-mark-del)))
+    `(trashed-directory ((,c :foreground ,accent-0)))
+    `(trashed-mark ((,c :inherit bold)))
+    `(trashed-marked ((,c :inherit modus-themes-mark-alt)))
+    `(trashed-restored ((,c :inherit modus-themes-mark-sel)))
 ;;;;; tree-sitter
-    `(tree-sitter-hl-face:attribute ((,class :inherit 
font-lock-variable-name-face)))
-    `(tree-sitter-hl-face:constant.builtin ((,class :inherit 
tree-sitter-hl-face:constant)))
-    `(tree-sitter-hl-face:escape ((,class :inherit 
font-lock-regexp-grouping-backslash)))
-    `(tree-sitter-hl-face:function ((,class :inherit 
font-lock-function-name-face)))
-    `(tree-sitter-hl-face:function.call ((,class :inherit 
tree-sitter-hl-face:function)))
+    `(tree-sitter-hl-face:attribute ((,c :inherit 
font-lock-variable-name-face)))
+    `(tree-sitter-hl-face:constant.builtin ((,c :inherit 
tree-sitter-hl-face:constant)))
+    `(tree-sitter-hl-face:escape ((,c :inherit 
font-lock-regexp-grouping-backslash)))
+    `(tree-sitter-hl-face:function ((,c :inherit 
font-lock-function-name-face)))
+    `(tree-sitter-hl-face:function.call ((,c :inherit 
tree-sitter-hl-face:function)))
     `(tree-sitter-hl-face:label (( )))
     `(tree-sitter-hl-face:method.call (( )))
-    `(tree-sitter-hl-face:operator ((,class :inherit modus-themes-bold)))
+    `(tree-sitter-hl-face:operator ((,c :inherit modus-themes-bold)))
     `(tree-sitter-hl-face:property (( )))
-    `(tree-sitter-hl-face:property.definition ((,class :inherit 
font-lock-variable-name-face)))
+    `(tree-sitter-hl-face:property.definition ((,c :inherit 
font-lock-variable-name-face)))
     `(tree-sitter-hl-face:punctuation (( )))
     `(tree-sitter-hl-face:punctuation.bracket (( )))
     `(tree-sitter-hl-face:punctuation.delimiter (( )))
-    `(tree-sitter-hl-face:punctuation.special ((,class :inherit 
font-lock-regexp-grouping-construct)))
-    `(tree-sitter-hl-face:string.special ((,class :inherit 
tree-sitter-hl-face:string)))
-    `(tree-sitter-hl-face:tag ((,class :inherit font-lock-function-name-face)))
+    `(tree-sitter-hl-face:punctuation.special ((,c :inherit 
font-lock-regexp-grouping-construct)))
+    `(tree-sitter-hl-face:string.special ((,c :inherit 
tree-sitter-hl-face:string)))
+    `(tree-sitter-hl-face:tag ((,c :inherit font-lock-function-name-face)))
     `(tree-sitter-hl-face:type.argument (( )))
-;;;;; treemacs
-    `(treemacs-directory-collapsed-face ((,class :foreground ,magenta-alt)))
-    `(treemacs-directory-face ((,class :inherit dired-directory)))
-    `(treemacs-file-face ((,class :foreground ,fg-main)))
-    `(treemacs-fringe-indicator-face ((,class :foreground ,fg-main)))
-    `(treemacs-git-added-face ((,class :inherit success)))
-    `(treemacs-git-conflict-face ((,class :inherit error)))
-    `(treemacs-git-ignored-face ((,class :inherit shadow)))
-    `(treemacs-git-modified-face ((,class :inherit warning)))
-    `(treemacs-git-renamed-face ((,class :inherit italic)))
-    `(treemacs-git-unmodified-face ((,class :foreground ,fg-main)))
-    `(treemacs-git-untracked-face ((,class :inherit shadow)))
-    `(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-themes-intense-red)))
-    `(treemacs-on-success-pulse-face ((,class :inherit 
modus-themes-grue-background-intense)))
-    `(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)))
-    `(treemacs-root-remote-unreadable-face ((,class :inherit 
treemacs-root-unreadable-face)))
-    `(treemacs-root-unreadable-face ((,class :inherit treemacs-root-face 
:strike-through t)))
-    `(treemacs-tags-face ((,class :foreground ,blue-alt)))
 ;;;;; 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-themes-intense-blue)))
+    `(tty-menu-disabled-face ((,c :background ,bg-inactive :foreground 
,fg-dim)))
+    `(tty-menu-enabled-face ((,c :inherit bold :background ,bg-inactive 
:foreground ,fg-main)))
+    `(tty-menu-selected-face ((,c :inherit modus-themes-intense-blue)))
 ;;;;; tuareg
-    `(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-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)))
-    `(tuareg-font-lock-interactive-directive-face ((,class :foreground 
,fg-special-cold)))
-    `(tuareg-font-lock-interactive-error-face ((,class :inherit error)))
-    `(tuareg-font-lock-interactive-output-face ((,class :inherit 
font-lock-constant-face)))
-    `(tuareg-font-lock-label-face ((,class :inherit font-lock-type-face)))
-    `(tuareg-font-lock-line-number-face ((,class :foreground 
,fg-special-warm)))
-    `(tuareg-font-lock-module-face ((,class :inherit font-lock-builtin-face)))
-    `(tuareg-font-lock-multistage-face ((,class :inherit bold :background 
,bg-alt :foreground ,blue)))
-    `(tuareg-font-lock-operator-face ((,class :inherit 
font-lock-preprocessor-face)))
-    `(tuareg-opam-error-face ((,class :inherit error)))
-    `(tuareg-opam-pkg-variable-name-face ((,class :inherit 
font-lock-variable-name-face)))
+    `(caml-types-def-face ((,c :inherit modus-themes-subtle-red)))
+    `(caml-types-expr-face ((,c :inherit modus-themes-subtle-green)))
+    `(caml-types-occ-face ((,c :inherit modus-themes-subtle-green)))
+    `(caml-types-scope-face ((,c :inherit modus-themes-subtle-blue)))
+    `(caml-types-typed-face ((,c :inherit modus-themes-subtle-magenta)))
+    `(tuareg-font-double-semicolon-face ((,c :inherit 
font-lock-preprocessor-face)))
+    `(tuareg-font-lock-attribute-face ((,c :inherit 
font-lock-function-name-face)))
+    `(tuareg-font-lock-constructor-face ((,c :foreground ,fg-main)))
+    `(tuareg-font-lock-error-face ((,c :inherit (modus-themes-intense-red 
bold))))
+    ;; `(tuareg-font-lock-extension-node-face ((,c :background ,bg-inactive 
:foreground ,magenta)))
+    `(tuareg-font-lock-governing-face ((,c :inherit bold :foreground 
,fg-main)))
+    `(tuareg-font-lock-infix-extension-node-face ((,c :inherit 
font-lock-function-name-face)))
+    `(tuareg-font-lock-interactive-directive-face ((,c :inherit 
font-lock-preprocessor-face)))
+    `(tuareg-font-lock-interactive-error-face ((,c :inherit error)))
+    `(tuareg-font-lock-interactive-output-face ((,c :inherit 
font-lock-constant-face)))
+    `(tuareg-font-lock-label-face ((,c :inherit font-lock-type-face)))
+    `(tuareg-font-lock-line-number-face ((,c :inherit shadow)))
+    `(tuareg-font-lock-module-face ((,c :inherit font-lock-builtin-face)))
+    ;; `(tuareg-font-lock-multistage-face ((,c :inherit bold :background 
,bg-inactive :foreground ,blue)))
+    `(tuareg-font-lock-operator-face ((,c :inherit 
font-lock-preprocessor-face)))
+    `(tuareg-opam-error-face ((,c :inherit error)))
+    `(tuareg-opam-pkg-variable-name-face ((,c :inherit 
font-lock-variable-name-face)))
 ;;;;; typescript
-    `(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)))
+    `(typescript-jsdoc-tag ((,c :inherit (font-lock-builtin-face 
font-lock-comment-face) :weight normal)))
+    `(typescript-jsdoc-type ((,c :inherit (font-lock-type-face 
font-lock-comment-face) :weight normal)))
+    `(typescript-jsdoc-value ((,c :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)))
-    `(undo-tree-visualizer-default-face ((,class :inherit shadow)))
-    `(undo-tree-visualizer-register-face ((,class :foreground 
,magenta-intense)))
-    `(undo-tree-visualizer-unmodified-face ((,class :foreground 
,green-intense)))
+    `(undo-tree-visualizer-active-branch-face ((,c :inherit bold :foreground 
,fg-main)))
+    `(undo-tree-visualizer-current-face ((,c :foreground ,blue-intense)))
+    `(undo-tree-visualizer-default-face ((,c :inherit shadow)))
+    `(undo-tree-visualizer-register-face ((,c :foreground ,magenta-intense)))
+    `(undo-tree-visualizer-unmodified-face ((,c :foreground ,green-intense)))
 ;;;;; vc (vc-dir.el, vc-hooks.el)
-    `(vc-dir-directory ((,class :foreground ,blue)))
-    `(vc-dir-file ((,class :foreground ,fg-main)))
-    `(vc-dir-header ((,class :foreground ,cyan-alt-other)))
-    `(vc-dir-header-value ((,class :foreground ,magenta-alt-other)))
-    `(vc-dir-mark-indicator ((,class :foreground ,blue-alt-other)))
-    `(vc-dir-status-edited ((,class :foreground ,yellow)))
-    `(vc-dir-status-ignored ((,class :inherit shadow)))
-    `(vc-dir-status-up-to-date ((,class :foreground ,cyan)))
-    `(vc-dir-status-warning ((,class :inherit error)))
-    `(vc-conflict-state ((,class :inherit bold :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-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)))
+    `(vc-dir-directory (( )))
+    `(vc-dir-file ((,c :foreground ,name)))
+    `(vc-dir-header ((,c :inherit bold)))
+    `(vc-dir-header-value ((,c :foreground ,string)))
+    `(vc-dir-mark-indicator (( )))
+    `(vc-dir-status-edited ((,c :inherit italic)))
+    `(vc-dir-status-ignored ((,c :inherit shadow)))
+    `(vc-dir-status-up-to-date ((,c :foreground ,info)))
+    `(vc-dir-status-warning ((,c :inherit error)))
+    `(vc-conflict-state ((,c :inherit error)))
+    `(vc-edited-state ((,c :inherit italic)))
+    `(vc-git-log-edit-summary-max-warning ((,c :inherit error)))
+    `(vc-git-log-edit-summary-target-warning ((,c :inherit warning)))
+    `(vc-locally-added-state ((,c :inherit italic)))
+    `(vc-locked-state ((,c :inherit success)))
+    `(vc-missing-state ((,c :inherit error)))
+    `(vc-needs-update-state ((,c :inherit error)))
+    `(vc-removed-state ((,c :inherit error)))
+    `(vc-state-base (( )))
+    `(vc-up-to-date-state (( )))
 ;;;;; vertico
-    `(vertico-current ((,class :inherit modus-themes-completion-selected)))
+    `(vertico-current ((,c :inherit modus-themes-completion-selected)))
 ;;;;; vertico-quick
-    `(vertico-quick1 ((,class :inherit bold :background ,bg-char-0)))
-    `(vertico-quick2 ((,class :inherit bold :background ,bg-char-1)))
+    `(vertico-quick1 ((,c :inherit bold :background ,bg-char-0)))
+    `(vertico-quick2 ((,c :inherit bold :background ,bg-char-1)))
 ;;;;; vimish-fold
-    `(vimish-fold-fringe ((,class :foreground ,cyan-active)))
-    `(vimish-fold-mouse-face ((,class :inherit modus-themes-intense-blue)))
-    `(vimish-fold-overlay ((,class :background ,bg-alt :foreground 
,fg-special-cold)))
+    `(vimish-fold-fringe ((,c :foreground ,cyan)))
+    `(vimish-fold-mouse-face ((,c :inherit modus-themes-intense-blue)))
+    `(vimish-fold-overlay ((,c :background ,bg-inactive)))
 ;;;;; visible-mark
-    `(visible-mark-active ((,class :background ,blue-intense-bg)))
-    `(visible-mark-face1 ((,class :background ,cyan-intense-bg)))
-    `(visible-mark-face2 ((,class :background ,yellow-intense-bg)))
-    `(visible-mark-forward-face1 ((,class :background ,magenta-intense-bg)))
-    `(visible-mark-forward-face2 ((,class :background ,green-intense-bg)))
+    `(visible-mark-active ((,c :background ,bg-blue-intense)))
+    `(visible-mark-face1 ((,c :background ,bg-cyan-intense)))
+    `(visible-mark-face2 ((,c :background ,bg-yellow-intense)))
+    `(visible-mark-forward-face1 ((,c :background ,bg-magenta-intense)))
+    `(visible-mark-forward-face2 ((,c :background ,bg-green-intense)))
 ;;;;; visual-regexp
-    `(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))))
+    `(vr/group-0 ((,c :inherit modus-themes-intense-blue)))
+    `(vr/group-1 ((,c :inherit modus-themes-intense-magenta)))
+    `(vr/group-2 ((,c :inherit modus-themes-intense-green)))
+    `(vr/match-0 ((,c :inherit modus-themes-intense-yellow)))
+    `(vr/match-1 ((,c :inherit modus-themes-intense-yellow)))
+    `(vr/match-separator-face ((,c :inherit bold :background ,bg-active)))
 ;;;;; vterm
-    `(vterm-color-black ((,class :background "gray35" :foreground "gray35")))
-    `(vterm-color-blue ((,class :background ,blue :foreground ,blue)))
-    `(vterm-color-cyan ((,class :background ,cyan :foreground ,cyan)))
-    `(vterm-color-default ((,class :background ,bg-main :foreground ,fg-main)))
-    `(vterm-color-green ((,class :background ,green :foreground ,green)))
-    `(vterm-color-inverse-video ((,class :background ,bg-main :inverse-video 
t)))
-    `(vterm-color-magenta ((,class :background ,magenta :foreground ,magenta)))
-    `(vterm-color-red ((,class :background ,red :foreground ,red)))
-    `(vterm-color-underline ((,class :foreground ,fg-special-warm :underline 
t)))
-    `(vterm-color-white ((,class :background "gray65" :foreground "gray65")))
-    `(vterm-color-yellow ((,class :background ,yellow :foreground ,yellow)))
+    `(vterm-color-black ((,c :background "gray35" :foreground "gray35")))
+    `(vterm-color-blue ((,c :background ,blue :foreground ,blue)))
+    `(vterm-color-cyan ((,c :background ,cyan :foreground ,cyan)))
+    `(vterm-color-default ((,c :background ,bg-main :foreground ,fg-main)))
+    `(vterm-color-green ((,c :background ,green :foreground ,green)))
+    `(vterm-color-inverse-video ((,c :background ,bg-main :inverse-video t)))
+    `(vterm-color-magenta ((,c :background ,magenta :foreground ,magenta)))
+    `(vterm-color-red ((,c :background ,red :foreground ,red)))
+    `(vterm-color-underline ((,c :underline t)))
+    `(vterm-color-white ((,c :background "gray65" :foreground "gray65")))
+    `(vterm-color-yellow ((,c :background ,yellow :foreground ,yellow)))
 ;;;;; vundo
-    `(vundo-highlight ((,class :inherit (bold vundo-node) :foreground 
,red-intense)))
+    `(vundo-highlight ((,c :inherit (bold vundo-node) :foreground 
,red-intense)))
 ;;;;; wcheck-mode
-    `(wcheck-default-face ((,class :foreground ,red :underline t)))
+    `(wcheck-default-face ((,c :foreground ,red :underline t)))
 ;;;;; web-mode
-    `(web-mode-annotation-face ((,class :inherit web-mode-comment-face)))
-    `(web-mode-annotation-html-face ((,class :inherit web-mode-comment-face)))
-    `(web-mode-annotation-tag-face ((,class :inherit web-mode-comment-face 
:underline t)))
-    `(web-mode-block-attr-name-face ((,class :inherit 
font-lock-constant-face)))
-    `(web-mode-block-attr-value-face ((,class :inherit font-lock-type-face)))
-    `(web-mode-block-comment-face ((,class :inherit web-mode-comment-face)))
-    `(web-mode-block-control-face ((,class :inherit font-lock-builtin-face)))
-    `(web-mode-block-delimiter-face ((,class :foreground ,fg-main)))
-    `(web-mode-block-face ((,class :background ,bg-dim)))
-    `(web-mode-block-string-face ((,class :inherit web-mode-string-face)))
-    `(web-mode-bold-face ((,class :inherit bold)))
-    `(web-mode-builtin-face ((,class :inherit font-lock-builtin-face)))
-    `(web-mode-comment-face ((,class :inherit font-lock-comment-face)))
-    `(web-mode-comment-keyword-face ((,class :inherit font-lock-warning-face)))
-    `(web-mode-constant-face ((,class :inherit font-lock-constant-face)))
-    `(web-mode-css-at-rule-face ((,class :inherit font-lock-constant-face)))
-    `(web-mode-css-color-face ((,class :inherit font-lock-builtin-face)))
-    `(web-mode-css-comment-face ((,class :inherit web-mode-comment-face)))
-    `(web-mode-css-function-face ((,class :inherit font-lock-builtin-face)))
-    `(web-mode-css-priority-face ((,class :inherit font-lock-warning-face)))
-    `(web-mode-css-property-name-face ((,class :inherit 
font-lock-keyword-face)))
-    `(web-mode-css-pseudo-class-face ((,class :inherit font-lock-doc-face)))
-    `(web-mode-css-selector-face ((,class :inherit font-lock-keyword-face)))
-    `(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-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)))
-    `(web-mode-function-name-face ((,class :inherit 
font-lock-function-name-face)))
-    `(web-mode-html-attr-custom-face ((,class :inherit 
font-lock-variable-name-face)))
-    `(web-mode-html-attr-engine-face ((,class :foreground ,fg-main)))
-    `(web-mode-html-attr-equal-face ((,class :foreground ,fg-main)))
-    `(web-mode-html-attr-name-face ((,class :inherit 
font-lock-variable-name-face)))
-    `(web-mode-html-attr-value-face ((,class :inherit 
font-lock-constant-face)))
-    `(web-mode-html-entity-face ((,class :inherit 
font-lock-negation-char-face)))
-    `(web-mode-html-tag-bracket-face ((,class :foreground ,fg-dim)))
-    `(web-mode-html-tag-custom-face ((,class :inherit 
font-lock-function-name-face)))
-    `(web-mode-html-tag-face ((,class :inherit font-lock-function-name-face)))
-    `(web-mode-html-tag-namespaced-face ((,class :inherit 
font-lock-builtin-face)))
-    `(web-mode-html-tag-unclosed-face ((,class :inherit error :underline t)))
-    `(web-mode-inlay-face ((,class :background ,bg-alt)))
-    `(web-mode-italic-face ((,class :inherit italic)))
-    `(web-mode-javascript-comment-face ((,class :inherit 
web-mode-comment-face)))
-    `(web-mode-javascript-string-face ((,class :inherit web-mode-string-face)))
-    `(web-mode-json-comment-face ((,class :inherit web-mode-comment-face)))
-    `(web-mode-json-context-face ((,class :inherit font-lock-builtin-face)))
-    `(web-mode-json-key-face ((,class :foreground ,blue-nuanced-fg)))
-    `(web-mode-json-string-face ((,class :inherit web-mode-string-face)))
-    `(web-mode-jsx-depth-1-face ((,class :background ,blue-intense-bg 
:foreground ,fg-main)))
-    `(web-mode-jsx-depth-2-face ((,class :background ,blue-subtle-bg 
:foreground ,fg-main)))
-    `(web-mode-jsx-depth-3-face ((,class :background ,bg-special-cold 
:foreground ,fg-special-cold)))
-    `(web-mode-jsx-depth-4-face ((,class :background ,bg-alt :foreground 
,blue-refine-fg)))
-    `(web-mode-jsx-depth-5-face ((,class :background ,bg-alt :foreground 
,blue-nuanced-fg)))
-    `(web-mode-keyword-face ((,class :inherit font-lock-keyword-face)))
-    `(web-mode-param-name-face ((,class :inherit 
font-lock-function-name-face)))
-    `(web-mode-part-comment-face ((,class :inherit web-mode-comment-face)))
-    `(web-mode-part-face ((,class :inherit web-mode-block-face)))
-    `(web-mode-part-string-face ((,class :inherit web-mode-string-face)))
-    `(web-mode-preprocessor-face ((,class :inherit 
font-lock-preprocessor-face)))
-    `(web-mode-script-face ((,class :inherit web-mode-part-face)))
-    `(web-mode-sql-keyword-face ((,class :inherit 
font-lock-negation-char-face)))
-    `(web-mode-string-face ((,class :inherit font-lock-string-face)))
-    `(web-mode-style-face ((,class :inherit web-mode-part-face)))
-    `(web-mode-symbol-face ((,class :inherit font-lock-constant-face)))
-    `(web-mode-type-face ((,class :inherit font-lock-builtin-face)))
-    `(web-mode-underline-face ((,class :underline t)))
-    `(web-mode-variable-name-face ((,class :inherit 
font-lock-variable-name-face)))
-    `(web-mode-warning-face ((,class :inherit font-lock-warning-face)))
-    `(web-mode-whitespace-face ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
+    `(web-mode-annotation-face ((,c :inherit web-mode-comment-face)))
+    `(web-mode-annotation-html-face ((,c :inherit web-mode-comment-face)))
+    `(web-mode-annotation-tag-face ((,c :inherit web-mode-comment-face 
:underline t)))
+    `(web-mode-block-attr-name-face ((,c :inherit font-lock-constant-face)))
+    `(web-mode-block-attr-value-face ((,c :inherit font-lock-type-face)))
+    `(web-mode-block-comment-face ((,c :inherit web-mode-comment-face)))
+    `(web-mode-block-control-face ((,c :inherit font-lock-builtin-face)))
+    `(web-mode-block-delimiter-face ((,c :foreground ,fg-main)))
+    `(web-mode-block-face ((,c :background ,bg-dim)))
+    `(web-mode-block-string-face ((,c :inherit web-mode-string-face)))
+    `(web-mode-bold-face ((,c :inherit bold)))
+    `(web-mode-builtin-face ((,c :inherit font-lock-builtin-face)))
+    `(web-mode-comment-face ((,c :inherit font-lock-comment-face)))
+    `(web-mode-comment-keyword-face ((,c :inherit font-lock-warning-face)))
+    `(web-mode-constant-face ((,c :inherit font-lock-constant-face)))
+    `(web-mode-css-at-rule-face ((,c :inherit font-lock-constant-face)))
+    `(web-mode-css-color-face ((,c :inherit font-lock-builtin-face)))
+    `(web-mode-css-comment-face ((,c :inherit web-mode-comment-face)))
+    `(web-mode-css-function-face ((,c :inherit font-lock-builtin-face)))
+    `(web-mode-css-priority-face ((,c :inherit font-lock-warning-face)))
+    `(web-mode-css-property-name-face ((,c :inherit font-lock-keyword-face)))
+    `(web-mode-css-pseudo-class-face ((,c :inherit font-lock-doc-face)))
+    `(web-mode-css-selector-face ((,c :inherit font-lock-keyword-face)))
+    `(web-mode-css-string-face ((,c :inherit web-mode-string-face)))
+    `(web-mode-css-variable-face ((,c :inherit font-lock-variable-name-face)))
+    `(web-mode-current-column-highlight-face ((,c :background ,bg-inactive)))
+    `(web-mode-current-element-highlight-face ((,c :inherit 
modus-themes-cyan-subtle)))
+    `(web-mode-doctype-face ((,c :inherit font-lock-doc-face)))
+    `(web-mode-error-face ((,c :inherit modus-themes-intense-red)))
+    `(web-mode-filter-face ((,c :inherit font-lock-function-name-face)))
+    `(web-mode-folded-face ((,c :underline t)))
+    `(web-mode-function-call-face ((,c :inherit font-lock-function-name-face)))
+    `(web-mode-function-name-face ((,c :inherit font-lock-function-name-face)))
+    `(web-mode-html-attr-custom-face ((,c :inherit 
font-lock-variable-name-face)))
+    `(web-mode-html-attr-engine-face ((,c :foreground ,fg-main)))
+    `(web-mode-html-attr-equal-face ((,c :foreground ,fg-main)))
+    `(web-mode-html-attr-name-face ((,c :inherit 
font-lock-variable-name-face)))
+    `(web-mode-html-attr-value-face ((,c :inherit font-lock-constant-face)))
+    `(web-mode-html-entity-face ((,c :inherit font-lock-negation-char-face)))
+    `(web-mode-html-tag-bracket-face ((,c :foreground ,fg-dim)))
+    `(web-mode-html-tag-custom-face ((,c :inherit 
font-lock-function-name-face)))
+    `(web-mode-html-tag-face ((,c :inherit font-lock-function-name-face)))
+    `(web-mode-html-tag-namespaced-face ((,c :inherit font-lock-builtin-face)))
+    `(web-mode-html-tag-unclosed-face ((,c :inherit error :underline t)))
+    `(web-mode-inlay-face ((,c :background ,bg-inactive)))
+    `(web-mode-italic-face ((,c :inherit italic)))
+    `(web-mode-javascript-comment-face ((,c :inherit web-mode-comment-face)))
+    `(web-mode-javascript-string-face ((,c :inherit web-mode-string-face)))
+    `(web-mode-json-comment-face ((,c :inherit web-mode-comment-face)))
+    `(web-mode-json-context-face ((,c :inherit font-lock-builtin-face)))
+    `(web-mode-json-key-face ((,c :foreground ,blue-faint)))
+    `(web-mode-json-string-face ((,c :inherit web-mode-string-face)))
+    `(web-mode-keyword-face ((,c :inherit font-lock-keyword-face)))
+    `(web-mode-param-name-face ((,c :inherit font-lock-function-name-face)))
+    `(web-mode-part-comment-face ((,c :inherit web-mode-comment-face)))
+    `(web-mode-part-face ((,c :inherit web-mode-block-face)))
+    `(web-mode-part-string-face ((,c :inherit web-mode-string-face)))
+    `(web-mode-preprocessor-face ((,c :inherit font-lock-preprocessor-face)))
+    `(web-mode-script-face ((,c :inherit web-mode-part-face)))
+    `(web-mode-sql-keyword-face ((,c :inherit font-lock-negation-char-face)))
+    `(web-mode-string-face ((,c :inherit font-lock-string-face)))
+    `(web-mode-style-face ((,c :inherit web-mode-part-face)))
+    `(web-mode-symbol-face ((,c :inherit font-lock-constant-face)))
+    `(web-mode-type-face ((,c :inherit font-lock-builtin-face)))
+    `(web-mode-underline-face ((,c :underline t)))
+    `(web-mode-variable-name-face ((,c :inherit font-lock-variable-name-face)))
+    `(web-mode-warning-face ((,c :inherit font-lock-warning-face)))
+    `(web-mode-whitespace-face ((,c :background ,bg-inactive)))
 ;;;;; wgrep
-    `(wgrep-delete-face ((,class :inherit warning)))
-    `(wgrep-done-face ((,class :inherit success)))
-    `(wgrep-face ((,class :inherit bold)))
-    `(wgrep-file-face ((,class :foreground ,fg-special-warm)))
-    `(wgrep-reject-face ((,class :inherit error)))
+    `(wgrep-delete-face ((,c :inherit warning)))
+    `(wgrep-done-face ((,c :inherit success)))
+    `(wgrep-face ((,c :inherit bold)))
+    `(wgrep-file-face ((,c :foreground ,fg-alt)))
+    `(wgrep-reject-face ((,c :inherit error)))
 ;;;;; which-function-mode
-    `(which-func ((,class :foreground ,magenta-active)))
+    `(which-func ((,c :inherit bold :foreground ,modeline-info)))
 ;;;;; 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 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 ,red-alt)))
+    `(which-key-command-description-face ((,c :foreground ,fg-main)))
+    `(which-key-group-description-face ((,c :foreground ,err)))
+    `(which-key-highlighted-command-face ((,c :foreground ,warning :underline 
t)))
+    `(which-key-key-face ((,c :inherit modus-themes-key-binding)))
+    `(which-key-local-map-description-face ((,c :foreground ,fg-main)))
+    `(which-key-note-face ((,c :inherit shadow)))
+    `(which-key-separator-face ((,c :inherit shadow)))
+    `(which-key-special-key-face ((,c :inherit error)))
 ;;;;; whitespace-mode
-    `(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 :inherit modus-themes-subtle-yellow)))
-    `(whitespace-newline ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
-    `(whitespace-space ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
-    `(whitespace-space-after-tab ((,class :inherit 
modus-themes-subtle-magenta)))
-    `(whitespace-space-before-tab ((,class :inherit modus-themes-subtle-cyan)))
-    `(whitespace-tab ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
-    `(whitespace-trailing ((,class :inherit modus-themes-intense-red)))
+    `(whitespace-big-indent ((,c :inherit modus-themes-subtle-red)))
+    `(whitespace-empty ((,c :inherit modus-themes-intense-magenta)))
+    `(whitespace-hspace ((,c :background ,bg-dim :foreground ,fg-dim)))
+    `(whitespace-indentation ((,c :background ,bg-dim :foreground ,fg-dim)))
+    `(whitespace-line ((,c :inherit modus-themes-subtle-yellow)))
+    `(whitespace-newline ((,c :background ,bg-dim :foreground ,fg-dim)))
+    `(whitespace-space ((,c :background ,bg-dim :foreground ,fg-dim)))
+    `(whitespace-space-after-tab ((,c :inherit modus-themes-subtle-magenta)))
+    `(whitespace-space-before-tab ((,c :inherit modus-themes-subtle-cyan)))
+    `(whitespace-tab ((,c :background ,bg-dim :foreground ,fg-dim)))
+    `(whitespace-trailing ((,c :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-themes-bold :foreground 
,cyan-active)))
+    `(window-divider ((,c :foreground ,border)))
+    `(window-divider-first-pixel ((,c :foreground ,bg-inactive)))
+    `(window-divider-last-pixel ((,c :foreground ,bg-inactive)))
+;;;;; widget
+    `(widget-button ((,c :inherit bold :foreground ,fg-link)))
+    `(widget-button-pressed ((,c :inherit widget-buton :foreground 
,fg-link-visited)))
+    `(widget-documentation ((,c :inherit font-lock-doc-face)))
+    `(widget-field ((,c :background ,bg-inactive :foreground ,fg-main :extend 
nil)))
+    `(widget-inactive ((,c :background ,bg-button-inactive :foreground 
,fg-button-inactive)))
+    `(widget-single-line-field ((,c :inherit widget-field)))
 ;;;;; writegood-mode
-    `(writegood-duplicates-face ((,class :background ,bg-alt :foreground 
,red-alt :underline t)))
-    `(writegood-passive-voice-face ((,class :inherit 
modus-themes-lang-warning)))
-    `(writegood-weasels-face ((,class :inherit modus-themes-lang-error)))
+    `(writegood-duplicates-face ((,c :inherit modus-themes-lang-error)))
+    `(writegood-passive-voice-face ((,c :inherit modus-themes-lang-warning)))
+    `(writegood-weasels-face ((,c :inherit modus-themes-lang-warning)))
 ;;;;; woman
-    `(woman-addition ((,class :foreground ,magenta-alt-other)))
-    `(woman-bold ((,class :inherit bold :foreground ,magenta-alt)))
-    `(woman-italic ((,class :inherit italic :foreground ,cyan)))
-    `(woman-unknown ((,class :foreground ,green-alt)))
+    `(woman-addition ((,c :foreground ,accent-2)))
+    `(woman-bold ((,c :inherit bold :foreground ,accent-0)))
+    `(woman-italic ((,c :inherit italic :foreground ,accent-1)))
+    `(woman-unknown ((,c :foreground ,accent-3)))
 ;;;;; xah-elisp-mode
-    `(xah-elisp-at-symbol ((,class :inherit font-lock-warning-face)))
-    `(xah-elisp-cap-variable ((,class :inherit font-lock-preprocessor-face)))
-    `(xah-elisp-command-face ((,class :inherit font-lock-type-face)))
-    `(xah-elisp-dollar-symbol ((,class :inherit font-lock-variable-name-face)))
-;;;;; xref
-    `(xref-file-header ((,class :inherit bold :foreground ,fg-special-cold)))
-    `(xref-line-number ((,class :inherit shadow)))
-    `(xref-match ((,class :inherit match)))
+    `(xah-elisp-at-symbol ((,c :inherit font-lock-warning-face)))
+    `(xah-elisp-cap-variable ((,c :inherit font-lock-preprocessor-face)))
+    `(xah-elisp-command-face ((,c :inherit font-lock-type-face)))
+    `(xah-elisp-dollar-symbol ((,c :inherit font-lock-variable-name-face)))
 ;;;;; yaml-mode
-    `(yaml-tab-face ((,class :inherit modus-themes-intense-red)))
+    `(yaml-tab-face ((,c :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 :foreground ,fg-main)))
-    `(ztreep-diff-model-add-face ((,class :inherit modus-themes-grue)))
-    `(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 :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)))
-    `(ztreep-node-face ((,class :foreground ,fg-main))))
+    `(yas-field-highlight-face ((,c :inherit highlight))))
   "Face specs for use with `modus-themes-theme'.")
 
 (defconst modus-themes-custom-variables
@@ -7477,93 +3677,161 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;; ansi-colors
     `(ansi-color-faces-vector [default bold shadow italic underline success 
warning error])
     `(ansi-color-names-vector ["gray35" ,red ,green ,yellow ,blue ,magenta 
,cyan "gray65"])
-;;;; awesome-tray
-    `(awesome-tray-mode-line-active-color ,blue)
-    `(awesome-tray-mode-line-inactive-color ,bg-active)
 ;;;; chart
     `(chart-face-color-list
-      '( ,red-graph-0-bg ,green-graph-0-bg ,yellow-graph-0-bg ,blue-graph-0-bg 
,magenta-graph-0-bg ,cyan-graph-0-bg
-         ,red-graph-1-bg ,green-graph-1-bg ,yellow-graph-1-bg ,blue-graph-1-bg 
,magenta-graph-1-bg ,cyan-graph-1-bg))
+      '( ,bg-graph-red-0 ,bg-graph-green-0 ,bg-graph-yellow-0 ,bg-graph-blue-0 
,bg-graph-magenta-0 ,bg-graph-cyan-0
+         ,bg-graph-red-1 ,bg-graph-green-1 ,bg-graph-yellow-1 ,bg-graph-blue-1 
,bg-graph-magenta-1 ,bg-graph-cyan-1))
 ;;;; exwm
-    `(exwm-floating-border-color ,fg-window-divider-inner)
+    `(exwm-floating-border-color ,border)
 ;;;; flymake fringe indicators
-    `(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))
+    `(flymake-error-bitmap '(flymake-double-exclamation-mark 
modus-themes-intense-red))
+    `(flymake-warning-bitmap '(exclamation-mark modus-themes-intense-yellow))
+    `(flymake-note-bitmap '(exclamation-mark modus-themes-intense-cyan))
 ;;;; highlight-changes
     `(highlight-changes-colors nil)
     `(highlight-changes-face-list '(success warning error bold bold-italic))
 ;;;; ibuffer
     `(ibuffer-deletion-face 'modus-themes-mark-del)
-    `(ibuffer-filter-group-name-face 'modus-themes-pseudo-header)
+    `(ibuffer-filter-group-name-face 'bold)
     `(ibuffer-marked-face 'modus-themes-mark-sel)
     `(ibuffer-title-face 'default)
 ;;;; hl-todo
     `(hl-todo-keyword-faces
-      '(("HOLD" . ,yellow-alt)
-        ("TODO" . ,magenta)
-        ("NEXT" . ,magenta-alt-other)
-        ("THEM" . ,magenta-alt)
-        ("PROG" . ,cyan)
-        ("OKAY" . ,cyan-alt)
-        ("DONT" . ,green-alt)
-        ("FAIL" . ,red)
-        ("BUG" . ,red)
-        ("DONE" . ,green)
-        ("NOTE" . ,yellow-alt-other)
-        ("KLUDGE" . ,yellow)
-        ("HACK" . ,yellow)
-        ("TEMP" . ,red-nuanced-fg)
-        ("FIXME" . ,red-alt-other)
-        ("XXX+" . ,red-alt)
-        ("REVIEW" . ,cyan-alt-other)
-        ("DEPRECATED" . ,blue-nuanced-fg)))
-;;;; mini-modeline
-    `(mini-modeline-face-attr '(:background unspecified))
+      '(("HOLD" . ,warning)
+        ("TODO" . ,err)
+        ("NEXT" . ,fg-alt)
+        ("THEM" . ,fg-alt)
+        ("PROG" . ,info)
+        ("OKAY" . ,info)
+        ("DONT" . ,warning)
+        ("FAIL" . ,err)
+        ("BUG" . ,err)
+        ("DONE" . ,info)
+        ("NOTE" . ,warning)
+        ("KLUDGE" . ,warning)
+        ("HACK" . ,warning)
+        ("TEMP" . ,warning)
+        ("FIXME" . ,err)
+        ("XXX+" . ,err)
+        ("REVIEW" . ,info)
+        ("DEPRECATED" . ,info)))
 ;;;; pdf-tools
-    `(pdf-view-midnight-colors
-      '(,fg-main . ,bg-dim))
-;;;; wid-edit
-    `(widget-link-prefix ,(if (memq 'all-buttons modus-themes-box-buttons)
-                              " "
-                            "["))
-    `(widget-link-suffix ,(if (memq 'all-buttons modus-themes-box-buttons)
-                              " "
-                            "]"))
-    `(widget-mouse-face '(highlight widget-button))
-    `(widget-push-button-prefix ,(if (memq 'all-buttons 
modus-themes-box-buttons)
-                                     " "
-                                   "["))
-    `(widget-push-button-suffix ,(if (memq 'all-buttons 
modus-themes-box-buttons)
-                                     " "
-                                   "]"))
-;;;; xterm-color
-    `(xterm-color-names ["black" ,red ,green ,yellow ,blue ,magenta ,cyan 
"gray65"])
-    `(xterm-color-names-bright ["gray35" ,red-alt ,green-alt ,yellow-alt 
,blue-alt ,magenta-alt ,cyan-alt "white"])
+    `(pdf-view-midnight-colors '(,fg-main . ,bg-dim))
+;;;; rcirc-color
+    `(rcirc-colors
+      '(modus-themes-fg-red
+        modus-themes-fg-green
+        modus-themes-fg-blue
+        modus-themes-fg-yellow
+        modus-themes-fg-magenta
+        modus-themes-fg-cyan
+        modus-themes-fg-red-warmer
+        modus-themes-fg-green-warmer
+        modus-themes-fg-blue-warmer
+        modus-themes-fg-yellow-warmer
+        modus-themes-fg-magenta-warmer
+        modus-themes-fg-cyan-warmer
+        modus-themes-fg-red-cooler
+        modus-themes-fg-green-cooler
+        modus-themes-fg-blue-cooler
+        modus-themes-fg-yellow-cooler
+        modus-themes-fg-magenta-cooler
+        modus-themes-fg-cyan-cooler
+        modus-themes-fg-red-faint
+        modus-themes-fg-green-faint
+        modus-themes-fg-blue-faint
+        modus-themes-fg-yellow-faint
+        modus-themes-fg-magenta-faint
+        modus-themes-fg-cyan-faint
+        modus-themes-fg-red-intense
+        modus-themes-fg-green-intense
+        modus-themes-fg-blue-intense
+        modus-themes-fg-yellow-intense
+        modus-themes-fg-magenta-intense
+        modus-themes-fg-cyan-intense))
+;;;; org-src-block-faces
     (if (or (eq modus-themes-org-blocks 'tinted-background)
             (eq modus-themes-org-blocks 'rainbow))
         `(org-src-block-faces
-          `(("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)))
+          `(("emacs-lisp" (:inherit modus-themes-subtle-magenta :extend t))
+            ("elisp" (:inherit modus-themes-subtle-magenta :extend t))
+            ("clojure" (:inherit modus-themes-subtle-magenta :extend t))
+            ("clojurescript" (:inherit modus-themes-subtle-magenta :extend t))
+            ("c" (:inherit modus-themes-subtle-blue :extend t))
+            ("c++" (:inherit modus-themes-subtle-blue :extend t))
+            ("sh" (:inherit modus-themes-subtle-green :extend t))
+            ("shell" (:inherit modus-themes-subtle-green :extend t))
+            ("html" (:inherit modus-themes-subtle-yellow :extend t))
+            ("xml" (:inherit modus-themes-subtle-yellow :extend t))
+            ("css" (:inherit modus-themes-subtle-red :extend t))
+            ("scss" (:inherit modus-themes-subtle-red :extend t))
+            ("python" (:inherit modus-themes-subtle-green :extend t))
+            ("ipython" (:inherit modus-themes-subtle-magenta :extend t))
+            ("r" (:inherit modus-themes-subtle-cyan :extend t))
+            ("yaml" (:inherit modus-themes-subtle-cyan :extend t))
+            ("conf" (:inherit modus-themes-subtle-cyan :extend t))
+            ("docker" (:inherit modus-themes-subtle-cyan :extend t))))
       `(org-src-block-faces '())))
   "Custom variables for `modus-themes-theme'.")
 
+;;; Theme macros
+
+;;;; Instantiate a Modus theme
+
+;;;###autoload
+(defmacro modus-themes-theme (name palette &optional overrides)
+  "Bind NAME's color PALETTE around face specs and variables.
+Face specifications are passed to `custom-theme-set-faces'.
+While variables are handled by `custom-theme-set-variables'.
+Those are stored in `modus-themes-faces' and
+`modus-themes-custom-variables' respectively.
+
+Optional OVERRIDES are appended to PALETTE, overriding
+corresponding entries."
+  (declare (indent 0))
+  (let ((sym (gensym))
+        (colors (mapcar #'car (symbol-value palette))))
+    `(let* ((c '((class color) (min-colors 256)))
+            (,sym (append ,overrides modus-themes-common-palette-overrides 
,palette))
+            ,@(mapcar (lambda (color)
+                        (list color
+                              `(let* ((value (car (alist-get ',color ,sym))))
+                                 (if (or (stringp value)
+                                         (eq value 'unspecified))
+                                     value
+                                   (car (alist-get value ,sym))))))
+                      colors))
+       (ignore c ,@colors)            ; Silence unused variable warnings
+       (custom-theme-set-faces ',name ,@modus-themes-faces)
+       (custom-theme-set-variables ',name ,@modus-themes-custom-variables))))
+
+;;;; Use theme colors
+
+(defmacro modus-themes-with-colors (&rest body)
+  "Evaluate BODY with colors from current palette bound."
+  (declare (indent 0))
+  (let* ((sym (gensym))
+         ;; NOTE 2022-08-23: We just give it a sample palette at this
+         ;; stage.  It only needs to collect each car.  Then we
+         ;; instantiate the actual theme's palette.  We have to do this
+         ;; otherwise the macro does not work properly when called from
+         ;; inside a function.
+         (colors (mapcar #'car (modus-themes--current-theme-palette))))
+    `(let* ((c '((class color) (min-colors 256)))
+            (,sym (modus-themes--current-theme-palette :overrides))
+            ,@(mapcar (lambda (color)
+                        (list color
+                              `(let* ((value (car (alist-get ',color ,sym))))
+                                 (if (or (stringp value)
+                                         (eq value 'unspecified))
+                                     value
+                                   (car (alist-get value ,sym))))))
+                      colors))
+       (ignore c ,@colors)            ; Silence unused variable warnings
+       ,@body)))
+
+;;;; Add themes from package to path
+
 ;;;###autoload
 (when load-file-name
   (let ((dir (file-name-directory load-file-name)))
diff --git a/etc/themes/modus-vivendi-deuteranopia-theme.el 
b/etc/themes/modus-vivendi-deuteranopia-theme.el
new file mode 100644
index 00000000000..2c3ecd72a03
--- /dev/null
+++ b/etc/themes/modus-vivendi-deuteranopia-theme.el
@@ -0,0 +1,419 @@
+;;; modus-vivendi-deuteranopia-theme.el --- Elegant, highly legible and 
customizable dark theme -*- lexical-binding:t -*-
+
+;; Copyright (C) 2019-2023  Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+;; URL: https://git.sr.ht/~protesilaos/modus-themes
+;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
+
+;; 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:
+;;
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA).  Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
+
+;;; Code:
+
+
+
+(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))
+
+  (deftheme modus-vivendi-deuteranopia
+    "Elegant, highly legible and customizable dark theme.
+This variant is optimized for users with red-green color
+deficiency (deuteranopia).  It conforms with the highest
+legibility standard for color contrast between background and
+foreground in any given piece of text, which corresponds to a
+minimum contrast in relative luminance of 7:1 (WCAG AAA
+standard).")
+
+  (defconst modus-vivendi-deuteranopia-palette
+    '(
+;;; Basic values
+
+      (bg-main          "#000000")
+      (bg-dim           "#1e1e1e")
+      (fg-main          "#ffffff")
+      (fg-dim           "#989898")
+      (fg-alt           "#c6daff")
+      (bg-active        "#535353")
+      (bg-inactive      "#303030")
+      (border           "#646464")
+
+;;; Common accent foregrounds
+
+      (red             "#ff5f59")
+      (red-warmer      "#ff6b55")
+      (red-cooler      "#ff7f9f")
+      (red-faint       "#ff9580")
+      (red-intense     "#ff5f5f")
+      (green           "#44bc44")
+      (green-warmer    "#70b900")
+      (green-cooler    "#00c06f")
+      (green-faint     "#88ca9f")
+      (green-intense   "#44df44")
+      (yellow          "#d0bc00")
+      (yellow-warmer   "#fec43f")
+      (yellow-cooler   "#dfaf7a")
+      (yellow-faint    "#d2b580")
+      (yellow-intense  "#efef00")
+      (blue            "#2fafff")
+      (blue-warmer     "#79a8ff")
+      (blue-cooler     "#00bcff")
+      (blue-faint      "#82b0ec")
+      (blue-intense    "#338fff")
+      (magenta         "#feacd0")
+      (magenta-warmer  "#f78fe7")
+      (magenta-cooler  "#b6a0ff")
+      (magenta-faint   "#caa6df")
+      (magenta-intense "#ff66ff")
+      (cyan            "#00d3d0")
+      (cyan-warmer     "#4ae2f0")
+      (cyan-cooler     "#6ae4b9")
+      (cyan-faint      "#9ac8e0")
+      (cyan-intense    "#00eff0")
+
+;;; Uncommon accent foregrounds
+
+      (rust       "#db7b5f")
+      (gold       "#c0965b")
+      (olive      "#9cbd6f")
+      (slate      "#76afbf")
+      (indigo     "#9099d9")
+      (maroon     "#cf7fa7")
+      (pink       "#d09dc0")
+
+;;; Common accent backgrounds
+
+      (bg-red-intense     "#9d1f1f")
+      (bg-green-intense   "#2f822f")
+      (bg-yellow-intense  "#7a6100")
+      (bg-blue-intense    "#1640b0")
+      (bg-magenta-intense "#7030af")
+      (bg-cyan-intense    "#2266ae")
+
+      (bg-red-subtle      "#620f2a")
+      (bg-green-subtle    "#00422a")
+      (bg-yellow-subtle   "#4a4000")
+      (bg-blue-subtle     "#242679")
+      (bg-magenta-subtle  "#552f5f")
+      (bg-cyan-subtle     "#004065")
+
+      (bg-red-nuanced     "#2c0614")
+      (bg-green-nuanced   "#001904")
+      (bg-yellow-nuanced  "#221000")
+      (bg-blue-nuanced    "#0f0e39")
+      (bg-magenta-nuanced "#230631")
+      (bg-cyan-nuanced    "#041529")
+
+;;; Uncommon accent backgrounds
+
+      (bg-ochre    "#442c2f")
+      (bg-lavender "#38325c")
+      (bg-sage     "#0f3d30")
+
+;;; Graphs
+
+      (bg-graph-red-0     "#705c3c")
+      (bg-graph-red-1     "#504420")
+      (bg-graph-green-0   "#4f666f")
+      (bg-graph-green-1   "#204840")
+      (bg-graph-yellow-0  "#c1c00a")
+      (bg-graph-yellow-1  "#6f6f00")
+      (bg-graph-blue-0    "#2fafef")
+      (bg-graph-blue-1    "#1f2f8f")
+      (bg-graph-magenta-0 "#7f7f8e")
+      (bg-graph-magenta-1 "#4f4f5f")
+      (bg-graph-cyan-0    "#376f9a")
+      (bg-graph-cyan-1    "#00404f")
+
+;;; Special purpose
+
+      (bg-completion       "#2f447f")
+      (bg-hover            "#004f70")
+      (bg-hover-secondary  "#654a39")
+      (bg-hl-line          "#2f3849")
+      (bg-region           "#5a5a5a")
+      (fg-region           "#ffffff")
+
+      (bg-char-0 "#0050af")
+      (bg-char-1 "#7f1f7f")
+      (bg-char-2 "#625a00")
+
+      (bg-mode-line-active        "#2a2a6a")
+      (fg-mode-line-active        "#f0f0f0")
+      (border-mode-line-active    "#8080a7")
+      (bg-mode-line-inactive      "#2d2d2d")
+      (fg-mode-line-inactive      "#969696")
+      (border-mode-line-inactive  "#606060")
+
+      (modeline-err     "#e5bf00")
+      (modeline-warning "#c0cf35")
+      (modeline-info    "#abeadf")
+
+      (bg-tab-bar      "#313131")
+      (bg-tab-current  "#000000")
+      (bg-tab-other    "#545454")
+
+;;; Diffs
+
+      (bg-added           "#003066")
+      (bg-added-faint     "#001a4f")
+      (bg-added-refine    "#0f4a77")
+      (bg-added-intense   "#0f4fbf")
+      (fg-added           "#c4d5ff")
+      (fg-added-intense   "#a0afff")
+
+      (bg-changed         "#2f123f")
+      (bg-changed-faint   "#1f022f")
+      (bg-changed-refine  "#3f325f")
+      (bg-changed-intense "#7f42af")
+      (fg-changed         "#e3cfff")
+      (fg-changed-intense "#c0a4ff")
+
+      (bg-removed         "#3d3d00")
+      (bg-removed-faint   "#281f00")
+      (bg-removed-refine  "#515100")
+      (bg-removed-intense "#dfd23a")
+      (fg-removed         "#d4d48f")
+      (fg-removed-intense "#c0b05f")
+
+;;; Paren match
+
+      (bg-paren-match        "#2f7f9f")
+      (bg-paren-expression   "#453040")
+      (underline-paren-match unspecified)
+
+;;; Mappings
+
+;;;; General mappings
+
+      (fringe bg-dim)
+      (cursor yellow-intense)
+
+      (keybind blue-cooler)
+      (name blue-cooler)
+      (identifier yellow-faint)
+
+      (err yellow-warmer)
+      (warning yellow-cooler)
+      (info blue)
+
+      (underline-err yellow-intense)
+      (underline-warning magenta-faint)
+      (underline-note cyan)
+
+;;;; Code mappings
+
+      (builtin magenta-warmer)
+      (comment yellow-cooler)
+      (constant blue-cooler)
+      (docstring cyan-faint)
+      (docmarkup magenta-faint)
+      (fnname magenta)
+      (keyword magenta-cooler)
+      (preprocessor red-cooler)
+      (string blue-warmer)
+      (type cyan-cooler)
+      (variable cyan)
+      (rx-construct yellow-cooler)
+      (rx-backslash blue-cooler)
+
+;;;; Accent mappings
+
+      (accent-0 blue-cooler)
+      (accent-1 yellow)
+      (accent-2 cyan-cooler)
+      (accent-3 magenta-warmer)
+
+;;;; Button mappings
+
+      (fg-button-active fg-main)
+      (fg-button-inactive fg-dim)
+      (bg-button-active bg-active)
+      (bg-button-inactive bg-dim)
+
+;;;; Completion mappings
+
+      (fg-completion-match-0 blue-cooler)
+      (fg-completion-match-1 yellow)
+      (fg-completion-match-2 cyan-cooler)
+      (fg-completion-match-3 magenta-warmer)
+      (bg-completion-match-0 unspecified)
+      (bg-completion-match-1 unspecified)
+      (bg-completion-match-2 unspecified)
+      (bg-completion-match-3 unspecified)
+
+;;;; Date mappings
+
+      (date-common cyan)
+      (date-deadline yellow-warmer)
+      (date-event fg-alt)
+      (date-holiday yellow-warmer)
+      (date-now blue-faint)
+      (date-scheduled yellow-cooler)
+      (date-weekday cyan)
+      (date-weekend yellow-faint)
+
+;;;; Line number mappings
+
+      (fg-line-number-inactive fg-dim)
+      (fg-line-number-active fg-main)
+      (bg-line-number-inactive bg-dim)
+      (bg-line-number-active bg-active)
+
+;;;; Link mappings
+
+      (fg-link blue-warmer)
+      (bg-link unspecified)
+      (underline-link blue-warmer)
+
+      (fg-link-symbolic cyan)
+      (bg-link-symbolic unspecified)
+      (underline-link-symbolic cyan)
+
+      (fg-link-visited yellow-faint)
+      (bg-link-visited unspecified)
+      (underline-link-visited yellow-faint)
+
+;;;; Mail mappings
+
+      (mail-cite-0 blue-warmer)
+      (mail-cite-1 yellow-cooler)
+      (mail-cite-2 blue-cooler)
+      (mail-cite-3 yellow)
+      (mail-part blue)
+      (mail-recipient blue)
+      (mail-subject yellow-warmer)
+      (mail-other cyan-faint)
+
+;;;; Prompt mappings
+
+      (fg-prompt blue)
+      (bg-prompt unspecified)
+
+;;;; Prose mappings
+
+      (prose-block fg-dim)
+      (prose-code cyan-cooler)
+      (prose-done blue)
+      (prose-macro magenta-cooler)
+      (prose-metadata fg-dim)
+      (prose-metadata-value fg-alt)
+      (prose-table fg-alt)
+      (prose-tag magenta-faint)
+      (prose-todo yellow-warmer)
+      (prose-verbatim magenta-warmer)
+
+;;;; Rainbow mappings
+
+      (rainbow-0 yellow-warmer)
+      (rainbow-1 blue)
+      (rainbow-2 yellow-cooler)
+      (rainbow-3 blue-warmer)
+      (rainbow-4 yellow)
+      (rainbow-5 cyan-warmer)
+      (rainbow-6 yellow-faint)
+      (rainbow-7 blue-faint)
+      (rainbow-8 magenta-faint)
+
+;;;; Heading mappings
+
+      (fg-heading-0 cyan-cooler)
+      (fg-heading-1 fg-main)
+      (fg-heading-2 yellow-faint)
+      (fg-heading-3 blue-faint)
+      (fg-heading-4 magenta)
+      (fg-heading-5 green-faint)
+      (fg-heading-6 red-faint)
+      (fg-heading-7 cyan-faint)
+      (fg-heading-8 fg-dim)
+
+      (bg-heading-0 unspecified)
+      (bg-heading-1 unspecified)
+      (bg-heading-2 unspecified)
+      (bg-heading-3 unspecified)
+      (bg-heading-4 unspecified)
+      (bg-heading-5 unspecified)
+      (bg-heading-6 unspecified)
+      (bg-heading-7 unspecified)
+      (bg-heading-8 unspecified)
+
+      (overline-heading-0 unspecified)
+      (overline-heading-1 unspecified)
+      (overline-heading-2 unspecified)
+      (overline-heading-3 unspecified)
+      (overline-heading-4 unspecified)
+      (overline-heading-5 unspecified)
+      (overline-heading-6 unspecified)
+      (overline-heading-7 unspecified)
+      (overline-heading-8 unspecified))
+    "The entire palette of the `modus-vivendi-deuteranopia' theme.
+
+Named colors have the form (COLOR-NAME HEX-VALUE) with the former
+as a symbol and the latter as a string.
+
+Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
+with both as symbols.  The latter is a named color that already
+exists in the palette and is associated with a HEX-VALUE.
+
+Semantic color mappings cannot be recursive: their value must be
+either COLOR-NAME or HEX-VALUE.")
+
+  (defcustom modus-vivendi-deuteranopia-palette-overrides nil
+    "Overrides for `modus-vivendi-deuteranopia-palette'.
+
+Mirror the elements of the aforementioned palette, overriding
+their value.
+
+For overrides that are shared across all of the Modus themes,
+refer to `modus-themes-common-palette-overrides'.
+
+Theme-specific overrides take precedence over shared overrides.
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red.  Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+    :group 'modus-themes
+    :package-version '(modus-themes . "4.0.0")
+    :version "30.1"
+    :type '(repeat (list symbol (choice symbol string)))
+    :set #'modus-themes--set-option
+    :initialize #'custom-initialize-default
+    :link '(info-link "(modus-themes) Palette overrides"))
+
+  (modus-themes-theme modus-vivendi-deuteranopia
+                      modus-vivendi-deuteranopia-palette
+                      modus-vivendi-deuteranopia-palette-overrides)
+
+  (provide-theme 'modus-vivendi-deuteranopia))
+
+;;;###theme-autoload
+(put 'modus-vivendi-deuteranopia 'theme-properties '(:background-mode dark 
:kind color-scheme :family modus))
+
+;;; modus-vivendi-deuteranopia-theme.el ends here
diff --git a/etc/themes/modus-vivendi-theme.el 
b/etc/themes/modus-vivendi-theme.el
index aefef540a13..d2ec3fd2753 100644
--- a/etc/themes/modus-vivendi-theme.el
+++ b/etc/themes/modus-vivendi-theme.el
@@ -1,14 +1,11 @@
 ;;; modus-vivendi-theme.el --- Elegant, highly legible and customizable dark 
theme -*- lexical-binding:t -*-
 
-;; Copyright (C) 2019-2022  Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023  Free Software Foundation, Inc.
 
 ;; Author: Protesilaos Stavrou <info@protesilaos.com>
 ;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
 ;; URL: https://git.sr.ht/~protesilaos/modus-themes
 ;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
-;; Version: 3.0.0
-;; Package-Requires: ((emacs "27.1"))
-;; Keywords: faces, theme, accessibility
 
 ;; This file is part of GNU Emacs.
 
@@ -27,26 +24,11 @@
 
 ;;; Commentary:
 ;;
-;; Modus Vivendi is the dark variant of the Modus themes (Modus Operandi
-;; is the light one).  The themes are designed for color-contrast
-;; accessibility.  More specifically:
-;;
-;;     1. Provide a consistent minimum contrast ratio between background
-;;     and foreground values of 7:1 or higher.  This meets the highest
-;;     such accessibility criterion per the guidelines of the Worldwide
-;;     Web Consortium's Working Group on Accessibility (WCAG AAA
-;;     standard).
-;;
-;;     2. Offer as close to full face coverage as possible.  The list is
-;;     already quite long, with more additions to follow as part of the
-;;     ongoing development process.
-;;
-;; For a complete view of the project, also refer to the following files
-;; (should be distributed in the same repository/directory as the
-;; current item):
-;;
-;; - modus-themes.el            (Main code shared between the themes)
-;; - modus-operandi-theme.el    (Light theme)
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA).  Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
 
 ;;; Code:
 
@@ -67,7 +49,366 @@ between background and foreground in any given piece of 
text,
 which corresponds to a minimum contrast in relative luminance of
 7:1 (WCAG AAA standard).")
 
-  (modus-themes-theme modus-vivendi)
+  (defconst modus-vivendi-palette
+    '(
+;;; Basic values
+
+      (bg-main          "#000000")
+      (bg-dim           "#1e1e1e")
+      (fg-main          "#ffffff")
+      (fg-dim           "#989898")
+      (fg-alt           "#c6daff")
+      (bg-active        "#535353")
+      (bg-inactive      "#303030")
+      (border           "#646464")
+
+;;; Common accent foregrounds
+
+      (red             "#ff5f59")
+      (red-warmer      "#ff6b55")
+      (red-cooler      "#ff7f9f")
+      (red-faint       "#ff9580")
+      (red-intense     "#ff5f5f")
+      (green           "#44bc44")
+      (green-warmer    "#70b900")
+      (green-cooler    "#00c06f")
+      (green-faint     "#88ca9f")
+      (green-intense   "#44df44")
+      (yellow          "#d0bc00")
+      (yellow-warmer   "#fec43f")
+      (yellow-cooler   "#dfaf7a")
+      (yellow-faint    "#d2b580")
+      (yellow-intense  "#efef00")
+      (blue            "#2fafff")
+      (blue-warmer     "#79a8ff")
+      (blue-cooler     "#00bcff")
+      (blue-faint      "#82b0ec")
+      (blue-intense    "#338fff")
+      (magenta         "#feacd0")
+      (magenta-warmer  "#f78fe7")
+      (magenta-cooler  "#b6a0ff")
+      (magenta-faint   "#caa6df")
+      (magenta-intense "#ff66ff")
+      (cyan            "#00d3d0")
+      (cyan-warmer     "#4ae2f0")
+      (cyan-cooler     "#6ae4b9")
+      (cyan-faint      "#9ac8e0")
+      (cyan-intense    "#00eff0")
+
+;;; Uncommon accent foregrounds
+
+      (rust       "#db7b5f")
+      (gold       "#c0965b")
+      (olive      "#9cbd6f")
+      (slate      "#76afbf")
+      (indigo     "#9099d9")
+      (maroon     "#cf7fa7")
+      (pink       "#d09dc0")
+
+;;; Common accent backgrounds
+
+      (bg-red-intense     "#9d1f1f")
+      (bg-green-intense   "#2f822f")
+      (bg-yellow-intense  "#7a6100")
+      (bg-blue-intense    "#1640b0")
+      (bg-magenta-intense "#7030af")
+      (bg-cyan-intense    "#2266ae")
+
+      (bg-red-subtle      "#620f2a")
+      (bg-green-subtle    "#00422a")
+      (bg-yellow-subtle   "#4a4000")
+      (bg-blue-subtle     "#242679")
+      (bg-magenta-subtle  "#552f5f")
+      (bg-cyan-subtle     "#004065")
+
+      (bg-red-nuanced     "#2c0614")
+      (bg-green-nuanced   "#001904")
+      (bg-yellow-nuanced  "#221000")
+      (bg-blue-nuanced    "#0f0e39")
+      (bg-magenta-nuanced "#230631")
+      (bg-cyan-nuanced    "#041529")
+
+;;; Uncommon accent backgrounds
+
+      (bg-ochre    "#442c2f")
+      (bg-lavender "#38325c")
+      (bg-sage     "#0f3d30")
+
+;;; Graphs
+
+      (bg-graph-red-0     "#b52c2c")
+      (bg-graph-red-1     "#702020")
+      (bg-graph-green-0   "#4fd100")
+      (bg-graph-green-1   "#007800")
+      (bg-graph-yellow-0  "#f1e00a")
+      (bg-graph-yellow-1  "#b08600")
+      (bg-graph-blue-0    "#2fafef")
+      (bg-graph-blue-1    "#1f2f8f")
+      (bg-graph-magenta-0 "#bf94fe")
+      (bg-graph-magenta-1 "#5f509f")
+      (bg-graph-cyan-0    "#47dfea")
+      (bg-graph-cyan-1    "#00808f")
+
+;;; Special purpose
+
+      (bg-completion       "#2f447f")
+      (bg-hover            "#004f70")
+      (bg-hover-secondary  "#654a39")
+      (bg-hl-line          "#2f3849")
+      (bg-region           "#5a5a5a")
+      (fg-region           "#ffffff")
+
+      (bg-char-0 "#0050af")
+      (bg-char-1 "#7f1f7f")
+      (bg-char-2 "#625a00")
+
+      (bg-mode-line-active        "#505050")
+      (fg-mode-line-active        "#ffffff")
+      (border-mode-line-active    "#959595")
+      (bg-mode-line-inactive      "#2d2d2d")
+      (fg-mode-line-inactive      "#969696")
+      (border-mode-line-inactive  "#606060")
+
+      (modeline-err     "#ffa9bf")
+      (modeline-warning "#dfcf43")
+      (modeline-info    "#9fefff")
+
+      (bg-tab-bar      "#313131")
+      (bg-tab-current  "#000000")
+      (bg-tab-other    "#545454")
+
+;;; Diffs
+
+      (bg-added           "#00381f")
+      (bg-added-faint     "#002910")
+      (bg-added-refine    "#034f2f")
+      (bg-added-intense   "#237f3f")
+      (fg-added           "#a0e0a0")
+      (fg-added-intense   "#80e080")
+
+      (bg-changed         "#363300")
+      (bg-changed-faint   "#2a1f00")
+      (bg-changed-refine  "#4a4a00")
+      (bg-changed-intense "#8a7a00")
+      (fg-changed         "#efef80")
+      (fg-changed-intense "#c0b05f")
+
+      (bg-removed         "#4f1119")
+      (bg-removed-faint   "#380a0f")
+      (bg-removed-refine  "#781a1f")
+      (bg-removed-intense "#b81a1f")
+      (fg-removed         "#ffbfbf")
+      (fg-removed-intense "#ff9095")
+
+;;; Paren match
+
+      (bg-paren-match        "#2f7f9f")
+      (bg-paren-expression   "#453040")
+      (underline-paren-match unspecified)
+
+;;; Mappings
+
+;;;; General mappings
+
+      (fringe bg-dim)
+      (cursor fg-main)
+
+      (keybind blue-cooler)
+      (name magenta)
+      (identifier yellow-faint)
+
+      (err red)
+      (warning yellow-warmer)
+      (info cyan-cooler)
+
+      (underline-err red-intense)
+      (underline-warning yellow)
+      (underline-note cyan)
+
+;;;; Code mappings
+
+      (builtin magenta-warmer)
+      (comment fg-dim)
+      (constant blue-cooler)
+      (docstring cyan-faint)
+      (docmarkup magenta-faint)
+      (fnname magenta)
+      (keyword magenta-cooler)
+      (preprocessor red-cooler)
+      (string blue-warmer)
+      (type cyan-cooler)
+      (variable cyan)
+      (rx-construct green-cooler)
+      (rx-backslash magenta)
+
+;;;; Accent mappings
+
+      (accent-0 blue-cooler)
+      (accent-1 magenta-warmer)
+      (accent-2 cyan-cooler)
+      (accent-3 yellow)
+
+;;;; Button mappings
+
+      (fg-button-active fg-main)
+      (fg-button-inactive fg-dim)
+      (bg-button-active bg-active)
+      (bg-button-inactive bg-dim)
+
+;;;; Completion mappings
+
+      (fg-completion-match-0 blue-cooler)
+      (fg-completion-match-1 magenta-warmer)
+      (fg-completion-match-2 cyan-cooler)
+      (fg-completion-match-3 yellow)
+      (bg-completion-match-0 unspecified)
+      (bg-completion-match-1 unspecified)
+      (bg-completion-match-2 unspecified)
+      (bg-completion-match-3 unspecified)
+
+;;;; Date mappings
+
+      (date-common cyan)
+      (date-deadline red)
+      (date-event fg-alt)
+      (date-holiday magenta)
+      (date-now fg-main)
+      (date-scheduled yellow-warmer)
+      (date-weekday cyan)
+      (date-weekend red-faint)
+
+;;;; Line number mappings
+
+      (fg-line-number-inactive fg-dim)
+      (fg-line-number-active fg-main)
+      (bg-line-number-inactive bg-dim)
+      (bg-line-number-active bg-active)
+
+;;;; Link mappings
+
+      (fg-link blue-warmer)
+      (bg-link unspecified)
+      (underline-link blue-warmer)
+
+      (fg-link-symbolic cyan)
+      (bg-link-symbolic unspecified)
+      (underline-link-symbolic cyan)
+
+      (fg-link-visited magenta)
+      (bg-link-visited unspecified)
+      (underline-link-visited magenta)
+
+;;;; Mail mappings
+
+      (mail-cite-0 blue-warmer)
+      (mail-cite-1 yellow-cooler)
+      (mail-cite-2 cyan-cooler)
+      (mail-cite-3 red-cooler)
+      (mail-part blue)
+      (mail-recipient magenta-cooler)
+      (mail-subject magenta-warmer)
+      (mail-other magenta-faint)
+
+;;;; Prompt mappings
+
+      (fg-prompt cyan-cooler)
+      (bg-prompt unspecified)
+
+;;;; Prose mappings
+
+      (prose-block fg-dim)
+      (prose-code cyan-cooler)
+      (prose-done green)
+      (prose-macro magenta-cooler)
+      (prose-metadata fg-dim)
+      (prose-metadata-value fg-alt)
+      (prose-table fg-alt)
+      (prose-tag magenta-faint)
+      (prose-todo red)
+      (prose-verbatim magenta-warmer)
+
+;;;; Rainbow mappings
+
+      (rainbow-0 fg-main)
+      (rainbow-1 magenta-intense)
+      (rainbow-2 cyan-intense)
+      (rainbow-3 red-warmer)
+      (rainbow-4 yellow-intense)
+      (rainbow-5 magenta-cooler)
+      (rainbow-6 green-intense)
+      (rainbow-7 blue-warmer)
+      (rainbow-8 magenta-warmer)
+
+;;;; Heading mappings
+
+      (fg-heading-0 cyan-cooler)
+      (fg-heading-1 fg-main)
+      (fg-heading-2 yellow-faint)
+      (fg-heading-3 blue-faint)
+      (fg-heading-4 magenta)
+      (fg-heading-5 green-faint)
+      (fg-heading-6 red-faint)
+      (fg-heading-7 cyan-faint)
+      (fg-heading-8 fg-dim)
+
+      (bg-heading-0 unspecified)
+      (bg-heading-1 unspecified)
+      (bg-heading-2 unspecified)
+      (bg-heading-3 unspecified)
+      (bg-heading-4 unspecified)
+      (bg-heading-5 unspecified)
+      (bg-heading-6 unspecified)
+      (bg-heading-7 unspecified)
+      (bg-heading-8 unspecified)
+
+      (overline-heading-0 unspecified)
+      (overline-heading-1 unspecified)
+      (overline-heading-2 unspecified)
+      (overline-heading-3 unspecified)
+      (overline-heading-4 unspecified)
+      (overline-heading-5 unspecified)
+      (overline-heading-6 unspecified)
+      (overline-heading-7 unspecified)
+      (overline-heading-8 unspecified))
+    "The entire palette of the `modus-vivendi' theme.
+
+Named colors have the form (COLOR-NAME HEX-VALUE) with the former
+as a symbol and the latter as a string.
+
+Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
+with both as symbols.  The latter is a named color that already
+exists in the palette and is associated with a HEX-VALUE.
+
+Semantic color mappings cannot be recursive: their value must be
+either COLOR-NAME or HEX-VALUE.")
+
+
+  (defcustom modus-vivendi-palette-overrides nil
+    "Overrides for `modus-vivendi-palette'.
+
+Mirror the elements of the aforementioned palette, overriding
+their value.
+
+For overrides that are shared across all of the Modus themes,
+refer to `modus-themes-common-palette-overrides'.
+
+Theme-specific overrides take precedence over shared overrides.
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red.  Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+    :group 'modus-themes
+    :package-version '(modus-themes . "4.0.0")
+    :version "30.1"
+    :type '(repeat (list symbol (choice symbol string)))
+    :set #'modus-themes--set-option
+    :initialize #'custom-initialize-default
+    :link '(info-link "(modus-themes) Palette overrides"))
+
+  (modus-themes-theme modus-vivendi
+                      modus-vivendi-palette
+                      modus-vivendi-palette-overrides)
 
   (provide-theme 'modus-vivendi))
 
diff --git a/etc/themes/modus-vivendi-tinted-theme.el 
b/etc/themes/modus-vivendi-tinted-theme.el
new file mode 100644
index 00000000000..001a8470986
--- /dev/null
+++ b/etc/themes/modus-vivendi-tinted-theme.el
@@ -0,0 +1,417 @@
+;;; modus-vivendi-tinted-theme.el --- Elegant, highly legible and customizable 
dark theme -*- lexical-binding:t -*-
+
+;; Copyright (C) 2019-2023  Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+;; URL: https://git.sr.ht/~protesilaos/modus-themes
+;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
+
+;; 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:
+;;
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA).  Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
+
+;;; Code:
+
+
+
+(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))
+
+  (deftheme modus-vivendi-tinted
+    "Elegant, highly legible and customizable dark theme.
+Conforms with the highest legibility standard for color contrast
+between background and foreground in any given piece of text,
+which corresponds to a minimum contrast in relative luminance of
+7:1 (WCAG AAA standard).")
+
+  (defconst modus-vivendi-tinted-palette
+    '(
+;;; Basic values
+
+      (bg-main          "#0d0e1c")
+      (bg-dim           "#1d2235")
+      (fg-main          "#ffffff")
+      (fg-dim           "#989898")
+      (fg-alt           "#c6daff")
+      (bg-active        "#4a4f69")
+      (bg-inactive      "#2b3045")
+      (border           "#61647a")
+
+;;; Common accent foregrounds
+
+      (red             "#ff5f59")
+      (red-warmer      "#ff6b55")
+      (red-cooler      "#ff7f9f")
+      (red-faint       "#ff9f80")
+      (red-intense     "#ff5f5f")
+      (green           "#44bc44")
+      (green-warmer    "#70b900")
+      (green-cooler    "#00c06f")
+      (green-faint     "#88ca9f")
+      (green-intense   "#44df44")
+      (yellow          "#d0bc00")
+      (yellow-warmer   "#fec43f")
+      (yellow-cooler   "#dfaf7a")
+      (yellow-faint    "#d2b580")
+      (yellow-intense  "#efef00")
+      (blue            "#2fafff")
+      (blue-warmer     "#79a8ff")
+      (blue-cooler     "#00bcff")
+      (blue-faint      "#82b0ec")
+      (blue-intense    "#338fff")
+      (magenta         "#feacd0")
+      (magenta-warmer  "#f78fe7")
+      (magenta-cooler  "#b6a0ff")
+      (magenta-faint   "#caa6df")
+      (magenta-intense "#ff66ff")
+      (cyan            "#00d3d0")
+      (cyan-warmer     "#4ae2f0")
+      (cyan-cooler     "#6ae4b9")
+      (cyan-faint      "#9ac8e0")
+      (cyan-intense    "#00eff0")
+
+;;; Uncommon accent foregrounds
+
+      (rust       "#db7b5f")
+      (gold       "#c0965b")
+      (olive      "#9cbd6f")
+      (slate      "#76afbf")
+      (indigo     "#9099d9")
+      (maroon     "#cf7fa7")
+      (pink       "#d09dc0")
+
+;;; Common accent backgrounds
+
+      (bg-red-intense     "#9d1f1f")
+      (bg-green-intense   "#2f822f")
+      (bg-yellow-intense  "#7a6100")
+      (bg-blue-intense    "#1640b0")
+      (bg-magenta-intense "#7030af")
+      (bg-cyan-intense    "#2266ae")
+
+      (bg-red-subtle      "#620f2a")
+      (bg-green-subtle    "#00422a")
+      (bg-yellow-subtle   "#4a4000")
+      (bg-blue-subtle     "#242679")
+      (bg-magenta-subtle  "#552f5f")
+      (bg-cyan-subtle     "#004065")
+
+      (bg-red-nuanced     "#2c0614")
+      (bg-green-nuanced   "#001904")
+      (bg-yellow-nuanced  "#221000")
+      (bg-blue-nuanced    "#0f0e39")
+      (bg-magenta-nuanced "#230631")
+      (bg-cyan-nuanced    "#041529")
+
+;;; Graphs
+
+      (bg-graph-red-0     "#b52c2c")
+      (bg-graph-red-1     "#702020")
+      (bg-graph-green-0   "#4fd100")
+      (bg-graph-green-1   "#007800")
+      (bg-graph-yellow-0  "#f1e00a")
+      (bg-graph-yellow-1  "#b08600")
+      (bg-graph-blue-0    "#2fafef")
+      (bg-graph-blue-1    "#1f2f8f")
+      (bg-graph-magenta-0 "#bf94fe")
+      (bg-graph-magenta-1 "#5f509f")
+      (bg-graph-cyan-0    "#47dfea")
+      (bg-graph-cyan-1    "#00808f")
+
+;;; Special purpose
+
+      (bg-completion       "#483d8a")
+      (bg-hover            "#004f70")
+      (bg-hover-secondary  "#654a39")
+      (bg-hl-line          "#303a6f")
+      (bg-region           "#555a66")
+      (fg-region           "#ffffff")
+
+      (bg-char-0 "#0050af")
+      (bg-char-1 "#7f1f7f")
+      (bg-char-2 "#625a00")
+
+      (bg-mode-line-active        "#484d67")
+      (fg-mode-line-active        "#ffffff")
+      (border-mode-line-active    "#979797")
+      (bg-mode-line-inactive      "#292d48")
+      (fg-mode-line-inactive      "#969696")
+      (border-mode-line-inactive  "#606270")
+
+      (modeline-err     "#ffa9bf")
+      (modeline-warning "#dfcf43")
+      (modeline-info    "#9fefff")
+
+      (bg-tab-bar      "#2c3045")
+      (bg-tab-current  "#0d0e1c")
+      (bg-tab-other    "#4a4f6a")
+
+;;; Diffs
+
+      (bg-added           "#003a2f")
+      (bg-added-faint     "#002922")
+      (bg-added-refine    "#035542")
+      (bg-added-intense   "#237f4f")
+      (fg-added           "#a0e0a0")
+      (fg-added-intense   "#80e080")
+
+      (bg-changed         "#363300")
+      (bg-changed-faint   "#2a1f00")
+      (bg-changed-refine  "#4a4a00")
+      (bg-changed-intense "#8a7a00")
+      (fg-changed         "#efef80")
+      (fg-changed-intense "#c0b05f")
+
+      (bg-removed         "#4f1127")
+      (bg-removed-faint   "#380a19")
+      (bg-removed-refine  "#781a3a")
+      (bg-removed-intense "#b81a26")
+      (fg-removed         "#ffbfbf")
+      (fg-removed-intense "#ff9095")
+
+;;; Uncommon accent backgrounds
+
+      (bg-ochre    "#442c2f")
+      (bg-lavender "#38325c")
+      (bg-sage     "#0f3d30")
+
+;;; Paren match
+
+      (bg-paren-match        "#2f7f9f")
+      (bg-paren-expression   "#453040")
+      (underline-paren-match unspecified)
+
+;;; Mappings
+
+;;;; General mappings
+
+      (fringe bg-dim)
+      (cursor magenta-warmer)
+
+      (keybind blue-cooler)
+      (name magenta)
+      (identifier yellow-faint)
+
+      (err red)
+      (warning yellow-warmer)
+      (info cyan-cooler)
+
+      (underline-err red-intense)
+      (underline-warning yellow)
+      (underline-note cyan)
+
+;;;; Code mappings
+
+      (builtin magenta-warmer)
+      (comment red-faint)
+      (constant blue-cooler)
+      (docstring cyan-faint)
+      (docmarkup magenta-faint)
+      (fnname magenta)
+      (keyword magenta-cooler)
+      (preprocessor red-cooler)
+      (string blue-warmer)
+      (type cyan-cooler)
+      (variable cyan)
+      (rx-construct green-cooler)
+      (rx-backslash magenta)
+
+;;;; Accent mappings
+
+      (accent-0 blue-cooler)
+      (accent-1 magenta-warmer)
+      (accent-2 cyan-cooler)
+      (accent-3 yellow)
+
+;;;; Button mappings
+
+      (fg-button-active fg-main)
+      (fg-button-inactive fg-dim)
+      (bg-button-active bg-active)
+      (bg-button-inactive bg-dim)
+
+;;;; Completion mappings
+
+      (fg-completion-match-0 blue-cooler)
+      (fg-completion-match-1 magenta-warmer)
+      (fg-completion-match-2 cyan-cooler)
+      (fg-completion-match-3 yellow)
+      (bg-completion-match-0 unspecified)
+      (bg-completion-match-1 unspecified)
+      (bg-completion-match-2 unspecified)
+      (bg-completion-match-3 unspecified)
+
+;;;; Date mappings
+
+      (date-common cyan)
+      (date-deadline red)
+      (date-event fg-alt)
+      (date-holiday magenta)
+      (date-now fg-main)
+      (date-scheduled yellow-warmer)
+      (date-weekday cyan)
+      (date-weekend red-faint)
+
+;;;; Line number mappings
+
+      (fg-line-number-inactive fg-dim)
+      (fg-line-number-active fg-main)
+      (bg-line-number-inactive bg-dim)
+      (bg-line-number-active bg-active)
+
+;;;; Link mappings
+
+      (fg-link blue-warmer)
+      (bg-link unspecified)
+      (underline-link blue-warmer)
+
+      (fg-link-symbolic cyan)
+      (bg-link-symbolic unspecified)
+      (underline-link-symbolic cyan)
+
+      (fg-link-visited magenta)
+      (bg-link-visited unspecified)
+      (underline-link-visited magenta)
+
+;;;; Mail mappings
+
+      (mail-cite-0 blue-warmer)
+      (mail-cite-1 yellow-cooler)
+      (mail-cite-2 cyan-cooler)
+      (mail-cite-3 red-cooler)
+      (mail-part blue)
+      (mail-recipient magenta-cooler)
+      (mail-subject magenta-warmer)
+      (mail-other magenta-faint)
+
+;;;; Prompt mappings
+
+      (fg-prompt cyan-cooler)
+      (bg-prompt unspecified)
+
+;;;; Prose mappings
+
+      (prose-block fg-dim)
+      (prose-code cyan-cooler)
+      (prose-done green)
+      (prose-macro magenta-cooler)
+      (prose-metadata fg-dim)
+      (prose-metadata-value fg-alt)
+      (prose-table fg-alt)
+      (prose-tag magenta-faint)
+      (prose-todo red)
+      (prose-verbatim magenta-warmer)
+
+;;;; Rainbow mappings
+
+      (rainbow-0 fg-main)
+      (rainbow-1 magenta-intense)
+      (rainbow-2 cyan-intense)
+      (rainbow-3 red-warmer)
+      (rainbow-4 yellow-intense)
+      (rainbow-5 magenta-cooler)
+      (rainbow-6 green-intense)
+      (rainbow-7 blue-warmer)
+      (rainbow-8 magenta-warmer)
+
+;;;; Heading mappings
+
+      (fg-heading-0 cyan-cooler)
+      (fg-heading-1 fg-main)
+      (fg-heading-2 yellow-faint)
+      (fg-heading-3 blue-faint)
+      (fg-heading-4 magenta)
+      (fg-heading-5 green-faint)
+      (fg-heading-6 red-faint)
+      (fg-heading-7 cyan-faint)
+      (fg-heading-8 fg-dim)
+
+      (bg-heading-0 unspecified)
+      (bg-heading-1 unspecified)
+      (bg-heading-2 unspecified)
+      (bg-heading-3 unspecified)
+      (bg-heading-4 unspecified)
+      (bg-heading-5 unspecified)
+      (bg-heading-6 unspecified)
+      (bg-heading-7 unspecified)
+      (bg-heading-8 unspecified)
+
+      (overline-heading-0 unspecified)
+      (overline-heading-1 unspecified)
+      (overline-heading-2 unspecified)
+      (overline-heading-3 unspecified)
+      (overline-heading-4 unspecified)
+      (overline-heading-5 unspecified)
+      (overline-heading-6 unspecified)
+      (overline-heading-7 unspecified)
+      (overline-heading-8 unspecified))
+    "The entire palette of the `modus-vivendi-tinted' theme.
+
+Named colors have the form (COLOR-NAME HEX-VALUE) with the former
+as a symbol and the latter as a string.
+
+Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
+with both as symbols.  The latter is a named color that already
+exists in the palette and is associated with a HEX-VALUE.
+
+Semantic color mappings cannot be recursive: their value must be
+either COLOR-NAME or HEX-VALUE.")
+
+  (defcustom modus-vivendi-tinted-palette-overrides nil
+    "Overrides for `modus-vivendi-tinted-palette'.
+
+Mirror the elements of the aforementioned palette, overriding
+their value.
+
+For overrides that are shared across all of the Modus themes,
+refer to `modus-themes-common-palette-overrides'.
+
+Theme-specific overrides take precedence over shared overrides.
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red.  Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+    :group 'modus-themes
+    :package-version '(modus-themes . "4.0.0")
+    :version "30.1"
+    :type '(repeat (list symbol (choice symbol string)))
+    :set #'modus-themes--set-option
+    :initialize #'custom-initialize-default
+    :link '(info-link "(modus-themes) Palette overrides"))
+
+  (modus-themes-theme modus-vivendi-tinted
+                      modus-vivendi-tinted-palette
+                      modus-vivendi-tinted-palette-overrides)
+
+  (provide-theme 'modus-vivendi-tinted))
+
+;;;###theme-autoload
+(put 'modus-vivendi-tinted 'theme-properties '(:background-mode dark :kind 
color-scheme :family modus))
+
+;;; modus-vivendi-tinted-theme.el ends here
diff --git a/etc/themes/tango-dark-theme.el b/etc/themes/tango-dark-theme.el
index 85995e4e995..e79c14d734f 100644
--- a/etc/themes/tango-dark-theme.el
+++ b/etc/themes/tango-dark-theme.el
@@ -1,6 +1,6 @@
 ;;; tango-dark-theme.el --- Tango-based custom theme for faces  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Authors: Chong Yidong <cyd@stupidchicken>
 ;;          Jan Moringen <jan.moringen@uni-bielefeld.de>
diff --git a/etc/themes/tango-theme.el b/etc/themes/tango-theme.el
index 2ac1b42294b..4fecb60bc6e 100644
--- a/etc/themes/tango-theme.el
+++ b/etc/themes/tango-theme.el
@@ -1,6 +1,6 @@
 ;;; tango-theme.el --- Tango-based custom theme for faces  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Authors: Chong Yidong <cyd@stupidchicken>
 ;;          Jan Moringen <jan.moringen@uni-bielefeld.de>
diff --git a/etc/themes/tsdh-dark-theme.el b/etc/themes/tsdh-dark-theme.el
index 6b1e865e427..2451ee9666d 100644
--- a/etc/themes/tsdh-dark-theme.el
+++ b/etc/themes/tsdh-dark-theme.el
@@ -1,6 +1,6 @@
 ;;; tsdh-dark-theme.el --- Tassilo's dark custom theme  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/etc/themes/tsdh-light-theme.el b/etc/themes/tsdh-light-theme.el
index ac964d66d67..4d11f5cc32f 100644
--- a/etc/themes/tsdh-light-theme.el
+++ b/etc/themes/tsdh-light-theme.el
@@ -1,6 +1,6 @@
 ;;; tsdh-light-theme.el --- Tassilo's light custom theme  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/etc/themes/wheatgrass-theme.el b/etc/themes/wheatgrass-theme.el
index 20e7bbbac29..812fd623f1a 100644
--- a/etc/themes/wheatgrass-theme.el
+++ b/etc/themes/wheatgrass-theme.el
@@ -1,6 +1,6 @@
 ;;; wheatgrass-theme.el --- custom theme for faces  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/etc/themes/whiteboard-theme.el b/etc/themes/whiteboard-theme.el
index 2f86234b32a..adbd69f1c6f 100644
--- a/etc/themes/whiteboard-theme.el
+++ b/etc/themes/whiteboard-theme.el
@@ -1,6 +1,6 @@
 ;;; whiteboard-theme.el --- Custom theme for faces  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Scott Frazer <frazer.scott@gmail.com>
 
diff --git a/etc/themes/wombat-theme.el b/etc/themes/wombat-theme.el
index 9bb026ead14..5b8b4d19907 100644
--- a/etc/themes/wombat-theme.el
+++ b/etc/themes/wombat-theme.el
@@ -1,6 +1,6 @@
 ;;; wombat-theme.el --- Custom face theme for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Kristoffer Grönlund <krig@koru.se>
 
diff --git a/etc/tutorials/TUTORIAL b/etc/tutorials/TUTORIAL
index c4e08adb0c7..e72b972441e 100644
--- a/etc/tutorials/TUTORIAL
+++ b/etc/tutorials/TUTORIAL
@@ -1131,7 +1131,7 @@ starting with the one written by Stuart Cracraft for the 
original Emacs.
 This version of the tutorial is a part of GNU Emacs.  It is copyrighted
 and comes with permission to distribute copies on certain conditions:
 
-  Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation,
+  Copyright (C) 1985, 1996, 1998, 2001-2023 Free Software Foundation,
   Inc.
 
   This file is part of GNU Emacs.
diff --git a/etc/tutorials/TUTORIAL.bg b/etc/tutorials/TUTORIAL.bg
index 63cae5d62b8..60c1e07272d 100644
--- a/etc/tutorials/TUTORIAL.bg
+++ b/etc/tutorials/TUTORIAL.bg
@@ -1162,7 +1162,7 @@ Dired ви позволява да гледате списъка от файло
 This version of the tutorial, like GNU Emacs, is copyrighted, and
 comes with permission to distribute copies on certain conditions:
 
-  Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation,
+  Copyright (C) 1985, 1996, 1998, 2001-2023 Free Software Foundation,
   Inc.
 
   This file is part of GNU Emacs.
diff --git a/etc/tutorials/TUTORIAL.cn b/etc/tutorials/TUTORIAL.cn
index 770d9a83be3..73df2cff4e7 100644
--- a/etc/tutorials/TUTORIAL.cn
+++ b/etc/tutorials/TUTORIAL.cn
@@ -299,7 +299,7 @@ Emacs 可以有多个“窗格”,每个窗格显示不同的文字。后面
 
 >>  试试 C-u 8 *,这将会插入 ********。
 
-好,现在你应该已经掌握了最基本的的文本插入和修改功能,其实删除还可以
+好,现在你应该已经掌握了最基本的文本插入和修改功能,其实删除还可以
 “以词为单位”进行,下面是一个关于“删除”操作的小结:
 
         <DEL>        删除光标前的一个字符
@@ -316,7 +316,7 @@ Emacs 可以有多个“窗格”,每个窗格显示不同的文字。后面
 
 注意“<DEL> 和 C-d”还有“M-<DEL> 和 M-d”是根据前述惯例从 C-f和 M-f 衍生
 出来的(其实<DEL>不是控制字符,我们先忽略这一点)。C-k和 M-k 的关系在
-某种程度上与 C-e 和 M-e 一样――如果把“一行”和“一句”作一个类比的话。
+某种程度上与 C-e 和 M-e 一样――如果把“一行”和“一句”做一个类比的话。
 
 你也可以用一种通用的办法来移除缓冲区里的任何一部分:首先把光标移动到你
 想要移除的区域的一端,然后按 C-<SPC>(<SPC>指空格)【注意,C-<SPC> 往
@@ -1006,7 +1006,7 @@ starting with the one written by Stuart Cracraft for the 
original Emacs.
 This version of the tutorial is a part of GNU Emacs.  It is copyrighted
 and comes with permission to distribute copies on certain conditions:
 
-  Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation,
+  Copyright (C) 1985, 1996, 1998, 2001-2023 Free Software Foundation,
   Inc.
 
   This file is part of GNU Emacs.
@@ -1035,7 +1035,7 @@ using, writing, and sharing free software!
 
 本篇指南是 GNU Emacs 的一部分,并允许在下列条件的约束下发行其拷贝:
 
-   Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation,
+   Copyright (C) 1985, 1996, 1998, 2001-2023 Free Software Foundation,
    Inc.
 
    本文件为 GNU Emacs 的一部分。
diff --git a/etc/tutorials/TUTORIAL.cs b/etc/tutorials/TUTORIAL.cs
index 737b872c500..be3b92f8ffd 100644
--- a/etc/tutorials/TUTORIAL.cs
+++ b/etc/tutorials/TUTORIAL.cs
@@ -1015,7 +1015,7 @@ tutoriálem napsaným Stuartem Cracraftem pro původní Emacs.
 Tato verze tutoriálu je, podobně jako GNU Emacs, chráněna copyrightem a
 je šířena se svolením distribuovat kopie za jistých podmínek:
 
-Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2023 Free Software Foundation, Inc.
 
    Každému je zaručeno právo vytvářet a distribuovat přesné kopie tohoto
    dokumentu tak, jak jej obdržel, na jakémkoliv médiu, s tím, že bude
diff --git a/etc/tutorials/TUTORIAL.de b/etc/tutorials/TUTORIAL.de
index 4ae421f40e0..03716dd7de4 100644
--- a/etc/tutorials/TUTORIAL.de
+++ b/etc/tutorials/TUTORIAL.de
@@ -1488,7 +1488,7 @@ Beachten Sie bitte, dass im Zweifelsfalle das englische 
Original
 dieser Urheberrechtsnotiz gültig ist (zu finden in der Datei
 TUTORIAL).
 
-   Copyright (C) 1985, 1996-1997, 2001-2022 Free Software Foundation,
+   Copyright (C) 1985, 1996-1997, 2001-2023 Free Software Foundation,
    Inc.
 
    Diese Datei ist ein Bestandteil von GNU Emacs.
diff --git a/etc/tutorials/TUTORIAL.el_GR b/etc/tutorials/TUTORIAL.el_GR
index 88d9712b8e5..33b87cb99e9 100644
--- a/etc/tutorials/TUTORIAL.el_GR
+++ b/etc/tutorials/TUTORIAL.el_GR
@@ -1239,7 +1239,7 @@ list-packages.  Στη σχετική λίστα, μπορείς να εγκατ
 πνευματικά δικαιώματα και δίνεται με την άδεια διανομής αντιγράφων υπό
 κάποιους όρους.
 
-  Πνευματικά Δικαιώματα (C) 1985, 1996, 1998, 2001-2022 Free Software
+  Πνευματικά Δικαιώματα (C) 1985, 1996, 1998, 2001-2023 Free Software
   Foundation, Inc.
 
   Αυτό το αρχείο είναι μέρος του GNU Emacs.
diff --git a/etc/tutorials/TUTORIAL.eo b/etc/tutorials/TUTORIAL.eo
index 762510a6fb0..a92edf267fe 100644
--- a/etc/tutorials/TUTORIAL.eo
+++ b/etc/tutorials/TUTORIAL.eo
@@ -1081,7 +1081,7 @@ la dosiero verkita de Stuart Cracraft por la originala 
Emakso.
 kopirajton, kaj venas kun permeso por disdoni kopiojn se certaj
 kondiĉoj estas observataj:
 
-   Copyright (C) 1985, 1999, 2001-2002, 2005, 2007-2022 Free Software
+   Copyright (C) 1985, 1999, 2001-2002, 2005, 2007-2023 Free Software
    Foundation, Inc.
 
    Ĉi tiu dosiero estas parto de "GNU Emacs".
diff --git a/etc/tutorials/TUTORIAL.es b/etc/tutorials/TUTORIAL.es
index 454f2ce68f5..b0d176d27cc 100644
--- a/etc/tutorials/TUTORIAL.es
+++ b/etc/tutorials/TUTORIAL.es
@@ -1204,7 +1204,7 @@ Por favor, en caso de duda, solo es válido el original en 
inglés de la
 siguiente nota de derechos de reproducción (que puede encontrar en el
 archivo TUTORIAL).
 
-Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2023 Free Software Foundation, Inc.
 
    Se permite a cualquiera hacer o distribuir copias literales de este
    documento como se recibe, en cualquier medio, siempre que la nota
diff --git a/etc/tutorials/TUTORIAL.fr b/etc/tutorials/TUTORIAL.fr
index 5b080645e40..1e4260acf0a 100644
--- a/etc/tutorials/TUTORIAL.fr
+++ b/etc/tutorials/TUTORIAL.fr
@@ -1202,7 +1202,7 @@ Cette version du didacticiel, comme GNU Emacs, est placée 
sous
 droit d'auteur, et vous pouvez en distribuer des copies sous certaines
 conditions :
 
-Copyright (C) 1985, 1996, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 2001-2023 Free Software Foundation, Inc.
 
    Chacun peut créer ou distribuer des copies de ce document tel qu'il
    l'a reçu, sur n'importe quel support, pourvu que la note de
@@ -1219,7 +1219,7 @@ Les conditions de copie d'Emacs lui-même sont plus 
complexes, mais
 dans le même esprit. Lisez le fichier COPYING et donnez ensuite des
 copies de GNU Emacs à vos amis. Participez à l'éradication de
 l'obstructionnisme du logiciel (sa « propriétarisation ») en
-utilisant, écrivant et partagent des logiciels libres !
+utilisant, écrivant et partageant des logiciels libres !
 
 Cette traduction française a été effectuée par Éric Jacoboni
 <jaco@teaser.fr> et complétée par Bastien Guerry <bzg@gnu.org>.
diff --git a/etc/tutorials/TUTORIAL.he b/etc/tutorials/TUTORIAL.he
index 26a9d06e454..4257f94edcf 100644
--- a/etc/tutorials/TUTORIAL.he
+++ b/etc/tutorials/TUTORIAL.he
@@ -1015,7 +1015,7 @@ find-file.
 גירסה זו של השיעור הינה חלק מחבילת GNU Emacs. היא מוגנת בזכויות יוצרים
 וניתנת להעתקה והפצת עותקים בתנאים מסויימים כדלקמן:
 
-                       Copyright (C) 2010-2022 Free Software Foundation, Inc.
+                       Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ‏GNU Emacs הינו תכנה חפשית; זכותכם להפיצו ו\או לשנותו בכפוף לתנאי
 הרשיון GNU General Public License, כפי שהוא יוצא לאור ע״י Free
diff --git a/etc/tutorials/TUTORIAL.it b/etc/tutorials/TUTORIAL.it
index d7682a4a624..f97446d01c6 100644
--- a/etc/tutorials/TUTORIAL.it
+++ b/etc/tutorials/TUTORIAL.it
@@ -1219,7 +1219,7 @@ distribuito con il permesso di farne copie a determinate 
condizioni:
    indicativo, restando comunque inteso il fatto che è quella
    originale a fare fede.
 
-Copyright (C) 2003-2022 Free Software Foundation, Inc.
+Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
    È permesso a chiunque copiare e distribuire attraverso ogni mezzo
    copie fedeli di questo documento così come viene ricevuto, a
diff --git a/etc/tutorials/TUTORIAL.ja b/etc/tutorials/TUTORIAL.ja
index 43f4d09da78..eb77faf0cf2 100644
--- a/etc/tutorials/TUTORIAL.ja
+++ b/etc/tutorials/TUTORIAL.ja
@@ -1062,7 +1062,7 @@ starting with the one written by Stuart Cracraft for the 
original Emacs.
 This version of the tutorial, like GNU Emacs, is copyrighted, and
 comes with permission to distribute copies on certain conditions:
 
-Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2023 Free Software Foundation, Inc.
 
    Permission is granted to anyone to make or distribute verbatim copies
    of this document as received, in any medium, provided that the
diff --git a/etc/tutorials/TUTORIAL.ko b/etc/tutorials/TUTORIAL.ko
index 84cc4f1d845..8252a91e179 100644
--- a/etc/tutorials/TUTORIAL.ko
+++ b/etc/tutorials/TUTORIAL.ko
@@ -981,7 +981,7 @@ C-x C-s와 (META쇠나 EDIT쇠 혹은 교체쇠가 있으면) <ESC>v와 같은 
 GNU 이맥스와 같이 이 지침서 판은 저작권이 있으며 특정한 조건을 만족할
 때에 복사본을 배포할 수 있는 허가를 갖고 나온 것이다:
 
-Copyright (C) 1985, 1996, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 2001-2023 Free Software Foundation, Inc.
 
    이 문서는 이 저작권 공고와 허용 공고가 그대로 유지되고, 배포자가
    수취자에게 이 공고에 따라 허용되는 것처럼 또 재분배하는 것을
diff --git a/etc/tutorials/TUTORIAL.nl b/etc/tutorials/TUTORIAL.nl
index 7aaed218ff6..ce777e29e4f 100644
--- a/etc/tutorials/TUTORIAL.nl
+++ b/etc/tutorials/TUTORIAL.nl
@@ -1209,7 +1209,7 @@ Deze versie van de inleiding is onderdeel van GNU Emacs.  
Het valt
 onder copyright.  Je mag deze inleiding verspreiden onder bepaalde
 voorwaarden:
 
-  Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation,
+  Copyright (C) 1985, 1996, 1998, 2001-2023 Free Software Foundation,
   Inc.
 
   Dit bestand is onderdeel van GNU Emacs.
@@ -1239,7 +1239,7 @@ Engels origineel van de copyrightmelding en condities:
 This version of the tutorial is a part of GNU Emacs.  It is copyrighted
 and comes with permission to distribute copies on certain conditions:
 
-  Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1985, 1996, 1998, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/etc/tutorials/TUTORIAL.pl b/etc/tutorials/TUTORIAL.pl
index 2d87eb47106..388e4cf692b 100644
--- a/etc/tutorials/TUTORIAL.pl
+++ b/etc/tutorials/TUTORIAL.pl
@@ -1209,7 +1209,7 @@ z pomocą Ryszarda Kubiaka i Janusza S. Bienia 
<jsbien@mail.uw.edu.pl>.
 Ta wersja samouczka, podobnie jak GNU Emacs, jest chroniona prawem
 autorskim, ale wolno ją kopiować pod następującymi warunkami:
 
-Copyright (C) 1985, 1994, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1985, 1994, 2001-2023 Free Software Foundation, Inc.
 
 Zezwala się na wykonywanie lub rozpowszechnianie
 wiernych kopii tego dokumentu w otrzymanej formie, na dowolnym
diff --git a/etc/tutorials/TUTORIAL.pt_BR b/etc/tutorials/TUTORIAL.pt_BR
index 0a3b376e4d2..a7d6dcb9204 100644
--- a/etc/tutorials/TUTORIAL.pt_BR
+++ b/etc/tutorials/TUTORIAL.pt_BR
@@ -1056,7 +1056,7 @@ Essa versão do tutorial foi originalmente traduzida por 
Marcelo Toledo
 <marcelo@gnu.org> e como o GNU Emacs, tem um copyright, e vem
 com uma permissão de distribuição de cópias nas seguintes condições:
 
-Copyright (C) 2004-2022 Free Software Foundation, Inc.
+Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
    Permissão é garantida a qualquer um para fazer ou distribuir cópias
    integrais deste documento como recebido, em qualquer meio, deixando
diff --git a/etc/tutorials/TUTORIAL.ro b/etc/tutorials/TUTORIAL.ro
index 1f1dc325609..ee3a1426239 100644
--- a/etc/tutorials/TUTORIAL.ro
+++ b/etc/tutorials/TUTORIAL.ro
@@ -4,7 +4,7 @@ Mulţumiri Aidei Hulubei <aida@chang.pub.ro> pentru corecturi şi 
sugestii.
 
 Această versiune a fost produsă plecând de la versiunea în limba
 engleză, care este
-Copyright (c) 1985, 2013-2022 Free Software Foundation, Inc.
+Copyright (c) 1985, 2013-2023 Free Software Foundation, Inc.
 
 Citiţi acum versiunea românească a tutorialului de Emacs.
 
diff --git a/etc/tutorials/TUTORIAL.ru b/etc/tutorials/TUTORIAL.ru
index d32b7163e68..8018b36cc38 100644
--- a/etc/tutorials/TUTORIAL.ru
+++ b/etc/tutorials/TUTORIAL.ru
@@ -1105,7 +1105,7 @@ Dired позволяет вам отображать список файлов 
 (copyrighted) и приходит с ограничениями распространения копий со
 следующими соглашениями:
 
-Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2023 Free Software Foundation, Inc.
 
    Permission is granted to anyone to make or distribute verbatim copies
    of this document as received, in any medium, provided that the
diff --git a/etc/tutorials/TUTORIAL.sk b/etc/tutorials/TUTORIAL.sk
index 7e523f0f93f..e5033a822dc 100644
--- a/etc/tutorials/TUTORIAL.sk
+++ b/etc/tutorials/TUTORIAL.sk
@@ -1074,7 +1074,7 @@ tútorialom napísaným Stuartom Cracraftom pre pôvodný 
Emacs.
 Táto verzia tútorialu je, podobne ako GNU Emacs, chránená copyrightom
 a je šírená s povolením distribuovať kópie za istých podmienok:
 
-Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2023 Free Software Foundation, Inc.
 
    Každému je zaručené právo vytvárať a distribuovať presné kópie tohto
    dokumentu tak, ako ho dostal, na akomkoľvek médiu, s tým, že bude
diff --git a/etc/tutorials/TUTORIAL.sl b/etc/tutorials/TUTORIAL.sl
index 20ff1b60557..ae594b99332 100644
--- a/etc/tutorials/TUTORIAL.sl
+++ b/etc/tutorials/TUTORIAL.sl
@@ -1119,7 +1119,7 @@ Emacs. V slovenščino ga je prevedel Primož Peterlin.
 To besedilo, kot sam GNU Emacs, je avtorsko delo, in njegovo
 razmnoževanje in razširjanje je dovoljeno pod naslednjimi pogoji:
 
-Copyright © 1985, 1996, 1998, 2001-2022 Free Software Foundation, Inc.
+Copyright © 1985, 1996, 1998, 2001-2023 Free Software Foundation, Inc.
 
   Ta datoteka je del paketa GNU Emacs.
 
diff --git a/etc/tutorials/TUTORIAL.sv b/etc/tutorials/TUTORIAL.sv
index b1111af929d..9b38fa0c6fe 100644
--- a/etc/tutorials/TUTORIAL.sv
+++ b/etc/tutorials/TUTORIAL.sv
@@ -1153,7 +1153,7 @@ Lidell översatte den till svenska.
 This version of the tutorial, like GNU Emacs, is copyrighted, and
 comes with permission to distribute copies on certain conditions:
 
-Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/etc/tutorials/TUTORIAL.th b/etc/tutorials/TUTORIAL.th
index fb5a0313625..9c2ee1e5b90 100644
--- a/etc/tutorials/TUTORIAL.th
+++ b/etc/tutorials/TUTORIAL.th
@@ -964,7 +964,7 @@ starting with the one written by Stuart Cracraft for the 
original Emacs.
 This version of the tutorial, like GNU Emacs, is copyrighted, and
 comes with permission to distribute copies on certain conditions:
 
-Copyright (C) 1985, 1996, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 2001-2023 Free Software Foundation, Inc.
 
    Permission is granted to anyone to make or distribute verbatim copies
    of this document as received, in any medium, provided that the
diff --git a/etc/tutorials/TUTORIAL.uk b/etc/tutorials/TUTORIAL.uk
index 16190afe3a3..6d4772cf0ad 100644
--- a/etc/tutorials/TUTORIAL.uk
+++ b/etc/tutorials/TUTORIAL.uk
@@ -1126,7 +1126,7 @@ list-packages.  З'явиться екран, за допомогою якого
 Ця версія посібника — складник GNU Emacs.  Її захищено авторським
 правом.  Розповсюджувати копії дозволено за певних умов:
 
-  Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation,
+  Copyright (C) 1985, 1996, 1998, 2001-2023 Free Software Foundation,
   Inc.  (Фонд вільного програмного забезпечення, Inc.)
 
   Цей файл — складник GNU Emacs.
diff --git a/etc/tutorials/TUTORIAL.zh b/etc/tutorials/TUTORIAL.zh
index 959d51b7aa2..f938ed693d8 100644
--- a/etc/tutorials/TUTORIAL.zh
+++ b/etc/tutorials/TUTORIAL.zh
@@ -1049,7 +1049,7 @@ issue here>」。
 這個版本的快速指南和 GNU Emacs 一樣都是版權化的,並且允許在某些條件下
 散佈其拷貝:
 
-Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2023 Free Software Foundation, Inc.
 
    Permission is granted to anyone to make or distribute verbatim copies
    of this document as received, in any medium, provided that the
diff --git a/etc/w32-feature.el b/etc/w32-feature.el
index dadd8d1faaa..97a7a5f729d 100644
--- a/etc/w32-feature.el
+++ b/etc/w32-feature.el
@@ -1,6 +1,6 @@
 ;;; w32-feature.el --- Check Availability of Emacs Features  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Phillip Lord <phillip.lord@russet.org.uk>
 
diff --git a/leim/ChangeLog.1 b/leim/ChangeLog.1
index af5a16c385d..ac17527d66f 100644
--- a/leim/ChangeLog.1
+++ b/leim/ChangeLog.1
@@ -2578,7 +2578,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1997-1999, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1997-1999, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/leim/Makefile.in b/leim/Makefile.in
index fbd733b7f66..4c6c3179283 100644
--- a/leim/Makefile.in
+++ b/leim/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1997-2022 Free Software Foundation, Inc.
+# Copyright (C) 1997-2023 Free Software Foundation, Inc.
 # Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 #   2006, 2007, 2008, 2009, 2010, 2011
 #   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/leim/README b/leim/README
index 6a4ec776199..89219f27db2 100644
--- a/leim/README
+++ b/leim/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/leim/leim-ext.el b/leim/leim-ext.el
index 58dd166763f..d145296e3c8 100644
--- a/leim/leim-ext.el
+++ b/leim/leim-ext.el
@@ -1,6 +1,6 @@
 ;;; leim-ext.el --- extra leim configuration   -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H13PRO009
diff --git a/lib-src/ChangeLog.1 b/lib-src/ChangeLog.1
index c5988072e99..84f566262c4 100644
--- a/lib-src/ChangeLog.1
+++ b/lib-src/ChangeLog.1
@@ -8609,7 +8609,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1988-1999, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1988-1999, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in
index cfad3fc3941..b246d832943 100644
--- a/lib-src/Makefile.in
+++ b/lib-src/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1985, 1987-1988, 1993-1994, 2001-2022 Free Software
+# Copyright (C) 1985, 1987-1988, 1993-1994, 2001-2023 Free Software
 # Foundation, Inc.
 
 # This file is part of GNU Emacs.
diff --git a/lib-src/be_resources.cc b/lib-src/be_resources.cc
index ece573a85a6..f77601d3414 100644
--- a/lib-src/be_resources.cc
+++ b/lib-src/be_resources.cc
@@ -1,5 +1,5 @@
 /* Haiku window system support
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/lib-src/ebrowse.c b/lib-src/ebrowse.c
index d3af926b634..469e90d04bb 100644
--- a/lib-src/ebrowse.c
+++ b/lib-src/ebrowse.c
@@ -1,6 +1,6 @@
 /* ebrowse.c --- parsing files for the ebrowse C++ browser
 
-Copyright (C) 1992-2022 Free Software Foundation, Inc.
+Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index af488128ba7..698bf9b50ae 100644
--- a/lib-src/emacsclient.c
+++ b/lib-src/emacsclient.c
@@ -1,6 +1,6 @@
 /* Client process that communicates with GNU Emacs acting as server.
 
-Copyright (C) 1986-2022 Free Software Foundation, Inc.
+Copyright (C) 1986-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 280b5b9df22..2628849d78e 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -28,7 +28,7 @@ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
SOFTWARE, EVEN
 IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2022 Free Software
+Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2023 Free Software
 Foundation, Inc.
 
 This file is not considered part of GNU Emacs.
diff --git a/lib-src/hexl.c b/lib-src/hexl.c
index c074a957a69..ff2466a0a57 100644
--- a/lib-src/hexl.c
+++ b/lib-src/hexl.c
@@ -1,5 +1,5 @@
 /* Convert files for Emacs Hexl mode.
-   Copyright (C) 1989, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1989, 2001-2023 Free Software Foundation, Inc.
 
 Author: Keith Gabryelski (according to authors.el)
 
diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c
index b5beffce19a..1087562dc0b 100644
--- a/lib-src/make-docfile.c
+++ b/lib-src/make-docfile.c
@@ -1,6 +1,6 @@
 /* Generate doc-string file for GNU Emacs from source files.
 
-Copyright (C) 1985-1986, 1992-1994, 1997, 1999-2022 Free Software
+Copyright (C) 1985-1986, 1992-1994, 1997, 1999-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/lib-src/make-fingerprint.c b/lib-src/make-fingerprint.c
index ea9fe941e4d..7931616096b 100644
--- a/lib-src/make-fingerprint.c
+++ b/lib-src/make-fingerprint.c
@@ -1,6 +1,6 @@
 /* Hash inputs and generate C file with the digest.
 
-Copyright (C) 1985-1986, 1992-1994, 1997, 1999-2016, 2018-2022 Free
+Copyright (C) 1985-1986, 1992-1994, 1997, 1999-2016, 2018-2023 Free
 Software Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/lib-src/movemail.c b/lib-src/movemail.c
index aa3c15e72e8..8119046a916 100644
--- a/lib-src/movemail.c
+++ b/lib-src/movemail.c
@@ -1,7 +1,7 @@
 /* movemail foo bar -- move file foo to file bar,
    locking file foo the way /bin/mail respects.
 
-Copyright (C) 1986, 1992-1994, 1996, 1999, 2001-2022 Free Software
+Copyright (C) 1986, 1992-1994, 1996, 1999, 2001-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/lib-src/ntlib.c b/lib-src/ntlib.c
index e0d5f0c6b8e..252bc576c94 100644
--- a/lib-src/ntlib.c
+++ b/lib-src/ntlib.c
@@ -1,6 +1,6 @@
 /* Utility and Unix shadow routines for GNU Emacs support programs on NT.
 
-Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 
 Author: Geoff Voelker (voelker@cs.washington.edu)
 Created: 10-8-94
diff --git a/lib-src/ntlib.h b/lib-src/ntlib.h
index ff85beeaa6a..f47fb5745de 100644
--- a/lib-src/ntlib.h
+++ b/lib-src/ntlib.h
@@ -1,5 +1,5 @@
 /* Utility and Unix shadow routines for GNU Emacs support programs on NT.
-   Copyright (C) 1994, 2002-2022 Free Software Foundation, Inc.
+   Copyright (C) 1994, 2002-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/lib-src/pop.c b/lib-src/pop.c
index cfe2ece6604..c58103a7e65 100644
--- a/lib-src/pop.c
+++ b/lib-src/pop.c
@@ -1,6 +1,6 @@
 /* pop.c: client routines for talking to a POP3-protocol post-office server
 
-Copyright (C) 1991, 1993, 1996-1997, 1999, 2001-2022 Free Software
+Copyright (C) 1991, 1993, 1996-1997, 1999, 2001-2023 Free Software
 Foundation, Inc.
 
 Author: Jonathan Kamens <jik@security.ov.com>
diff --git a/lib-src/pop.h b/lib-src/pop.h
index 2c9b3e0bec2..2f48272edb2 100644
--- a/lib-src/pop.h
+++ b/lib-src/pop.h
@@ -1,5 +1,5 @@
 /* pop.h: Header file for the "pop.c" client POP3 protocol.
-   Copyright (C) 1991, 1993, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1991, 1993, 2001-2023 Free Software Foundation, Inc.
 
 Author: Jonathan Kamens <jik@security.ov.com>
 
diff --git a/lib-src/rcs2log b/lib-src/rcs2log
index 2a72404d9e5..65fb1c9598f 100755
--- a/lib-src/rcs2log
+++ b/lib-src/rcs2log
@@ -2,7 +2,7 @@
 
 # RCS to ChangeLog generator
 
-# Copyright (C) 1992-1998, 2001-2022 Free Software Foundation, Inc.
+# Copyright (C) 1992-1998, 2001-2023 Free Software Foundation, Inc.
 
 # Author: Paul Eggert <eggert@cs.ucla.edu>
 
@@ -20,7 +20,7 @@
 # along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 
-Copyright='Copyright (C) 2022 Free Software Foundation, Inc.
+Copyright='Copyright (C) 2023 Free Software Foundation, Inc.
 This program comes with NO WARRANTY, to the extent permitted by law.
 You may redistribute copies of this program
 under the terms of the GNU General Public License.
diff --git a/lib-src/seccomp-filter.c b/lib-src/seccomp-filter.c
index 69b56aed5c5..e83c2142e51 100644
--- a/lib-src/seccomp-filter.c
+++ b/lib-src/seccomp-filter.c
@@ -1,6 +1,6 @@
 /* Generate a Secure Computing filter definition file.
 
-Copyright (C) 2020-2022 Free Software Foundation, Inc.
+Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/lib-src/update-game-score.c b/lib-src/update-game-score.c
index 8d6cca79c9f..83167f59b8a 100644
--- a/lib-src/update-game-score.c
+++ b/lib-src/update-game-score.c
@@ -1,6 +1,6 @@
 /* update-game-score.c --- Update a score file
 
-Copyright (C) 2002-2022 Free Software Foundation, Inc.
+Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 Author: Colin Walters <walters@debian.org>
 
diff --git a/lib/Makefile.in b/lib/Makefile.in
index 8b950136241..71199c32277 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright 2017-2022 Free Software Foundation, Inc.
+# Copyright 2017-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/lib/_Noreturn.h b/lib/_Noreturn.h
index e914627a887..fa15b1b25e8 100644
--- a/lib/_Noreturn.h
+++ b/lib/_Noreturn.h
@@ -1,5 +1,5 @@
 /* A C macro for declaring that a function does not return.
-   Copyright (C) 2011-2022 Free Software Foundation, Inc.
+   Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as published
diff --git a/lib/acl-errno-valid.c b/lib/acl-errno-valid.c
index a364e413256..a4fd575e3f3 100644
--- a/lib/acl-errno-valid.c
+++ b/lib/acl-errno-valid.c
@@ -1,6 +1,6 @@
 /* Test whether ACLs are well supported on this system.
 
-   Copyright 2013-2022 Free Software Foundation, Inc.
+   Copyright 2013-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/acl-internal.c b/lib/acl-internal.c
index be244c67a2a..fbe9b2c9a06 100644
--- a/lib/acl-internal.c
+++ b/lib/acl-internal.c
@@ -1,6 +1,6 @@
 /* Test whether a file has a nontrivial ACL.  -*- coding: utf-8 -*-
 
-   Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/acl-internal.h b/lib/acl-internal.h
index 94553fab254..c97e847cdc5 100644
--- a/lib/acl-internal.h
+++ b/lib/acl-internal.h
@@ -1,6 +1,6 @@
 /* Internal implementation of access control lists.  -*- coding: utf-8 -*-
 
-   Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/acl.h b/lib/acl.h
index 0be6ef1cea3..58e5797179e 100644
--- a/lib/acl.h
+++ b/lib/acl.h
@@ -1,6 +1,6 @@
 /* acl.c - access control lists
 
-   Copyright (C) 2002, 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2008-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/acl_entries.c b/lib/acl_entries.c
index 677de23e0cb..a59ace3f404 100644
--- a/lib/acl_entries.c
+++ b/lib/acl_entries.c
@@ -1,6 +1,6 @@
 /* Return the number of entries in an ACL.
 
-   Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/af_alg.h b/lib/af_alg.h
index ddd6568b8e3..e8ffb3f7a09 100644
--- a/lib/af_alg.h
+++ b/lib/af_alg.h
@@ -1,5 +1,5 @@
 /* af_alg.h - Compute message digests from file streams and buffers.
-   Copyright (C) 2018-2022 Free Software Foundation, Inc.
+   Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/alloca.in.h b/lib/alloca.in.h
index e2b146138d7..b9ce9ef5603 100644
--- a/lib/alloca.in.h
+++ b/lib/alloca.in.h
@@ -1,7 +1,7 @@
 /* Memory allocation on the stack.
 
-   Copyright (C) 1995, 1999, 2001-2004, 2006-2022 Free Software Foundation,
-   Inc.
+   Copyright (C) 1995, 1999, 2001-2004, 2006-2023 Free Software
+   Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/allocator.c b/lib/allocator.c
index 42c891805d1..922be1fce8d 100644
--- a/lib/allocator.c
+++ b/lib/allocator.c
@@ -1,6 +1,6 @@
 /* Memory allocators such as malloc+free.
 
-   Copyright (C) 2011-2022 Free Software Foundation, Inc.
+   Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/allocator.h b/lib/allocator.h
index 3e698ced83a..0c830d01cda 100644
--- a/lib/allocator.h
+++ b/lib/allocator.h
@@ -1,6 +1,6 @@
 /* Memory allocators such as malloc+free.
 
-   Copyright (C) 2011-2022 Free Software Foundation, Inc.
+   Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/arg-nonnull.h b/lib/arg-nonnull.h
index e4513efe955..9498ae1f7da 100644
--- a/lib/arg-nonnull.h
+++ b/lib/arg-nonnull.h
@@ -1,5 +1,5 @@
 /* A C macro for declaring that specific arguments must not be NULL.
-   Copyright (C) 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as published
diff --git a/lib/assert.in.h b/lib/assert.in.h
index 2c358ba62e7..b0ab99c776e 100644
--- a/lib/assert.in.h
+++ b/lib/assert.in.h
@@ -1,5 +1,5 @@
 /* Substitute for and wrapper around <assert.h>
-   Copyright (C) 2011-2022 Free Software Foundation, Inc.
+   Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/at-func.c b/lib/at-func.c
index afcc819beb0..13e3fb32056 100644
--- a/lib/at-func.c
+++ b/lib/at-func.c
@@ -1,5 +1,5 @@
 /* Define at-style functions like fstatat, unlinkat, fchownat, etc.
-   Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/attribute.h b/lib/attribute.h
index 378d4f0a80e..36b2978bb2c 100644
--- a/lib/attribute.h
+++ b/lib/attribute.h
@@ -1,6 +1,6 @@
 /* ATTRIBUTE_* macros for using attributes in GCC and similar compilers
 
-   Copyright 2020-2022 Free Software Foundation, Inc.
+   Copyright 2020-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/binary-io.c b/lib/binary-io.c
index ea407fd74f7..28a9e6ed69c 100644
--- a/lib/binary-io.c
+++ b/lib/binary-io.c
@@ -1,5 +1,5 @@
 /* Binary mode I/O.
-   Copyright 2017-2022 Free Software Foundation, Inc.
+   Copyright 2017-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/binary-io.h b/lib/binary-io.h
index 5b7661e2331..dd9829aa88d 100644
--- a/lib/binary-io.h
+++ b/lib/binary-io.h
@@ -1,5 +1,6 @@
 /* Binary mode I/O.
-   Copyright (C) 2001, 2003, 2005, 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2003, 2005, 2008-2023 Free Software Foundation,
+   Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/byteswap.in.h b/lib/byteswap.in.h
index f4746d39954..e61be27e917 100644
--- a/lib/byteswap.in.h
+++ b/lib/byteswap.in.h
@@ -1,5 +1,5 @@
 /* byteswap.h - Byte swapping
-   Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2007, 2009-2023 Free Software Foundation, Inc.
    Written by Oskar Liljeblad <oskar@osk.mine.nu>, 2005.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/c++defs.h b/lib/c++defs.h
index ad181558fbd..8ad46951ad4 100644
--- a/lib/c++defs.h
+++ b/lib/c++defs.h
@@ -1,5 +1,5 @@
 /* C++ compatible function declaration macros.
-   Copyright (C) 2010-2022 Free Software Foundation, Inc.
+   Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as published
diff --git a/lib/c-ctype.c b/lib/c-ctype.c
index a247514cd62..a4343f445f0 100644
--- a/lib/c-ctype.c
+++ b/lib/c-ctype.c
@@ -1,6 +1,6 @@
 /* Character handling in C locale.
 
-   Copyright (C) 2003-2022 Free Software Foundation, Inc.
+   Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/c-ctype.h b/lib/c-ctype.h
index 1202ff8a363..9d093f7f722 100644
--- a/lib/c-ctype.h
+++ b/lib/c-ctype.h
@@ -5,7 +5,8 @@
    <ctype.h> functions' behaviour depends on the current locale set via
    setlocale.
 
-   Copyright (C) 2000-2003, 2006, 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2000-2003, 2006, 2008-2023 Free Software Foundation,
+   Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/c-strcase.h b/lib/c-strcase.h
index 3e874b5ea3a..9bcca01b27c 100644
--- a/lib/c-strcase.h
+++ b/lib/c-strcase.h
@@ -1,5 +1,5 @@
 /* Case-insensitive string comparison functions in C locale.
-   Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2022 Free Software
+   Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2023 Free Software
    Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/c-strcasecmp.c b/lib/c-strcasecmp.c
index 87b993cb2fe..c90c6d6a09c 100644
--- a/lib/c-strcasecmp.c
+++ b/lib/c-strcasecmp.c
@@ -1,5 +1,6 @@
 /* c-strcasecmp.c -- case insensitive string comparator in C locale
-   Copyright (C) 1998-1999, 2005-2006, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 1998-1999, 2005-2006, 2009-2023 Free Software
+   Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/c-strncasecmp.c b/lib/c-strncasecmp.c
index 5a5d30b6e5e..bc30ce0ffc4 100644
--- a/lib/c-strncasecmp.c
+++ b/lib/c-strncasecmp.c
@@ -1,5 +1,6 @@
 /* c-strncasecmp.c -- case insensitive string comparator in C locale
-   Copyright (C) 1998-1999, 2005-2006, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 1998-1999, 2005-2006, 2009-2023 Free Software
+   Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/canonicalize-lgpl.c b/lib/canonicalize-lgpl.c
index 870a663505d..e701297d84b 100644
--- a/lib/canonicalize-lgpl.c
+++ b/lib/canonicalize-lgpl.c
@@ -1,5 +1,5 @@
 /* Return the canonical absolute name of a given file.
-   Copyright (C) 1996-2022 Free Software Foundation, Inc.
+   Copyright (C) 1996-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/careadlinkat.c b/lib/careadlinkat.c
index 6ddc35f798b..1d7db893731 100644
--- a/lib/careadlinkat.c
+++ b/lib/careadlinkat.c
@@ -1,7 +1,7 @@
 /* Read symbolic links into a buffer without size limitation, relative to fd.
 
-   Copyright (C) 2001, 2003-2004, 2007, 2009-2022 Free Software Foundation,
-   Inc.
+   Copyright (C) 2001, 2003-2004, 2007, 2009-2023 Free Software
+   Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/careadlinkat.h b/lib/careadlinkat.h
index 2b559b2cd4c..201d0415fff 100644
--- a/lib/careadlinkat.h
+++ b/lib/careadlinkat.h
@@ -1,6 +1,6 @@
 /* Read symbolic links into a buffer without size limitation, relative to fd.
 
-   Copyright (C) 2011-2022 Free Software Foundation, Inc.
+   Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/cdefs.h b/lib/cdefs.h
index 7b8ed5b344b..09a3d19b23b 100644
--- a/lib/cdefs.h
+++ b/lib/cdefs.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992-2022 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2023 Free Software Foundation, Inc.
    Copyright The GNU Toolchain Authors.
    This file is part of the GNU C Library.
 
diff --git a/lib/cloexec.c b/lib/cloexec.c
index 812be01a06c..ba53d0020b1 100644
--- a/lib/cloexec.c
+++ b/lib/cloexec.c
@@ -1,6 +1,7 @@
 /* cloexec.c - set or clear the close-on-exec descriptor flag
 
-   Copyright (C) 1991, 2004-2006, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 1991, 2004-2006, 2009-2023 Free Software Foundation,
+   Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/cloexec.h b/lib/cloexec.h
index 15d2d5efe20..057fd668c9b 100644
--- a/lib/cloexec.h
+++ b/lib/cloexec.h
@@ -1,6 +1,6 @@
 /* cloexec.c - set or clear the close-on-exec descriptor flag
 
-   Copyright (C) 2004, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/close-stream.c b/lib/close-stream.c
index 0fdca79bf8e..b68b30e6ff0 100644
--- a/lib/close-stream.c
+++ b/lib/close-stream.c
@@ -1,6 +1,7 @@
 /* Close a stream, with nicer error checking than fclose's.
 
-   Copyright (C) 1998-2002, 2004, 2006-2022 Free Software Foundation, Inc.
+   Copyright (C) 1998-2002, 2004, 2006-2023 Free Software Foundation,
+   Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/close-stream.h b/lib/close-stream.h
index 2b4c8ed8f5b..3b52cc66c3d 100644
--- a/lib/close-stream.h
+++ b/lib/close-stream.h
@@ -1,6 +1,6 @@
 /* Close a stream, with nicer error checking than fclose's.
 
-   Copyright (C) 2006-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published
diff --git a/lib/copy-file-range.c b/lib/copy-file-range.c
index 1ec7f4de67c..747a5a8ad1d 100644
--- a/lib/copy-file-range.c
+++ b/lib/copy-file-range.c
@@ -1,5 +1,5 @@
 /* Stub for copy_file_range
-   Copyright 2019-2022 Free Software Foundation, Inc.
+   Copyright 2019-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/count-leading-zeros.c b/lib/count-leading-zeros.c
index 8eb1d2c1005..949f156eab1 100644
--- a/lib/count-leading-zeros.c
+++ b/lib/count-leading-zeros.c
@@ -1,6 +1,6 @@
 /* Count the number of leading 0 bits in a word.
 
-   Copyright (C) 2012-2022 Free Software Foundation, Inc.
+   Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/count-leading-zeros.h b/lib/count-leading-zeros.h
index 4b4f5d4f9a1..99151d695bf 100644
--- a/lib/count-leading-zeros.h
+++ b/lib/count-leading-zeros.h
@@ -1,5 +1,5 @@
 /* count-leading-zeros.h -- counts the number of leading 0 bits in a word.
-   Copyright (C) 2012-2022 Free Software Foundation, Inc.
+   Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/count-one-bits.c b/lib/count-one-bits.c
index 67a61dad61e..8a348f2e5a0 100644
--- a/lib/count-one-bits.c
+++ b/lib/count-one-bits.c
@@ -1,6 +1,6 @@
 /* Count the number of 1-bits in a word.
 
-   Copyright (C) 2012-2022 Free Software Foundation, Inc.
+   Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/count-one-bits.h b/lib/count-one-bits.h
index 7d24c45a0d3..01a60b77b85 100644
--- a/lib/count-one-bits.h
+++ b/lib/count-one-bits.h
@@ -1,5 +1,5 @@
 /* count-one-bits.h -- counts the number of 1-bits in a word.
-   Copyright (C) 2007-2022 Free Software Foundation, Inc.
+   Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/count-trailing-zeros.c b/lib/count-trailing-zeros.c
index 143dcda55d1..f6fddab4232 100644
--- a/lib/count-trailing-zeros.c
+++ b/lib/count-trailing-zeros.c
@@ -1,6 +1,6 @@
 /* Count the number of trailing 0 bits in a word.
 
-   Copyright 2013-2022 Free Software Foundation, Inc.
+   Copyright 2013-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/count-trailing-zeros.h b/lib/count-trailing-zeros.h
index 61fbdf29801..ef8e164126a 100644
--- a/lib/count-trailing-zeros.h
+++ b/lib/count-trailing-zeros.h
@@ -1,5 +1,5 @@
 /* count-trailing-zeros.h -- counts the number of trailing 0 bits in a word.
-   Copyright 2013-2022 Free Software Foundation, Inc.
+   Copyright 2013-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/diffseq.h b/lib/diffseq.h
index a8b0e7bd408..ad3f258ab6b 100644
--- a/lib/diffseq.h
+++ b/lib/diffseq.h
@@ -1,7 +1,7 @@
 /* Analyze differences between two vectors.
 
-   Copyright (C) 1988-1989, 1992-1995, 2001-2004, 2006-2022 Free Software
-   Foundation, Inc.
+   Copyright (C) 1988-1989, 1992-1995, 2001-2004, 2006-2023 Free
+   Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/dirent.in.h b/lib/dirent.in.h
index f28288d1acc..2aaabd054a8 100644
--- a/lib/dirent.in.h
+++ b/lib/dirent.in.h
@@ -1,5 +1,5 @@
 /* A GNU-like <dirent.h>.
-   Copyright (C) 2006-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/dirfd.c b/lib/dirfd.c
index 4104683fbf0..b2b1d25cdbd 100644
--- a/lib/dirfd.c
+++ b/lib/dirfd.c
@@ -1,6 +1,6 @@
 /* dirfd.c -- return the file descriptor associated with an open DIR*
 
-   Copyright (C) 2001, 2006, 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2006, 2008-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/dtoastr.c b/lib/dtoastr.c
index 71af14c9df4..66b50995c79 100644
--- a/lib/dtoastr.c
+++ b/lib/dtoastr.c
@@ -1,6 +1,6 @@
 /* Convert 'double' to accurate string.
 
-   Copyright (C) 2010-2022 Free Software Foundation, Inc.
+   Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published
diff --git a/lib/dtotimespec.c b/lib/dtotimespec.c
index b62a8bd6cfc..28a44b69171 100644
--- a/lib/dtotimespec.c
+++ b/lib/dtotimespec.c
@@ -1,6 +1,6 @@
 /* Convert double to timespec.
 
-   Copyright (C) 2011-2022 Free Software Foundation, Inc.
+   Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/dup2.c b/lib/dup2.c
index 1c766ab38ec..1597d9d1e6e 100644
--- a/lib/dup2.c
+++ b/lib/dup2.c
@@ -1,6 +1,7 @@
 /* Duplicate an open file descriptor to a specified file descriptor.
 
-   Copyright (C) 1999, 2004-2007, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2004-2007, 2009-2023 Free Software Foundation,
+   Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/dynarray.h b/lib/dynarray.h
index ca6439d3adc..9155910934f 100644
--- a/lib/dynarray.h
+++ b/lib/dynarray.h
@@ -1,5 +1,5 @@
 /* Type-safe arrays which grow dynamically.
-   Copyright 2021-2022 Free Software Foundation, Inc.
+   Copyright 2021-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/eloop-threshold.h b/lib/eloop-threshold.h
index 8b314571198..510f261795d 100644
--- a/lib/eloop-threshold.h
+++ b/lib/eloop-threshold.h
@@ -1,5 +1,5 @@
 /* Threshold at which to diagnose ELOOP.  Generic version.
-   Copyright (C) 2012-2022 Free Software Foundation, Inc.
+   Copyright (C) 2012-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/errno.in.h b/lib/errno.in.h
index 3ec18456940..3dda9c260e6 100644
--- a/lib/errno.in.h
+++ b/lib/errno.in.h
@@ -1,6 +1,6 @@
 /* A POSIX-like <errno.h>.
 
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/euidaccess.c b/lib/euidaccess.c
index 97388c73bbb..c2ecbeff52a 100644
--- a/lib/euidaccess.c
+++ b/lib/euidaccess.c
@@ -1,6 +1,6 @@
 /* euidaccess -- check if effective user id can access file
 
-   Copyright (C) 1990-1991, 1995, 1998, 2000, 2003-2006, 2008-2022 Free
+   Copyright (C) 1990-1991, 1995, 1998, 2000, 2003-2006, 2008-2023 Free
    Software Foundation, Inc.
 
    This file is part of the GNU C Library.
diff --git a/lib/execinfo.c b/lib/execinfo.c
index 4320b16c63d..2048d00f5fb 100644
--- a/lib/execinfo.c
+++ b/lib/execinfo.c
@@ -1,6 +1,6 @@
 /* Information about executables.
 
-   Copyright (C) 2012-2022 Free Software Foundation, Inc.
+   Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/execinfo.in.h b/lib/execinfo.in.h
index 03c551a87b3..ff9293b6327 100644
--- a/lib/execinfo.in.h
+++ b/lib/execinfo.in.h
@@ -1,6 +1,6 @@
 /* Information about executables.
 
-   Copyright (C) 2012-2022 Free Software Foundation, Inc.
+   Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
diff --git a/lib/explicit_bzero.c b/lib/explicit_bzero.c
new file mode 100644
index 00000000000..c33cab9e6d5
--- /dev/null
+++ b/lib/explicit_bzero.c
@@ -0,0 +1,74 @@
+/* Erasure of sensitive data, generic implementation.
+   Copyright (C) 2016-2023 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+/* An assembler implementation of explicit_bzero can be created as an
+   assembler alias of an optimized bzero implementation.
+   Architecture-specific implementations also need to define
+   __explicit_bzero_chk.  */
+
+#if !_LIBC
+# include <config.h>
+#endif
+
+/* memset_s need this define */
+#if HAVE_MEMSET_S
+# define __STDC_WANT_LIB_EXT1__ 1
+#endif
+
+#include <string.h>
+
+#if defined _WIN32 && !defined __CYGWIN__
+# define  WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+
+#if _LIBC
+/* glibc-internal users use __explicit_bzero_chk, and explicit_bzero
+   redirects to that.  */
+# undef explicit_bzero
+#endif
+
+/* Set LEN bytes of S to 0.  The compiler will not delete a call to
+   this function, even if S is dead after the call.  */
+void
+explicit_bzero (void *s, size_t len)
+{
+#if defined _WIN32 && !defined __CYGWIN__
+  (void) SecureZeroMemory (s, len);
+#elif HAVE_EXPLICIT_MEMSET
+  explicit_memset (s, '\0', len);
+#elif HAVE_MEMSET_S
+  (void) memset_s (s, len, '\0', len);
+#elif defined __GNUC__ && !defined __clang__
+  memset (s, '\0', len);
+  /* Compiler barrier.  */
+  asm volatile ("" ::: "memory");
+#elif defined __clang__
+  memset (s, '\0', len);
+  /* Compiler barrier.  */
+  /* With asm ("" ::: "memory") LLVM analyzes uses of 's' and finds that the
+     whole thing is dead and eliminates it.  Use 'g' to work around this
+     problem.  See <https://bugs.llvm.org/show_bug.cgi?id=15495#c11>.  */
+  __asm__ volatile ("" : : "g"(s) : "memory");
+#else
+  /* Invoke memset through a volatile function pointer.  This defeats compiler
+     optimizations.  */
+  void * (* const volatile volatile_memset) (void *, int, size_t) = memset;
+  (void) volatile_memset (s, '\0', len);
+#endif
+}
diff --git a/lib/faccessat.c b/lib/faccessat.c
index c1737d03a10..ac8977cfd65 100644
--- a/lib/faccessat.c
+++ b/lib/faccessat.c
@@ -1,5 +1,5 @@
 /* Check the access rights of a file relative to an open directory.
-   Copyright (C) 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/fchmodat.c b/lib/fchmodat.c
index 164e2c4a95f..a7b70a2af2c 100644
--- a/lib/fchmodat.c
+++ b/lib/fchmodat.c
@@ -1,5 +1,5 @@
 /* Change the protections of file relative to an open directory.
-   Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/fcntl.c b/lib/fcntl.c
index f9753c4035f..e220800845b 100644
--- a/lib/fcntl.c
+++ b/lib/fcntl.c
@@ -1,6 +1,6 @@
 /* Provide file descriptor control.
 
-   Copyright (C) 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/fcntl.in.h b/lib/fcntl.in.h
index 9270ced8973..e034eaf9f5a 100644
--- a/lib/fcntl.in.h
+++ b/lib/fcntl.in.h
@@ -1,6 +1,6 @@
 /* Like <fcntl.h>, but with non-working flags defined to 0.
 
-   Copyright (C) 2006-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/fdopendir.c b/lib/fdopendir.c
index c2b0e1ed347..aa841e3e819 100644
--- a/lib/fdopendir.c
+++ b/lib/fdopendir.c
@@ -1,5 +1,5 @@
 /* provide a replacement fdopendir function
-   Copyright (C) 2004-2022 Free Software Foundation, Inc.
+   Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/file-has-acl.c b/lib/file-has-acl.c
index e02f0626ad3..d0e11e631ca 100644
--- a/lib/file-has-acl.c
+++ b/lib/file-has-acl.c
@@ -1,6 +1,6 @@
 /* Test whether a file has a nontrivial ACL.  -*- coding: utf-8 -*-
 
-   Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -29,9 +29,97 @@
 
 #include "acl-internal.h"
 
-#if GETXATTR_WITH_POSIX_ACLS
+#if USE_ACL && GETXATTR_WITH_POSIX_ACLS
+# include <string.h>
+# include <arpa/inet.h>
 # include <sys/xattr.h>
 # include <linux/xattr.h>
+# ifndef XATTR_NAME_NFSV4_ACL
+#  define XATTR_NAME_NFSV4_ACL "system.nfs4_acl"
+# endif
+
+enum {
+  /* ACE4_ACCESS_ALLOWED_ACE_TYPE = 0x00000000, */
+  ACE4_ACCESS_DENIED_ACE_TYPE  = 0x00000001,
+  ACE4_IDENTIFIER_GROUP        = 0x00000040
+};
+
+/* Return 1 if given ACL in XDR format is non-trivial, 0 if it is trivial.
+   -1 upon failure to determine it.  Possibly change errno.  Assume that
+   the ACL is valid, except avoid undefined behavior even if invalid.
+
+   See <https://linux.die.net/man/5/nfs4_acl>.  The NFSv4 acls are
+   defined in Internet RFC 7530 and as such, every NFSv4 server
+   supporting ACLs should support NFSv4 ACLs (they differ from from
+   POSIX draft ACLs).  The ACLs can be obtained via the
+   nfsv4-acl-tools, e.g., the nfs4_getfacl command.  Gnulib provides
+   only basic support of NFSv4 ACLs, i.e., recognize trivial vs
+   nontrivial ACLs.  */
+
+static int
+acl_nfs4_nontrivial (uint32_t *xattr, ssize_t nbytes)
+{
+  enum { BYTES_PER_NETWORK_UINT = 4};
+
+  /* Grab the number of aces in the acl.  */
+  nbytes -= BYTES_PER_NETWORK_UINT;
+  if (nbytes < 0)
+    return -1;
+  uint32_t num_aces = ntohl (*xattr++);
+  if (6 < num_aces)
+    return 1;
+  int ace_found = 0;
+
+  for (int ace_n = 0; ace_n < num_aces; ace_n++)
+    {
+      /* Get the acl type and flag.  Skip the mask; it's too risky to
+         test it and it does not seem to be needed.  Get the wholen.  */
+      nbytes -= 4 * BYTES_PER_NETWORK_UINT;
+      if (nbytes < 0)
+        return -1;
+      uint32_t type = ntohl (xattr[0]);
+      uint32_t flag = ntohl (xattr[1]);
+      uint32_t wholen = ntohl (xattr[3]);
+      xattr += 4;
+      int64_t wholen4 = wholen;
+      wholen4 = ((wholen4 + (BYTES_PER_NETWORK_UINT))
+                 & ~ (BYTES_PER_NETWORK_UINT - 1));
+
+      /* Trivial ACLs have only ACE4_ACCESS_ALLOWED_ACE_TYPE or
+         ACE4_ACCESS_DENIED_ACE_TYPE.  */
+      if (ACE4_ACCESS_DENIED_ACE_TYPE < type)
+        return 1;
+
+      /* RFC 7530 says FLAG should be 0, but be generous to NetApp and
+         also accept the group flag.  */
+      if (flag & ~ACE4_IDENTIFIER_GROUP)
+        return 1;
+
+      /* Get the who string.  Check NBYTES - WHOLEN4 before storing
+         into NBYTES, to avoid truncation on conversion.  */
+      if (nbytes - wholen4 < 0)
+        return -1;
+      nbytes -= wholen4;
+
+      /* For a trivial ACL, max 6 (typically 3) ACEs, 3 allow, 3 deny.
+         Check that there is at most one ACE of each TYPE and WHO.  */
+      int who2
+        = (wholen == 6 && memcmp (xattr, "OWNER@", 6) == 0 ? 0
+           : wholen == 6 && memcmp (xattr, "GROUP@", 6) == 0 ? 2
+           : wholen == 9 && memcmp (xattr, "EVERYONE@", 9) == 0 ? 4
+           : -1);
+      if (who2 < 0)
+        return 1;
+      int ace_found_bit = 1 << (who2 | type);
+      if (ace_found & ace_found_bit)
+        return 1;
+      ace_found |= ace_found_bit;
+
+      xattr = (uint32_t *) ((char *) xattr + wholen4);
+    }
+
+  return 0;
+}
 #endif
 
 /* Return 1 if NAME has a nontrivial access control list,
@@ -51,6 +139,7 @@ file_has_acl (char const *name, struct stat const *sb)
 # if GETXATTR_WITH_POSIX_ACLS
 
       ssize_t ret;
+      int initial_errno = errno;
 
       ret = getxattr (name, XATTR_NAME_POSIX_ACL_ACCESS, NULL, 0);
       if (ret < 0 && errno == ENODATA)
@@ -67,6 +156,35 @@ file_has_acl (char const *name, struct stat const *sb)
             return 1;
         }
 
+      if (ret < 0)
+        {
+          /* Check for NFSv4 ACLs.  The max length of a trivial
+             ACL is 6 words for owner, 6 for group, 7 for everyone,
+             all times 2 because there are both allow and deny ACEs.
+             There are 6 words for owner because of type, flag, mask,
+             wholen, "OWNER@"+pad and similarly for group; everyone is
+             another word to hold "EVERYONE@".  */
+          uint32_t xattr[2 * (6 + 6 + 7)];
+
+          ret = getxattr (name, XATTR_NAME_NFSV4_ACL, xattr, sizeof xattr);
+          if (ret < 0)
+            switch (errno)
+              {
+              case ENODATA: return 0;
+              case ERANGE : return 1; /* ACL must be nontrivial.  */
+              }
+          else
+            {
+              /* It looks like a trivial ACL, but investigate further.  */
+              ret = acl_nfs4_nontrivial (xattr, ret);
+              if (ret < 0)
+                {
+                  errno = EINVAL;
+                  return ret;
+                }
+              errno = initial_errno;
+            }
+        }
       if (ret < 0)
         return - acl_errno_valid (errno);
       return ret;
diff --git a/lib/filemode.c b/lib/filemode.c
index a8cbea844c8..318d287f27d 100644
--- a/lib/filemode.c
+++ b/lib/filemode.c
@@ -1,6 +1,6 @@
 /* filemode.c -- make a string describing file modes
 
-   Copyright (C) 1985, 1990, 1993, 1998-2000, 2004, 2006, 2009-2022 Free
+   Copyright (C) 1985, 1990, 1993, 1998-2000, 2004, 2006, 2009-2023 Free
    Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/filemode.h b/lib/filemode.h
index bf38181cdcd..d456cc585b3 100644
--- a/lib/filemode.h
+++ b/lib/filemode.h
@@ -1,7 +1,7 @@
 /* Make a string describing file modes.
 
-   Copyright (C) 1998-1999, 2003, 2006, 2009-2022 Free Software Foundation,
-   Inc.
+   Copyright (C) 1998-1999, 2003, 2006, 2009-2023 Free Software
+   Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/filename.h b/lib/filename.h
index ab77ca2df91..a2400a9dfe3 100644
--- a/lib/filename.h
+++ b/lib/filename.h
@@ -1,5 +1,5 @@
 /* Basic filename support macros.
-   Copyright (C) 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/filevercmp.c b/lib/filevercmp.c
index 844505a6bf7..78e1faff536 100644
--- a/lib/filevercmp.c
+++ b/lib/filevercmp.c
@@ -2,7 +2,7 @@
 
    Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk>
    Copyright (C) 2001 Anthony Towns <aj@azure.humbug.org.au>
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/filevercmp.h b/lib/filevercmp.h
index 57949760b25..6b81ab32a7f 100644
--- a/lib/filevercmp.h
+++ b/lib/filevercmp.h
@@ -2,7 +2,7 @@
 
    Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk>
    Copyright (C) 2001 Anthony Towns <aj@azure.humbug.org.au>
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/fingerprint.c b/lib/fingerprint.c
index e450d317d72..d83de2245e8 100644
--- a/lib/fingerprint.c
+++ b/lib/fingerprint.c
@@ -1,6 +1,6 @@
 /* Placeholder fingerprint for Emacs
 
-Copyright 2019-2022 Free Software Foundation, Inc.
+Copyright 2019-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/lib/fingerprint.h b/lib/fingerprint.h
index d683d0a37a0..0bb099ceeee 100644
--- a/lib/fingerprint.h
+++ b/lib/fingerprint.h
@@ -1,6 +1,6 @@
 /* Header file for the Emacs build fingerprint.
 
-Copyright (C) 2016, 2018-2022 Free Software Foundation, Inc.
+Copyright (C) 2016, 2018-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/lib/flexmember.h b/lib/flexmember.h
index 1545639f754..a6cc876a6d5 100644
--- a/lib/flexmember.h
+++ b/lib/flexmember.h
@@ -1,6 +1,6 @@
 /* Sizes of structs with flexible array members.
 
-   Copyright 2016-2022 Free Software Foundation, Inc.
+   Copyright 2016-2023 Free Software Foundation, Inc.
 
    This file is part of the GNU C Library.
 
diff --git a/lib/fpending.c b/lib/fpending.c
index 6408cff4647..df3cd85f3a6 100644
--- a/lib/fpending.c
+++ b/lib/fpending.c
@@ -1,6 +1,6 @@
 /* fpending.c -- return the number of pending output bytes on a stream
-   Copyright (C) 2000, 2004, 2006-2007, 2009-2022 Free Software Foundation,
-   Inc.
+   Copyright (C) 2000, 2004, 2006-2007, 2009-2023 Free Software
+   Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/fpending.h b/lib/fpending.h
index 43542c5b8ad..fe310384f7e 100644
--- a/lib/fpending.h
+++ b/lib/fpending.h
@@ -1,7 +1,7 @@
 /* Declare __fpending.
 
-   Copyright (C) 2000, 2003, 2005-2006, 2009-2022 Free Software Foundation,
-   Inc.
+   Copyright (C) 2000, 2003, 2005-2006, 2009-2023 Free Software
+   Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/free.c b/lib/free.c
index 86ebe6c6300..372a6b0fecf 100644
--- a/lib/free.c
+++ b/lib/free.c
@@ -1,6 +1,6 @@
 /* Make free() preserve errno.
 
-   Copyright (C) 2003, 2006, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2006, 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/fstatat.c b/lib/fstatat.c
index 6e8344964bc..372965ef5f6 100644
--- a/lib/fstatat.c
+++ b/lib/fstatat.c
@@ -1,6 +1,6 @@
 /* Work around an fstatat bug on Solaris 9.
 
-   Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/fsusage.c b/lib/fsusage.c
index 18f790f6e7b..2be120a06de 100644
--- a/lib/fsusage.c
+++ b/lib/fsusage.c
@@ -1,7 +1,7 @@
 /* fsusage.c -- return space usage of mounted file systems
 
-   Copyright (C) 1991-1992, 1996, 1998-1999, 2002-2006, 2009-2022 Free Software
-   Foundation, Inc.
+   Copyright (C) 1991-1992, 1996, 1998-1999, 2002-2006, 2009-2023 Free
+   Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/fsusage.h b/lib/fsusage.h
index 27085b7b41e..9630b04e001 100644
--- a/lib/fsusage.h
+++ b/lib/fsusage.h
@@ -1,6 +1,6 @@
 /* fsusage.h -- declarations for file system space usage info
 
-   Copyright (C) 1991-1992, 1997, 2003-2006, 2009-2022 Free Software
+   Copyright (C) 1991-1992, 1997, 2003-2006, 2009-2023 Free Software
    Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/fsync.c b/lib/fsync.c
index 9b561ab96ee..51314662872 100644
--- a/lib/fsync.c
+++ b/lib/fsync.c
@@ -7,7 +7,7 @@
 
    Written by Richard W.M. Jones <rjones.at.redhat.com>
 
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/ftoastr.c b/lib/ftoastr.c
index 91057529221..8740a4d86c8 100644
--- a/lib/ftoastr.c
+++ b/lib/ftoastr.c
@@ -1,6 +1,6 @@
 /* floating point to accurate string
 
-   Copyright (C) 2010-2022 Free Software Foundation, Inc.
+   Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/ftoastr.h b/lib/ftoastr.h
index bac32a387e2..1ce1b7a4bc6 100644
--- a/lib/ftoastr.h
+++ b/lib/ftoastr.h
@@ -1,6 +1,6 @@
 /* floating point to accurate string
 
-   Copyright (C) 2010-2022 Free Software Foundation, Inc.
+   Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/futimens.c b/lib/futimens.c
index bc3e41a9439..5bb30493c7e 100644
--- a/lib/futimens.c
+++ b/lib/futimens.c
@@ -1,5 +1,5 @@
 /* Set the access and modification time of an open fd.
-   Copyright (C) 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/get-permissions.c b/lib/get-permissions.c
index ff79adae72f..545ad23195b 100644
--- a/lib/get-permissions.c
+++ b/lib/get-permissions.c
@@ -1,6 +1,6 @@
 /* Get permissions of a file.  -*- coding: utf-8 -*-
 
-   Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/getdtablesize.c b/lib/getdtablesize.c
index 793e0f8894e..ac2d1753a6b 100644
--- a/lib/getdtablesize.c
+++ b/lib/getdtablesize.c
@@ -1,5 +1,5 @@
 /* getdtablesize() function: Return maximum possible file descriptor value + 1.
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2008.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/getgroups.c b/lib/getgroups.c
index f7abd726671..6a2bda8d71e 100644
--- a/lib/getgroups.c
+++ b/lib/getgroups.c
@@ -1,6 +1,7 @@
 /* provide consistent interface to getgroups for systems that don't allow N==0
 
-   Copyright (C) 1996, 1999, 2003, 2006-2022 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1999, 2003, 2006-2023 Free Software Foundation,
+   Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/getloadavg.c b/lib/getloadavg.c
index 1fddee97afd..37fcea0a76b 100644
--- a/lib/getloadavg.c
+++ b/lib/getloadavg.c
@@ -1,7 +1,7 @@
 /* Get the system load averages.
 
-   Copyright (C) 1985-1989, 1991-1995, 1997, 1999-2000, 2003-2022 Free Software
-   Foundation, Inc.
+   Copyright (C) 1985-1989, 1991-1995, 1997, 1999-2000, 2003-2023 Free
+   Software Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with gnulib.
    Bugs can be reported to bug-gnulib@gnu.org.
diff --git a/lib/getopt-cdefs.in.h b/lib/getopt-cdefs.in.h
index b6dd913caf9..e76c78cb212 100644
--- a/lib/getopt-cdefs.in.h
+++ b/lib/getopt-cdefs.in.h
@@ -1,5 +1,5 @@
 /* getopt-on-non-glibc compatibility macros.
-   Copyright (C) 1989-2022 Free Software Foundation, Inc.
+   Copyright (C) 1989-2023 Free Software Foundation, Inc.
    This file is part of gnulib.
    Unlike most of the getopt implementation, it is NOT shared
    with the GNU C Library.
diff --git a/lib/getopt-core.h b/lib/getopt-core.h
index 1c40ecc833f..c5dd49363f0 100644
--- a/lib/getopt-core.h
+++ b/lib/getopt-core.h
@@ -1,5 +1,5 @@
 /* Declarations for getopt (basic, portable features only).
-   Copyright (C) 1989-2022 Free Software Foundation, Inc.
+   Copyright (C) 1989-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library and is also part of gnulib.
    Patches to this file should be submitted to both projects.
 
diff --git a/lib/getopt-ext.h b/lib/getopt-ext.h
index d661fcc5548..d37c29328b2 100644
--- a/lib/getopt-ext.h
+++ b/lib/getopt-ext.h
@@ -1,5 +1,5 @@
 /* Declarations for getopt (GNU extensions).
-   Copyright (C) 1989-2022 Free Software Foundation, Inc.
+   Copyright (C) 1989-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library and is also part of gnulib.
    Patches to this file should be submitted to both projects.
 
diff --git a/lib/getopt-pfx-core.h b/lib/getopt-pfx-core.h
index 3eead0e04e8..3a2fde5ad4f 100644
--- a/lib/getopt-pfx-core.h
+++ b/lib/getopt-pfx-core.h
@@ -1,5 +1,5 @@
 /* getopt (basic, portable features) gnulib wrapper header.
-   Copyright (C) 1989-2022 Free Software Foundation, Inc.
+   Copyright (C) 1989-2023 Free Software Foundation, Inc.
    This file is part of gnulib.
    Unlike most of the getopt implementation, it is NOT shared
    with the GNU C Library.
diff --git a/lib/getopt-pfx-ext.h b/lib/getopt-pfx-ext.h
index 85a6cb5db3d..8578d72530a 100644
--- a/lib/getopt-pfx-ext.h
+++ b/lib/getopt-pfx-ext.h
@@ -1,5 +1,5 @@
 /* getopt (GNU extensions) gnulib wrapper header.
-   Copyright (C) 1989-2022 Free Software Foundation, Inc.
+   Copyright (C) 1989-2023 Free Software Foundation, Inc.
    This file is part of gnulib.
    Unlike most of the getopt implementation, it is NOT shared
    with the GNU C Library.
diff --git a/lib/getopt.c b/lib/getopt.c
index 128dc7fcf54..1e2441c4afe 100644
--- a/lib/getopt.c
+++ b/lib/getopt.c
@@ -1,5 +1,5 @@
 /* Getopt for GNU.
-   Copyright (C) 1987-2022 Free Software Foundation, Inc.
+   Copyright (C) 1987-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library and is also part of gnulib.
    Patches to this file should be submitted to both projects.
 
diff --git a/lib/getopt.in.h b/lib/getopt.in.h
index 9bc50ee2be5..0867d365f47 100644
--- a/lib/getopt.in.h
+++ b/lib/getopt.in.h
@@ -1,5 +1,5 @@
 /* Declarations for getopt.
-   Copyright (C) 1989-2022 Free Software Foundation, Inc.
+   Copyright (C) 1989-2023 Free Software Foundation, Inc.
    This file is part of gnulib.
    Unlike most of the getopt implementation, it is NOT shared
    with the GNU C Library, which supplies a different version of
diff --git a/lib/getopt1.c b/lib/getopt1.c
index 990eee1b64f..49323aa8ed1 100644
--- a/lib/getopt1.c
+++ b/lib/getopt1.c
@@ -1,5 +1,5 @@
 /* getopt_long and getopt_long_only entry points for GNU getopt.
-   Copyright (C) 1987-2022 Free Software Foundation, Inc.
+   Copyright (C) 1987-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library and is also part of gnulib.
    Patches to this file should be submitted to both projects.
 
diff --git a/lib/getopt_int.h b/lib/getopt_int.h
index ccdbb973a51..4d9e24beebc 100644
--- a/lib/getopt_int.h
+++ b/lib/getopt_int.h
@@ -1,5 +1,5 @@
 /* Internal declarations for getopt.
-   Copyright (C) 1989-2022 Free Software Foundation, Inc.
+   Copyright (C) 1989-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library and is also part of gnulib.
    Patches to this file should be submitted to both projects.
 
diff --git a/lib/getrandom.c b/lib/getrandom.c
index c05a48167ed..19bb3429baf 100644
--- a/lib/getrandom.c
+++ b/lib/getrandom.c
@@ -1,6 +1,6 @@
 /* Obtain a series of random bytes.
 
-   Copyright 2020-2022 Free Software Foundation, Inc.
+   Copyright 2020-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/gettext.h b/lib/gettext.h
index b3577a043f8..582886f9f51 100644
--- a/lib/gettext.h
+++ b/lib/gettext.h
@@ -1,6 +1,6 @@
 /* Convenience header for conditional use of GNU <libintl.h>.
-   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2022 Free Software
-   Foundation, Inc.
+   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2023 Free
+   Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/gettime.c b/lib/gettime.c
index 541af18bbfa..cfba830478e 100644
--- a/lib/gettime.c
+++ b/lib/gettime.c
@@ -1,6 +1,7 @@
 /* gettime -- get the system clock
 
-   Copyright (C) 2002, 2004-2007, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004-2007, 2009-2023 Free Software Foundation,
+   Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/gettimeofday.c b/lib/gettimeofday.c
index 36c7920afe6..7207c851272 100644
--- a/lib/gettimeofday.c
+++ b/lib/gettimeofday.c
@@ -1,6 +1,7 @@
 /* Provide gettimeofday for systems that don't have it or for which it's 
broken.
 
-   Copyright (C) 2001-2003, 2005-2007, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005-2007, 2009-2023 Free Software
+   Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/gnulib.mk.in b/lib/gnulib.mk.in
index fcbf5bde2db..9e2eaf51381 100644
--- a/lib/gnulib.mk.in
+++ b/lib/gnulib.mk.in
@@ -1,5 +1,5 @@
 ## DO NOT EDIT! GENERATED AUTOMATICALLY!
-# Copyright (C) 2002-2022 Free Software Foundation, Inc.
+# Copyright (C) 2002-2023 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/lib/group-member.c b/lib/group-member.c
index cd43f36f4eb..6e3f640dcf0 100644
--- a/lib/group-member.c
+++ b/lib/group-member.c
@@ -1,7 +1,7 @@
 /* group-member.c -- determine whether group id is in calling user's group list
 
-   Copyright (C) 1994, 1997-1998, 2003, 2005-2006, 2009-2022 Free Software
-   Foundation, Inc.
+   Copyright (C) 1994, 1997-1998, 2003, 2005-2006, 2009-2023 Free
+   Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/idx.h b/lib/idx.h
index c3669ddaca8..23020b7ec0c 100644
--- a/lib/idx.h
+++ b/lib/idx.h
@@ -1,5 +1,5 @@
 /* A type for indices and sizes.
-   Copyright (C) 2020-2022 Free Software Foundation, Inc.
+   Copyright (C) 2020-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/ieee754.in.h b/lib/ieee754.in.h
index 2ca9709bb90..8de4c32be5e 100644
--- a/lib/ieee754.in.h
+++ b/lib/ieee754.in.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992-2022 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/ignore-value.h b/lib/ignore-value.h
index 173b63f5379..f0b569af4a7 100644
--- a/lib/ignore-value.h
+++ b/lib/ignore-value.h
@@ -1,6 +1,6 @@
 /* ignore a function return without a compiler warning.  -*- coding: utf-8 -*-
 
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/intprops-internal.h b/lib/intprops-internal.h
index f6455f78559..0467a9ca8f2 100644
--- a/lib/intprops-internal.h
+++ b/lib/intprops-internal.h
@@ -1,6 +1,6 @@
 /* intprops-internal.h -- properties of integer types not visible to users
 
-   Copyright (C) 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as published
diff --git a/lib/intprops.h b/lib/intprops.h
index f182ddc1fe6..44b5e60fb9a 100644
--- a/lib/intprops.h
+++ b/lib/intprops.h
@@ -1,6 +1,6 @@
 /* intprops.h -- properties of integer types
 
-   Copyright (C) 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as published
diff --git a/lib/inttypes.in.h b/lib/inttypes.in.h
index 853eca087c5..50a2bbfcda2 100644
--- a/lib/inttypes.in.h
+++ b/lib/inttypes.in.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2006-2022 Free Software Foundation, Inc.
+/* Copyright (C) 2006-2023 Free Software Foundation, Inc.
    Written by Paul Eggert, Bruno Haible, Derek Price.
    This file is part of gnulib.
 
diff --git a/lib/lchmod.c b/lib/lchmod.c
index 8410a2d835f..b2d1b8bfde1 100644
--- a/lib/lchmod.c
+++ b/lib/lchmod.c
@@ -1,6 +1,6 @@
 /* Implement lchmod on platforms where it does not work correctly.
 
-   Copyright 2020-2022 Free Software Foundation, Inc.
+   Copyright 2020-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/libc-config.h b/lib/libc-config.h
index a56665b1ce3..1d28e58c971 100644
--- a/lib/libc-config.h
+++ b/lib/libc-config.h
@@ -1,6 +1,6 @@
 /* System definitions for code taken from the GNU C Library
 
-   Copyright 2017-2022 Free Software Foundation, Inc.
+   Copyright 2017-2023 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
diff --git a/lib/limits.in.h b/lib/limits.in.h
index b77bf75c5fe..ae46a5aa25f 100644
--- a/lib/limits.in.h
+++ b/lib/limits.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <limits.h>.
 
-   Copyright 2016-2022 Free Software Foundation, Inc.
+   Copyright 2016-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/lstat.c b/lib/lstat.c
index 472bfbceb93..00a4ce2ab87 100644
--- a/lib/lstat.c
+++ b/lib/lstat.c
@@ -1,6 +1,6 @@
 /* Work around a bug of lstat on some systems
 
-   Copyright (C) 1997-2006, 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 1997-2006, 2008-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/malloc.c b/lib/malloc.c
index f334dd6e96d..92f8c841cd7 100644
--- a/lib/malloc.c
+++ b/lib/malloc.c
@@ -1,6 +1,7 @@
 /* malloc() function that is glibc compatible.
 
-   Copyright (C) 1997-1998, 2006-2007, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 1997-1998, 2006-2007, 2009-2023 Free Software
+   Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/malloc/dynarray-skeleton.c b/lib/malloc/dynarray-skeleton.c
index bad548a498c..580c278b7c5 100644
--- a/lib/malloc/dynarray-skeleton.c
+++ b/lib/malloc/dynarray-skeleton.c
@@ -1,5 +1,5 @@
 /* Type-safe arrays which grow dynamically.
-   Copyright (C) 2017-2022 Free Software Foundation, Inc.
+   Copyright (C) 2017-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/malloc/dynarray.h b/lib/malloc/dynarray.h
index df1aa4167dd..a9a3b0859c1 100644
--- a/lib/malloc/dynarray.h
+++ b/lib/malloc/dynarray.h
@@ -1,5 +1,5 @@
 /* Type-safe arrays which grow dynamically.  Shared definitions.
-   Copyright (C) 2017-2022 Free Software Foundation, Inc.
+   Copyright (C) 2017-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/malloc/dynarray_at_failure.c b/lib/malloc/dynarray_at_failure.c
index 062ab7062bd..ebc9310982c 100644
--- a/lib/malloc/dynarray_at_failure.c
+++ b/lib/malloc/dynarray_at_failure.c
@@ -1,5 +1,5 @@
 /* Report an dynamic array index out of bounds condition.
-   Copyright (C) 2017-2022 Free Software Foundation, Inc.
+   Copyright (C) 2017-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/malloc/dynarray_emplace_enlarge.c 
b/lib/malloc/dynarray_emplace_enlarge.c
index 0cff2e7055a..7da539316c1 100644
--- a/lib/malloc/dynarray_emplace_enlarge.c
+++ b/lib/malloc/dynarray_emplace_enlarge.c
@@ -1,5 +1,5 @@
 /* Increase the size of a dynamic array in preparation of an emplace operation.
-   Copyright (C) 2017-2022 Free Software Foundation, Inc.
+   Copyright (C) 2017-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/malloc/dynarray_finalize.c b/lib/malloc/dynarray_finalize.c
index 3f360c3aa85..673595a5fad 100644
--- a/lib/malloc/dynarray_finalize.c
+++ b/lib/malloc/dynarray_finalize.c
@@ -1,5 +1,5 @@
 /* Copy the dynamically-allocated area to an explicitly-sized heap allocation.
-   Copyright (C) 2017-2022 Free Software Foundation, Inc.
+   Copyright (C) 2017-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/malloc/dynarray_resize.c b/lib/malloc/dynarray_resize.c
index 8d1922e5c7f..7ecd4de63b9 100644
--- a/lib/malloc/dynarray_resize.c
+++ b/lib/malloc/dynarray_resize.c
@@ -1,5 +1,5 @@
 /* Increase the size of a dynamic array.
-   Copyright (C) 2017-2022 Free Software Foundation, Inc.
+   Copyright (C) 2017-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/malloc/dynarray_resize_clear.c 
b/lib/malloc/dynarray_resize_clear.c
index 8cf1b0d0268..bb23c522a14 100644
--- a/lib/malloc/dynarray_resize_clear.c
+++ b/lib/malloc/dynarray_resize_clear.c
@@ -1,5 +1,5 @@
 /* Increase the size of a dynamic array and clear the new part.
-   Copyright (C) 2017-2022 Free Software Foundation, Inc.
+   Copyright (C) 2017-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/malloc/scratch_buffer.h b/lib/malloc/scratch_buffer.h
index a9bdcadec21..33fd2b29cd5 100644
--- a/lib/malloc/scratch_buffer.h
+++ b/lib/malloc/scratch_buffer.h
@@ -1,5 +1,5 @@
 /* Variable-sized buffer with on-stack default allocation.
-   Copyright (C) 2015-2022 Free Software Foundation, Inc.
+   Copyright (C) 2015-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/malloc/scratch_buffer_dupfree.c 
b/lib/malloc/scratch_buffer_dupfree.c
index eb3b95c1b1c..2f60fbb54e8 100644
--- a/lib/malloc/scratch_buffer_dupfree.c
+++ b/lib/malloc/scratch_buffer_dupfree.c
@@ -1,5 +1,5 @@
 /* Variable-sized buffer with on-stack default allocation.
-   Copyright (C) 2020-2022 Free Software Foundation, Inc.
+   Copyright (C) 2020-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/malloc/scratch_buffer_grow.c b/lib/malloc/scratch_buffer_grow.c
index 9a5e4dbb1eb..a5e8f2f7230 100644
--- a/lib/malloc/scratch_buffer_grow.c
+++ b/lib/malloc/scratch_buffer_grow.c
@@ -1,5 +1,5 @@
 /* Variable-sized buffer with on-stack default allocation.
-   Copyright (C) 2015-2022 Free Software Foundation, Inc.
+   Copyright (C) 2015-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/malloc/scratch_buffer_grow_preserve.c 
b/lib/malloc/scratch_buffer_grow_preserve.c
index 3fe5a0720ec..c0b5d87b7e4 100644
--- a/lib/malloc/scratch_buffer_grow_preserve.c
+++ b/lib/malloc/scratch_buffer_grow_preserve.c
@@ -1,5 +1,5 @@
 /* Variable-sized buffer with on-stack default allocation.
-   Copyright (C) 2015-2022 Free Software Foundation, Inc.
+   Copyright (C) 2015-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/malloc/scratch_buffer_set_array_size.c 
b/lib/malloc/scratch_buffer_set_array_size.c
index 89c37a950e9..24c39350ade 100644
--- a/lib/malloc/scratch_buffer_set_array_size.c
+++ b/lib/malloc/scratch_buffer_set_array_size.c
@@ -1,5 +1,5 @@
 /* Variable-sized buffer with on-stack default allocation.
-   Copyright (C) 2015-2022 Free Software Foundation, Inc.
+   Copyright (C) 2015-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/md5-stream.c b/lib/md5-stream.c
index 07c639fd360..ab48fe3261a 100644
--- a/lib/md5-stream.c
+++ b/lib/md5-stream.c
@@ -1,7 +1,7 @@
 /* Functions to compute MD5 message digest of files or memory blocks.
    according to the definition of MD5 in RFC 1321 from April 1992.
-   Copyright (C) 1995-1997, 1999-2001, 2005-2006, 2008-2022 Free Software
-   Foundation, Inc.
+   Copyright (C) 1995-1997, 1999-2001, 2005-2006, 2008-2023 Free
+   Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/md5.c b/lib/md5.c
index c16ac4a93a8..b1e139339f4 100644
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -1,7 +1,7 @@
 /* Functions to compute MD5 message digest of files or memory blocks.
    according to the definition of MD5 in RFC 1321 from April 1992.
-   Copyright (C) 1995-1997, 1999-2001, 2005-2006, 2008-2022 Free Software
-   Foundation, Inc.
+   Copyright (C) 1995-1997, 1999-2001, 2005-2006, 2008-2023 Free
+   Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/md5.h b/lib/md5.h
index 611c230b817..3b0b4ff730f 100644
--- a/lib/md5.h
+++ b/lib/md5.h
@@ -1,7 +1,7 @@
 /* Declaration of functions and data types used for MD5 sum computing
    library functions.
-   Copyright (C) 1995-1997, 1999-2001, 2004-2006, 2008-2022 Free Software
-   Foundation, Inc.
+   Copyright (C) 1995-1997, 1999-2001, 2004-2006, 2008-2023 Free
+   Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/memmem.c b/lib/memmem.c
index 5701052d48b..665815efb1a 100644
--- a/lib/memmem.c
+++ b/lib/memmem.c
@@ -1,5 +1,5 @@
-/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2022 Free Software
-   Foundation, Inc.
+/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2023 Free
+   Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/mempcpy.c b/lib/mempcpy.c
index 9aae418ef29..24a3135988f 100644
--- a/lib/mempcpy.c
+++ b/lib/mempcpy.c
@@ -1,5 +1,5 @@
 /* Copy memory area and return pointer after last written byte.
-   Copyright (C) 2003, 2007, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2007, 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/memrchr.c b/lib/memrchr.c
index 90fdb86f1f1..a34fc71f7da 100644
--- a/lib/memrchr.c
+++ b/lib/memrchr.c
@@ -1,7 +1,7 @@
 /* memrchr -- find the last occurrence of a byte in a memory block
 
-   Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2022 Free Software
-   Foundation, Inc.
+   Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2023 Free
+   Software Foundation, Inc.
 
    Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
    with help from Dan Sahlin (dan@sics.se) and
diff --git a/lib/mini-gmp-gnulib.c b/lib/mini-gmp-gnulib.c
index 7d09c80e9e9..b15ce0ff754 100644
--- a/lib/mini-gmp-gnulib.c
+++ b/lib/mini-gmp-gnulib.c
@@ -1,6 +1,6 @@
 /* Tailor mini-gmp.c for Gnulib-using applications.
 
-   Copyright 2018-2022 Free Software Foundation, Inc.
+   Copyright 2018-2023 Free Software Foundation, Inc.
 
    This file is free software.
    It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+".
diff --git a/lib/minmax.h b/lib/minmax.h
index b4b1345bbce..1fbfc6616cf 100644
--- a/lib/minmax.h
+++ b/lib/minmax.h
@@ -1,5 +1,5 @@
 /* MIN, MAX macros.
-   Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2022 Free Software
+   Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2023 Free Software
    Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/mkostemp.c b/lib/mkostemp.c
index eae289aff94..5cd5b3ac583 100644
--- a/lib/mkostemp.c
+++ b/lib/mkostemp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2022 Free Software
+/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2023 Free Software
    Foundation, Inc.
    This file is derived from the one in the GNU C Library.
 
diff --git a/lib/mktime-internal.h b/lib/mktime-internal.h
index 170764eabc8..709c36bdf56 100644
--- a/lib/mktime-internal.h
+++ b/lib/mktime-internal.h
@@ -1,5 +1,5 @@
 /* Internals of mktime and related functions
-   Copyright 2016-2022 Free Software Foundation, Inc.
+   Copyright 2016-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Paul Eggert <eggert@cs.ucla.edu>.
 
diff --git a/lib/mktime.c b/lib/mktime.c
index 7dc9d67ef9d..94a4320e6ca 100644
--- a/lib/mktime.c
+++ b/lib/mktime.c
@@ -1,5 +1,5 @@
 /* Convert a 'struct tm' to a time_t value.
-   Copyright (C) 1993-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Paul Eggert <eggert@twinsun.com>.
 
diff --git a/lib/nanosleep.c b/lib/nanosleep.c
index 55d6fa650e3..6383115c0f1 100644
--- a/lib/nanosleep.c
+++ b/lib/nanosleep.c
@@ -1,6 +1,7 @@
 /* Provide a replacement for the POSIX nanosleep function.
 
-   Copyright (C) 1999-2000, 2002, 2004-2022 Free Software Foundation, Inc.
+   Copyright (C) 1999-2000, 2002, 2004-2023 Free Software Foundation,
+   Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/nproc.c b/lib/nproc.c
index 378d3ff3fc6..2740c458c11 100644
--- a/lib/nproc.c
+++ b/lib/nproc.c
@@ -1,6 +1,6 @@
 /* Detect the number of processors.
 
-   Copyright (C) 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/nproc.h b/lib/nproc.h
index 505351d95f4..7b8b16d37cd 100644
--- a/lib/nproc.h
+++ b/lib/nproc.h
@@ -1,6 +1,6 @@
 /* Detect the number of processors.
 
-   Copyright (C) 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/nstrftime.c b/lib/nstrftime.c
index 37034eb9fb7..68bb560910d 100644
--- a/lib/nstrftime.c
+++ b/lib/nstrftime.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2022 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/open.c b/lib/open.c
index 170bff108e3..7ec8fdc35dc 100644
--- a/lib/open.c
+++ b/lib/open.c
@@ -1,5 +1,5 @@
 /* Open a descriptor to a file.
-   Copyright (C) 2007-2022 Free Software Foundation, Inc.
+   Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/openat-priv.h b/lib/openat-priv.h
index 5d60810709d..1d31c4e83cb 100644
--- a/lib/openat-priv.h
+++ b/lib/openat-priv.h
@@ -1,6 +1,6 @@
 /* Internals for openat-like functions.
 
-   Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/openat-proc.c b/lib/openat-proc.c
index 3bacf7dbd13..2a6a85f0696 100644
--- a/lib/openat-proc.c
+++ b/lib/openat-proc.c
@@ -1,6 +1,6 @@
 /* Create /proc/self/fd-related names for subfiles of open directories.
 
-   Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/openat.h b/lib/openat.h
index c2f64ff50e2..37d8eedbee4 100644
--- a/lib/openat.h
+++ b/lib/openat.h
@@ -1,5 +1,5 @@
 /* provide a replacement openat function
-   Copyright (C) 2004-2006, 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2004-2006, 2008-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/pathmax.h b/lib/pathmax.h
index 19b93d7eab1..0dd8f3bc5ce 100644
--- a/lib/pathmax.h
+++ b/lib/pathmax.h
@@ -1,5 +1,5 @@
 /* Define PATH_MAX somehow.  Requires sys/types.h.
-   Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2022 Free Software
+   Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2023 Free Software
    Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/pipe2.c b/lib/pipe2.c
index a3cbb7f2611..8f06575a1dd 100644
--- a/lib/pipe2.c
+++ b/lib/pipe2.c
@@ -1,5 +1,5 @@
 /* Create a pipe, with specific opening flags.
-   Copyright (C) 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/pselect.c b/lib/pselect.c
index a1eca0c6a26..f5d21e1048a 100644
--- a/lib/pselect.c
+++ b/lib/pselect.c
@@ -1,6 +1,6 @@
 /* pselect - synchronous I/O multiplexing
 
-   Copyright 2011-2022 Free Software Foundation, Inc.
+   Copyright 2011-2023 Free Software Foundation, Inc.
 
    This file is part of gnulib.
 
diff --git a/lib/pthread_sigmask.c b/lib/pthread_sigmask.c
index cd4eb807325..128107582a7 100644
--- a/lib/pthread_sigmask.c
+++ b/lib/pthread_sigmask.c
@@ -1,5 +1,5 @@
 /* POSIX compatible signal blocking for threads.
-   Copyright (C) 2011-2022 Free Software Foundation, Inc.
+   Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/qcopy-acl.c b/lib/qcopy-acl.c
index 37fb179260d..883bcf7d588 100644
--- a/lib/qcopy-acl.c
+++ b/lib/qcopy-acl.c
@@ -1,6 +1,6 @@
 /* Copy access control list from one file to another.  -*- coding: utf-8 -*-
 
-   Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/rawmemchr.c b/lib/rawmemchr.c
index bdd7307de4b..45c6cd35276 100644
--- a/lib/rawmemchr.c
+++ b/lib/rawmemchr.c
@@ -1,5 +1,5 @@
 /* Searching in a string.
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/rawmemchr.valgrind b/lib/rawmemchr.valgrind
index 64cf86c8429..f3e4cb0f655 100644
--- a/lib/rawmemchr.valgrind
+++ b/lib/rawmemchr.valgrind
@@ -1,6 +1,6 @@
 # Suppress a valgrind message about use of uninitialized memory in rawmemchr().
 
-# Copyright (C) 2008-2022 Free Software Foundation, Inc.
+# Copyright (C) 2008-2023 Free Software Foundation, Inc.
 #
 # This file is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Lesser General Public License as
diff --git a/lib/readlink.c b/lib/readlink.c
index ed03cc8ded1..14bbb7f10ca 100644
--- a/lib/readlink.c
+++ b/lib/readlink.c
@@ -1,5 +1,5 @@
 /* Read the contents of a symbolic link.
-   Copyright (C) 2003-2007, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2003-2007, 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/readlinkat.c b/lib/readlinkat.c
index ab45e140b59..7738ba8bfd5 100644
--- a/lib/readlinkat.c
+++ b/lib/readlinkat.c
@@ -1,5 +1,5 @@
 /* Read a symlink relative to an open directory.
-   Copyright (C) 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/realloc.c b/lib/realloc.c
index c8783815761..1063eb09874 100644
--- a/lib/realloc.c
+++ b/lib/realloc.c
@@ -1,6 +1,6 @@
 /* realloc() function that is glibc compatible.
 
-   Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2022 Free Software
+   Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2023 Free Software
    Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/regcomp.c b/lib/regcomp.c
index 122c3de58c3..89478396855 100644
--- a/lib/regcomp.c
+++ b/lib/regcomp.c
@@ -1,5 +1,5 @@
 /* Extended regular expression matching and search library.
-   Copyright (C) 2002-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
 
diff --git a/lib/regex.c b/lib/regex.c
index ff1176782e4..3beb0deb987 100644
--- a/lib/regex.c
+++ b/lib/regex.c
@@ -1,5 +1,5 @@
 /* Extended regular expression matching and search library.
-   Copyright (C) 2002-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
 
diff --git a/lib/regex.h b/lib/regex.h
index a7e0bd02757..9ef0252ffff 100644
--- a/lib/regex.h
+++ b/lib/regex.h
@@ -1,6 +1,6 @@
 /* Definitions for data structures and routines for the regular
    expression library.
-   Copyright (C) 1985, 1989-2022 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1989-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/regex_internal.c b/lib/regex_internal.c
index 0e6919f3400..998a19b7241 100644
--- a/lib/regex_internal.c
+++ b/lib/regex_internal.c
@@ -1,5 +1,5 @@
 /* Extended regular expression matching and search library.
-   Copyright (C) 2002-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
 
diff --git a/lib/regex_internal.h b/lib/regex_internal.h
index 784d2d45866..149ec2e868a 100644
--- a/lib/regex_internal.h
+++ b/lib/regex_internal.h
@@ -1,5 +1,5 @@
 /* Extended regular expression matching and search library.
-   Copyright (C) 2002-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
 
diff --git a/lib/regexec.c b/lib/regexec.c
index 521cb028415..13e0349e727 100644
--- a/lib/regexec.c
+++ b/lib/regexec.c
@@ -1,5 +1,5 @@
 /* Extended regular expression matching and search library.
-   Copyright (C) 2002-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
 
diff --git a/lib/root-uid.h b/lib/root-uid.h
index b3274e39aaa..1905575e47b 100644
--- a/lib/root-uid.h
+++ b/lib/root-uid.h
@@ -1,6 +1,6 @@
 /* The user ID that always has appropriate privileges in the POSIX sense.
 
-   Copyright 2012-2022 Free Software Foundation, Inc.
+   Copyright 2012-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/save-cwd.c b/lib/save-cwd.c
index ecaef8974a0..7c517d1c819 100644
--- a/lib/save-cwd.c
+++ b/lib/save-cwd.c
@@ -1,6 +1,6 @@
 /* save-cwd.c -- Save and restore current working directory.
 
-   Copyright (C) 1995, 1997-1998, 2003-2006, 2009-2022 Free Software
+   Copyright (C) 1995, 1997-1998, 2003-2006, 2009-2023 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/save-cwd.h b/lib/save-cwd.h
index 90e8a0747ce..f26319389c2 100644
--- a/lib/save-cwd.h
+++ b/lib/save-cwd.h
@@ -1,7 +1,7 @@
 /* Save and restore current working directory.
 
-   Copyright (C) 1995, 1997-1998, 2003, 2009-2022 Free Software Foundation,
-   Inc.
+   Copyright (C) 1995, 1997-1998, 2003, 2009-2023 Free Software
+   Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/scratch_buffer.h b/lib/scratch_buffer.h
index c0aa21630f5..4cf60d232b7 100644
--- a/lib/scratch_buffer.h
+++ b/lib/scratch_buffer.h
@@ -1,5 +1,5 @@
 /* Variable-sized buffer with on-stack default allocation.
-   Copyright (C) 2017-2022 Free Software Foundation, Inc.
+   Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/set-permissions.c b/lib/set-permissions.c
index c1a4b82a0d0..1d6732cc78f 100644
--- a/lib/set-permissions.c
+++ b/lib/set-permissions.c
@@ -1,6 +1,6 @@
 /* Set permissions of a file.  -*- coding: utf-8 -*-
 
-   Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/sha1.c b/lib/sha1.c
index 5a18213edc1..3f6d86a285c 100644
--- a/lib/sha1.c
+++ b/lib/sha1.c
@@ -1,7 +1,8 @@
 /* sha1.c - Functions to compute SHA1 message digest of files or
    memory blocks according to the NIST specification FIPS-180-1.
 
-   Copyright (C) 2000-2001, 2003-2006, 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001, 2003-2006, 2008-2023 Free Software
+   Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/sha1.h b/lib/sha1.h
index bc3470a508d..5a58b567ceb 100644
--- a/lib/sha1.h
+++ b/lib/sha1.h
@@ -1,6 +1,6 @@
 /* Declarations of functions and data types used for SHA1 sum
    library functions.
-   Copyright (C) 2000-2001, 2003, 2005-2006, 2008-2022 Free Software
+   Copyright (C) 2000-2001, 2003, 2005-2006, 2008-2023 Free Software
    Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/sha256.c b/lib/sha256.c
index 60cd763612d..e5fea02bc2e 100644
--- a/lib/sha256.c
+++ b/lib/sha256.c
@@ -1,7 +1,7 @@
 /* sha256.c - Functions to compute SHA256 and SHA224 message digest of files or
    memory blocks according to the NIST specification FIPS-180-2.
 
-   Copyright (C) 2005-2006, 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2008-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/sha256.h b/lib/sha256.h
index 533173a59e8..2879477e89c 100644
--- a/lib/sha256.h
+++ b/lib/sha256.h
@@ -1,6 +1,6 @@
 /* Declarations of functions and data types used for SHA256 and SHA224 sum
    library functions.
-   Copyright (C) 2005-2006, 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2008-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/sha512.c b/lib/sha512.c
index fd17a7dc760..8ca7fa319f5 100644
--- a/lib/sha512.c
+++ b/lib/sha512.c
@@ -1,7 +1,7 @@
 /* sha512.c - Functions to compute SHA512 and SHA384 message digest of files or
    memory blocks according to the NIST specification FIPS-180-2.
 
-   Copyright (C) 2005-2006, 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2008-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/sha512.h b/lib/sha512.h
index 1eb18702278..e3a98a2644c 100644
--- a/lib/sha512.h
+++ b/lib/sha512.h
@@ -1,6 +1,6 @@
 /* Declarations of functions and data types used for SHA512 and SHA384 sum
    library functions.
-   Copyright (C) 2005-2006, 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2008-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/sig2str.c b/lib/sig2str.c
index 8e2fc0c0754..4f68cb7ca8a 100644
--- a/lib/sig2str.c
+++ b/lib/sig2str.c
@@ -1,6 +1,7 @@
 /* sig2str.c -- convert between signal names and numbers
 
-   Copyright (C) 2002, 2004, 2006, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2006, 2009-2023 Free Software Foundation,
+   Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/sig2str.h b/lib/sig2str.h
index a45af7f9686..1e5253658e7 100644
--- a/lib/sig2str.h
+++ b/lib/sig2str.h
@@ -1,6 +1,6 @@
 /* sig2str.h -- convert between signal names and numbers
 
-   Copyright (C) 2002, 2005, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2005, 2009-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/sigdescr_np.c b/lib/sigdescr_np.c
index 652bc8d75b4..fc8a4ad47a2 100644
--- a/lib/sigdescr_np.c
+++ b/lib/sigdescr_np.c
@@ -1,5 +1,5 @@
 /* English descriptions of signals.
-   Copyright (C) 2020-2022 Free Software Foundation, Inc.
+   Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/signal.in.h b/lib/signal.in.h
index c0d4848db0a..fea12e6572d 100644
--- a/lib/signal.in.h
+++ b/lib/signal.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <signal.h>.
 
-   Copyright (C) 2006-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/stat-time.c b/lib/stat-time.c
index 3d48a2b5b0e..bc282232ab3 100644
--- a/lib/stat-time.c
+++ b/lib/stat-time.c
@@ -1,6 +1,6 @@
 /* stat-related time functions.
 
-   Copyright (C) 2012-2022 Free Software Foundation, Inc.
+   Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/stat-time.h b/lib/stat-time.h
index b661196ea58..92aa1e64e20 100644
--- a/lib/stat-time.h
+++ b/lib/stat-time.h
@@ -1,6 +1,6 @@
 /* stat-related time functions.
 
-   Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2007, 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/stdalign.in.h b/lib/stdalign.in.h
index 58fd245c627..17357810c7c 100644
--- a/lib/stdalign.in.h
+++ b/lib/stdalign.in.h
@@ -1,6 +1,6 @@
 /* A substitute for ISO C11 <stdalign.h>.
 
-   Copyright 2011-2022 Free Software Foundation, Inc.
+   Copyright 2011-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/stdckdint.in.h b/lib/stdckdint.in.h
index 762d3fdb790..71bab5f0c9e 100644
--- a/lib/stdckdint.in.h
+++ b/lib/stdckdint.in.h
@@ -1,6 +1,6 @@
 /* stdckdint.h -- checked integer arithmetic
 
-   Copyright 2022 Free Software Foundation, Inc.
+   Copyright 2022-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as published
diff --git a/lib/stddef.in.h b/lib/stddef.in.h
index 5c9a747d7d2..6eadcc3d5a4 100644
--- a/lib/stddef.in.h
+++ b/lib/stddef.in.h
@@ -1,6 +1,6 @@
 /* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
 
-   Copyright (C) 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/stdint.in.h b/lib/stdint.in.h
index eaa7874f539..5ddc644b8ee 100644
--- a/lib/stdint.in.h
+++ b/lib/stdint.in.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2002, 2004-2022 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2002, 2004-2023 Free Software Foundation, Inc.
    Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
    This file is part of gnulib.
 
diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h
index ed32e6981ac..81e7f838372 100644
--- a/lib/stdio-impl.h
+++ b/lib/stdio-impl.h
@@ -1,5 +1,5 @@
 /* Implementation details of FILE streams.
-   Copyright (C) 2007-2008, 2010-2022 Free Software Foundation, Inc.
+   Copyright (C) 2007-2008, 2010-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/stdio.in.h b/lib/stdio.in.h
index 7b36dac2f52..59cbea3d47d 100644
--- a/lib/stdio.in.h
+++ b/lib/stdio.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <stdio.h>.
 
-   Copyright (C) 2004, 2007-2022 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2007-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h
index 8e0a609f1f7..4c8aad76124 100644
--- a/lib/stdlib.in.h
+++ b/lib/stdlib.in.h
@@ -1,6 +1,7 @@
 /* A GNU-like <stdlib.h>.
 
-   Copyright (C) 1995, 2001-2004, 2006-2022 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2004, 2006-2023 Free Software Foundation,
+   Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/stpcpy.c b/lib/stpcpy.c
index 434f84ae765..73c1eb786ff 100644
--- a/lib/stpcpy.c
+++ b/lib/stpcpy.c
@@ -1,5 +1,5 @@
 /* stpcpy.c -- copy a string and return pointer to end of new string
-   Copyright (C) 1992, 1995, 1997-1998, 2006, 2009-2022 Free Software
+   Copyright (C) 1992, 1995, 1997-1998, 2006, 2009-2023 Free Software
    Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C 
Library.
diff --git a/lib/str-two-way.h b/lib/str-two-way.h
index b00017c0b4b..dfe702241c0 100644
--- a/lib/str-two-way.h
+++ b/lib/str-two-way.h
@@ -1,5 +1,5 @@
 /* Byte-wise substring search, using the Two-Way algorithm.
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Eric Blake <ebb9@byu.net>, 2008.
 
diff --git a/lib/strftime.h b/lib/strftime.h
index a9847084f01..88c1f73928f 100644
--- a/lib/strftime.h
+++ b/lib/strftime.h
@@ -1,6 +1,6 @@
 /* declarations for strftime.c
 
-   Copyright (C) 2002, 2004, 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2008-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/string.in.h b/lib/string.in.h
index 21356914e21..1e27deed982 100644
--- a/lib/string.in.h
+++ b/lib/string.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <string.h>.
 
-   Copyright (C) 1995-1996, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1995-1996, 2001-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/strnlen.c b/lib/strnlen.c
index c8fc69c6a9c..09c010eac42 100644
--- a/lib/strnlen.c
+++ b/lib/strnlen.c
@@ -1,5 +1,5 @@
 /* Find the length of STRING, but scan at most MAXLEN characters.
-   Copyright (C) 2005-2007, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2005-2007, 2009-2023 Free Software Foundation, Inc.
    Written by Simon Josefsson.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/strtoimax.c b/lib/strtoimax.c
index 29d16d29cef..d8d74e8c699 100644
--- a/lib/strtoimax.c
+++ b/lib/strtoimax.c
@@ -1,7 +1,7 @@
 /* Convert string representation of a number into an intmax_t value.
 
-   Copyright (C) 1999, 2001-2004, 2006, 2009-2022 Free Software Foundation,
-   Inc.
+   Copyright (C) 1999, 2001-2004, 2006, 2009-2023 Free Software
+   Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/strtol.c b/lib/strtol.c
index 6c2e9333abc..6bc1f061877 100644
--- a/lib/strtol.c
+++ b/lib/strtol.c
@@ -1,7 +1,7 @@
 /* Convert string representation of a number into an integer value.
 
-   Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2022 Free Software
-   Foundation, Inc.
+   Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2023 Free
+   Software Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C
    Library.  Bugs can be reported to bug-glibc@gnu.org.
diff --git a/lib/strtoll.c b/lib/strtoll.c
index acea42ee003..919b453984c 100644
--- a/lib/strtoll.c
+++ b/lib/strtoll.c
@@ -1,6 +1,6 @@
 /* Function to parse a 'long long int' from text.
-   Copyright (C) 1995-1997, 1999, 2001, 2009-2022 Free Software Foundation,
-   Inc.
+   Copyright (C) 1995-1997, 1999, 2001, 2009-2023 Free Software
+   Foundation, Inc.
    This file is part of the GNU C Library.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/symlink.c b/lib/symlink.c
index 26310af7b12..b5009ae8355 100644
--- a/lib/symlink.c
+++ b/lib/symlink.c
@@ -1,5 +1,5 @@
 /* Stub for symlink().
-   Copyright (C) 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/sys_random.in.h b/lib/sys_random.in.h
index c91bcd2cd04..8dca1326837 100644
--- a/lib/sys_random.in.h
+++ b/lib/sys_random.in.h
@@ -1,5 +1,5 @@
 /* Substitute for <sys/random.h>.
-   Copyright (C) 2020-2022 Free Software Foundation, Inc.
+   Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/sys_select.in.h b/lib/sys_select.in.h
index 860e957fe0f..13440fa6f0a 100644
--- a/lib/sys_select.in.h
+++ b/lib/sys_select.in.h
@@ -1,5 +1,5 @@
 /* Substitute for <sys/select.h>.
-   Copyright (C) 2007-2022 Free Software Foundation, Inc.
+   Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/sys_stat.in.h b/lib/sys_stat.in.h
index 0ec320f58c0..096887c0162 100644
--- a/lib/sys_stat.in.h
+++ b/lib/sys_stat.in.h
@@ -1,5 +1,5 @@
 /* Provide a more complete sys/stat.h header file.
-   Copyright (C) 2005-2022 Free Software Foundation, Inc.
+   Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/sys_time.in.h b/lib/sys_time.in.h
index 87db1a88745..e833d551677 100644
--- a/lib/sys_time.in.h
+++ b/lib/sys_time.in.h
@@ -1,6 +1,6 @@
 /* Provide a more complete sys/time.h.
 
-   Copyright (C) 2007-2022 Free Software Foundation, Inc.
+   Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/sys_types.in.h b/lib/sys_types.in.h
index 698e88d6326..082a6c674de 100644
--- a/lib/sys_types.in.h
+++ b/lib/sys_types.in.h
@@ -1,6 +1,6 @@
 /* Provide a more complete sys/types.h.
 
-   Copyright (C) 2011-2022 Free Software Foundation, Inc.
+   Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/tempname.c b/lib/tempname.c
index dbff638f701..bf362db6e17 100644
--- a/lib/tempname.c
+++ b/lib/tempname.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2022 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/tempname.h b/lib/tempname.h
index 5e3c5e15500..36a51381548 100644
--- a/lib/tempname.h
+++ b/lib/tempname.h
@@ -1,6 +1,6 @@
 /* Create a temporary file or directory.
 
-   Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/time-internal.h b/lib/time-internal.h
index c8a2a8ce6bc..51423c94ca9 100644
--- a/lib/time-internal.h
+++ b/lib/time-internal.h
@@ -1,6 +1,6 @@
 /* Time internal interface
 
-   Copyright 2015-2022 Free Software Foundation, Inc.
+   Copyright 2015-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/time.in.h b/lib/time.in.h
index 6aa67498f57..50c9b30b6b3 100644
--- a/lib/time.in.h
+++ b/lib/time.in.h
@@ -1,6 +1,6 @@
 /* A more-standard <time.h>.
 
-   Copyright (C) 2007-2022 Free Software Foundation, Inc.
+   Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
@@ -315,6 +315,7 @@ _GL_CXXALIASWARN (strptime);
 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #    define ctime rpl_ctime
 #   endif
+_GL_ATTRIBUTE_DEPRECATED
 _GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp)
                                  _GL_ARG_NONNULL ((1)));
 _GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp));
diff --git a/lib/time_r.c b/lib/time_r.c
index d4b22755451..c8143a6900a 100644
--- a/lib/time_r.c
+++ b/lib/time_r.c
@@ -1,6 +1,7 @@
 /* Reentrant time functions like localtime_r.
 
-   Copyright (C) 2003, 2006-2007, 2010-2022 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2006-2007, 2010-2023 Free Software Foundation,
+   Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/time_rz.c b/lib/time_rz.c
index 601ce5950e8..da0d57b8b1a 100644
--- a/lib/time_rz.c
+++ b/lib/time_rz.c
@@ -1,6 +1,6 @@
 /* Time zone functions such as tzalloc and localtime_rz
 
-   Copyright 2015-2022 Free Software Foundation, Inc.
+   Copyright 2015-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/timegm.c b/lib/timegm.c
index a1b19efc392..b47025a0545 100644
--- a/lib/timegm.c
+++ b/lib/timegm.c
@@ -1,6 +1,6 @@
 /* Convert UTC calendar time to simple time.  Like mktime but assumes UTC.
 
-   Copyright (C) 1994-2022 Free Software Foundation, Inc.
+   Copyright (C) 1994-2023 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/lib/timespec-add.c b/lib/timespec-add.c
index 0f270e5bc8c..cb3017803b4 100644
--- a/lib/timespec-add.c
+++ b/lib/timespec-add.c
@@ -1,6 +1,6 @@
 /* Add two struct timespec values.
 
-   Copyright (C) 2011-2022 Free Software Foundation, Inc.
+   Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/timespec-sub.c b/lib/timespec-sub.c
index 36747833e39..822c2831089 100644
--- a/lib/timespec-sub.c
+++ b/lib/timespec-sub.c
@@ -1,6 +1,6 @@
 /* Subtract two struct timespec values.
 
-   Copyright (C) 2011-2022 Free Software Foundation, Inc.
+   Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/timespec.c b/lib/timespec.c
index 9d136cb803b..5f7ffbdd45f 100644
--- a/lib/timespec.c
+++ b/lib/timespec.c
@@ -1,6 +1,6 @@
 /* Inline functions for <timespec.h>.
 
-   Copyright (C) 2012-2022 Free Software Foundation, Inc.
+   Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/timespec.h b/lib/timespec.h
index 9e358289a2a..ba78647f09a 100644
--- a/lib/timespec.h
+++ b/lib/timespec.h
@@ -1,6 +1,6 @@
 /* timespec -- System time interface
 
-   Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2022 Free Software
+   Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2023 Free Software
    Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/u64.c b/lib/u64.c
index 0eefeae801b..ca088b45463 100644
--- a/lib/u64.c
+++ b/lib/u64.c
@@ -1,6 +1,6 @@
 /* uint64_t-like operations that work even on hosts lacking uint64_t
 
-   Copyright (C) 2012-2022 Free Software Foundation, Inc.
+   Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/u64.h b/lib/u64.h
index 1908e7c3896..0353ad4d9af 100644
--- a/lib/u64.h
+++ b/lib/u64.h
@@ -1,6 +1,6 @@
 /* uint64_t-like operations that work even on hosts lacking uint64_t
 
-   Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/unistd.c b/lib/unistd.c
index 95978e6ad0a..be7a8255033 100644
--- a/lib/unistd.c
+++ b/lib/unistd.c
@@ -1,6 +1,6 @@
 /* Inline functions for <unistd.h>.
 
-   Copyright (C) 2012-2022 Free Software Foundation, Inc.
+   Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/unistd.in.h b/lib/unistd.in.h
index 50f6e56550e..4812fdb1120 100644
--- a/lib/unistd.in.h
+++ b/lib/unistd.in.h
@@ -1,5 +1,5 @@
 /* Substitute for and wrapper around <unistd.h>.
-   Copyright (C) 2003-2022 Free Software Foundation, Inc.
+   Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/unlocked-io.h b/lib/unlocked-io.h
index 7461d740959..fdef624ab9c 100644
--- a/lib/unlocked-io.h
+++ b/lib/unlocked-io.h
@@ -1,6 +1,6 @@
 /* Prefer faster, non-thread-safe stdio functions if available.
 
-   Copyright (C) 2001-2004, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001-2004, 2009-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/utimens.c b/lib/utimens.c
index 23b91809354..4c5377eca0f 100644
--- a/lib/utimens.c
+++ b/lib/utimens.c
@@ -1,6 +1,6 @@
 /* Set file access and modification times.
 
-   Copyright (C) 2003-2022 Free Software Foundation, Inc.
+   Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/utimens.h b/lib/utimens.h
index 2ccc06e5ed6..a7056981f32 100644
--- a/lib/utimens.h
+++ b/lib/utimens.h
@@ -1,6 +1,6 @@
 /* Set file access and modification times.
 
-   Copyright 2012-2022 Free Software Foundation, Inc.
+   Copyright 2012-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/utimensat.c b/lib/utimensat.c
index f81b0c790ef..5cff11cd0a9 100644
--- a/lib/utimensat.c
+++ b/lib/utimensat.c
@@ -1,5 +1,5 @@
 /* Set the access and modification time of a file relative to directory fd.
-   Copyright (C) 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/verify.h b/lib/verify.h
index 5225a8e616d..ff8438c9269 100644
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -1,6 +1,6 @@
 /* Compile-time assert-like macros.
 
-   Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2023 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lib/vla.h b/lib/vla.h
index ce02428f53a..55f112a060a 100644
--- a/lib/vla.h
+++ b/lib/vla.h
@@ -1,6 +1,6 @@
 /* vla.h - variable length arrays
 
-   Copyright 2014-2022 Free Software Foundation, Inc.
+   Copyright 2014-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/lib/warn-on-use.h b/lib/warn-on-use.h
index 94f5b9201ed..30756034aff 100644
--- a/lib/warn-on-use.h
+++ b/lib/warn-on-use.h
@@ -1,5 +1,5 @@
 /* A C macro for emitting warnings if a function is used.
-   Copyright (C) 2010-2022 Free Software Foundation, Inc.
+   Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as published
diff --git a/lib/xalloc-oversized.h b/lib/xalloc-oversized.h
index aefa6fd8049..05ef7028137 100644
--- a/lib/xalloc-oversized.h
+++ b/lib/xalloc-oversized.h
@@ -1,6 +1,7 @@
 /* xalloc-oversized.h -- memory allocation size checking
 
-   Copyright (C) 1990-2000, 2003-2004, 2006-2022 Free Software Foundation, Inc.
+   Copyright (C) 1990-2000, 2003-2004, 2006-2023 Free Software
+   Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
diff --git a/lisp/ChangeLog.1 b/lisp/ChangeLog.1
index 2311a9f383d..9dfff744e28 100644
--- a/lisp/ChangeLog.1
+++ b/lisp/ChangeLog.1
@@ -3244,7 +3244,7 @@
                Set current buffer variables from defaults
                in case user's init file has changed them.
 
-  Copyright (C) 1985-1986, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1985-1986, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.10 b/lisp/ChangeLog.10
index 7c080ea4961..fb88141e136 100644
--- a/lisp/ChangeLog.10
+++ b/lisp/ChangeLog.10
@@ -23541,7 +23541,7 @@ See ChangeLog.9 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 2001-2022 Free Software Foundation, Inc.
+    Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.11 b/lisp/ChangeLog.11
index f16191e8b7b..cbdf3ec57e0 100644
--- a/lisp/ChangeLog.11
+++ b/lisp/ChangeLog.11
@@ -14322,7 +14322,7 @@ See ChangeLog.10 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2003-2011, 2013-2022 Free Software Foundation, Inc.
+  Copyright (C) 2003-2011, 2013-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.12 b/lisp/ChangeLog.12
index ec58ffc173a..6c11bdeaa49 100644
--- a/lisp/ChangeLog.12
+++ b/lisp/ChangeLog.12
@@ -33335,7 +33335,7 @@ See ChangeLog.11 for earlier changes.
 ;; add-log-time-zone-rule: t
 ;; End:
 
-    Copyright (C) 2005-2022 Free Software Foundation, Inc.
+    Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.13 b/lisp/ChangeLog.13
index 326003d9d9d..820110e2fba 100644
--- a/lisp/ChangeLog.13
+++ b/lisp/ChangeLog.13
@@ -16697,7 +16697,7 @@ See ChangeLog.12 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2007-2022 Free Software Foundation, Inc.
+  Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.14 b/lisp/ChangeLog.14
index eae47fe1985..09bc4f6c4eb 100644
--- a/lisp/ChangeLog.14
+++ b/lisp/ChangeLog.14
@@ -6299,7 +6299,7 @@
 
 2008-10-22  Vinicius Jose Latorre  <viniciusjl@ig.com.br>
 
-       * ps-print.el: Deal with page sizes for label printes.  Suggested by
+       * ps-print.el: Deal with page sizes for label printers.  Suggested by
        Friedrich Delgado Friedrichs <friedel@nomaden.org>.
        (ps-print-version): New version 7.3.3.
        (ps-page-dimensions-database): New page sizes for label printers.
@@ -6371,7 +6371,7 @@
 
        * replace.el (query-replace, query-replace-regexp)
        (replace-string, replace-regexp, perform-replace): Add "word"
-       indicatiors to the prompt for word delimited replacements.
+       indicators to the prompt for word delimited replacements.
 
        * replace.el (read-regexp): Rename arg `default' to `default-value'.
        Doc fix.
@@ -20547,7 +20547,7 @@ See ChangeLog.13 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 2008-2022 Free Software Foundation, Inc.
+    Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.15 b/lisp/ChangeLog.15
index ac1befac1e6..af3203444ae 100644
--- a/lisp/ChangeLog.15
+++ b/lisp/ChangeLog.15
@@ -22802,7 +22802,7 @@ See ChangeLog.14 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2009-2022 Free Software Foundation, Inc.
+  Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.16 b/lisp/ChangeLog.16
index ef230bf9edb..6dda3703e6d 100644
--- a/lisp/ChangeLog.16
+++ b/lisp/ChangeLog.16
@@ -10968,8 +10968,8 @@
        * comint.el (comint-history-isearch-end):
        Use `isearch-search-fun-default'.
        (comint-history-isearch-search): Use `isearch-search-fun-default'
-       and remove spacial case for `isearch-word'.
-       (comint-history-isearch-wrap): Remove spacial case for
+       and remove special case for `isearch-word'.
+       (comint-history-isearch-wrap): Remove special case for
        `isearch-word'.
 
        * hexl.el (hexl-isearch-search-function):
@@ -10982,13 +10982,13 @@
        Use `isearch-search-fun-default'.
 
        * simple.el (minibuffer-history-isearch-search):
-       Use `isearch-search-fun-default' and remove spacial case for
+       Use `isearch-search-fun-default' and remove special case for
        `isearch-word'.
-       (minibuffer-history-isearch-wrap): Remove spacial case for
+       (minibuffer-history-isearch-wrap): Remove special case for
        `isearch-word'.
 
        * textmodes/reftex-global.el (reftex-isearch-wrap-function):
-       Remove spacial case for `isearch-word'.
+       Remove special case for `isearch-word'.
        (reftex-isearch-isearch-search): Use `isearch-search-fun-default'.
 
 2012-05-28  Agustín Martín Domingo  <agustin.martin@hispalinux.es>
@@ -25223,7 +25223,7 @@ See ChangeLog.15 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2011-2022 Free Software Foundation, Inc.
+  Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.17 b/lisp/ChangeLog.17
index 57620513e3b..5036eabf0fd 100644
--- a/lisp/ChangeLog.17
+++ b/lisp/ChangeLog.17
@@ -15465,7 +15465,7 @@
 2013-12-12  Fabián Ezequiel Gallina  <fgallina@gnu.org>
 
        * progmodes/python.el (python-indent-context)
-       (python-indent-calculate-indentation): Fix auto-identation
+       (python-indent-calculate-indentation): Fix auto-indentation
        behavior for comment blocks.  (Bug#15916)
 
 2013-12-12  Nathan Trapuzzano  <nbtrap@nbtrap.com>  (tiny change)
@@ -26294,7 +26294,7 @@ See ChangeLog.16 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2011-2022 Free Software Foundation, Inc.
+  Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.2 b/lisp/ChangeLog.2
index d5b40eb77a5..039f9abd13d 100644
--- a/lisp/ChangeLog.2
+++ b/lisp/ChangeLog.2
@@ -3992,7 +3992,7 @@
 
 See ChangeLog.1 for earlier changes.
 
-    Copyright (C) 1986-1988, 2001-2022 Free Software Foundation, Inc.
+    Copyright (C) 1986-1988, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.3 b/lisp/ChangeLog.3
index 46089685a3d..5c4d1e7a82a 100644
--- a/lisp/ChangeLog.3
+++ b/lisp/ChangeLog.3
@@ -12433,7 +12433,7 @@ See ChangeLog.2 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 1989, 1993, 2001-2022 Free Software Foundation, Inc.
+    Copyright (C) 1989, 1993, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.4 b/lisp/ChangeLog.4
index ddea2a4e2fb..ecadb4a30d5 100644
--- a/lisp/ChangeLog.4
+++ b/lisp/ChangeLog.4
@@ -8935,7 +8935,7 @@ See ChangeLog.3 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+    Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.5 b/lisp/ChangeLog.5
index b7b8b892db4..63cf5db94c4 100644
--- a/lisp/ChangeLog.5
+++ b/lisp/ChangeLog.5
@@ -9268,7 +9268,7 @@ See ChangeLog.4 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 1994-1995, 2001-2022 Free Software Foundation, Inc.
+    Copyright (C) 1994-1995, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.6 b/lisp/ChangeLog.6
index 8e07e5c36af..4e7366c80a8 100644
--- a/lisp/ChangeLog.6
+++ b/lisp/ChangeLog.6
@@ -8021,7 +8021,7 @@ See ChangeLog.5 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 1995-1996, 2001-2022 Free Software Foundation, Inc.
+    Copyright (C) 1995-1996, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.7 b/lisp/ChangeLog.7
index 91b8d474224..667cd5e850a 100644
--- a/lisp/ChangeLog.7
+++ b/lisp/ChangeLog.7
@@ -14679,7 +14679,7 @@
        * simple.el (current-word): Ignore text properties.
 
        * edebug.el (edebug-sit-for-seconds): New variable.
-       (edebug-display): Use that variable to control amt of time.
+       (edebug-display): Use that variable to control amount of time.
 
 1997-06-22  Morten Welinder  <terra@diku.dk>
 
@@ -23111,7 +23111,7 @@ See ChangeLog.6 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-       Copyright (C) 1997-1998, 2001-2022 Free Software Foundation,
+       Copyright (C) 1997-1998, 2001-2023 Free Software Foundation,
        Inc.
 
   This file is part of GNU Emacs.
diff --git a/lisp/ChangeLog.8 b/lisp/ChangeLog.8
index 3b6205bc60d..9c5096e56c5 100644
--- a/lisp/ChangeLog.8
+++ b/lisp/ChangeLog.8
@@ -9993,7 +9993,7 @@ See ChangeLog.7 for earlier changes.
 ;; add-log-time-zone-rule: t
 ;; End:
 
-    Copyright (C) 1999, 2001-2022 Free Software Foundation, Inc.
+    Copyright (C) 1999, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.9 b/lisp/ChangeLog.9
index be6ba962cf3..063b9ea4991 100644
--- a/lisp/ChangeLog.9
+++ b/lisp/ChangeLog.9
@@ -20685,7 +20685,7 @@ See ChangeLog.8 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 2000-2011, 2013-2022 Free Software Foundation, Inc.
+    Copyright (C) 2000-2011, 2013-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index a1d758edf93..b459de49a96 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2000-2022 Free Software Foundation, Inc.
+# Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/lisp/abbrev.el b/lisp/abbrev.el
index 2ca8e25dac7..ef8ef1ab5a6 100644
--- a/lisp/abbrev.el
+++ b/lisp/abbrev.el
@@ -1,6 +1,6 @@
 ;;; abbrev.el --- abbrev mode commands for Emacs -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: abbrev convenience
@@ -501,7 +501,7 @@ PROPS is a list of properties."
 (defun abbrev-table-p (object)
   "Return non-nil if OBJECT is an abbrev table."
   (and (obarrayp object)
-       (numberp (ignore-error 'wrong-type-argument
+       (numberp (ignore-error wrong-type-argument
                   (abbrev-table-get object :abbrev-table-modiff)))))
 
 (defun abbrev-table-empty-p (object &optional ignore-system)
diff --git a/lisp/align.el b/lisp/align.el
index be70f8f9d4f..569186d241d 100644
--- a/lisp/align.el
+++ b/lisp/align.el
@@ -1,6 +1,6 @@
 ;;; align.el --- align text to a specific column, by regexp -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/allout-widgets.el b/lisp/allout-widgets.el
index 4eab2c11c63..5e137b21fbb 100644
--- a/lisp/allout-widgets.el
+++ b/lisp/allout-widgets.el
@@ -1,6 +1,6 @@
 ;;; allout-widgets.el --- Visually highlight allout outline structure.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Ken Manheimer <ken dot manheimer at gmail...>
 ;; Version: 1.0
diff --git a/lisp/allout.el b/lisp/allout.el
index df0181cecbd..4d5d814ae01 100644
--- a/lisp/allout.el
+++ b/lisp/allout.el
@@ -1,6 +1,6 @@
 ;;; allout.el --- extensive outline mode for use alone and with other modes  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: Ken Manheimer <ken dot manheimer at gmail...>
 ;; Created: Dec 1991 -- first release to usenet
diff --git a/lisp/ansi-color.el b/lisp/ansi-color.el
index 5e7015db549..0461ced6956 100644
--- a/lisp/ansi-color.el
+++ b/lisp/ansi-color.el
@@ -1,6 +1,6 @@
 ;;; ansi-color.el --- translate ANSI escape sequences into faces -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Version: 3.4.2
diff --git a/lisp/ansi-osc.el b/lisp/ansi-osc.el
index 23d0363865b..886291a2c78 100644
--- a/lisp/ansi-osc.el
+++ b/lisp/ansi-osc.el
@@ -1,6 +1,6 @@
 ;;; ansi-osc.el --- Support for OSC escape sequences      -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2022  Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Augusto Stoffel <arstoffel@gmail.com>
 ;;         Matthias Meulien <orontee@gmail.com>
diff --git a/lisp/apropos.el b/lisp/apropos.el
index 89f1f150a12..b260d889955 100644
--- a/lisp/apropos.el
+++ b/lisp/apropos.el
@@ -1,6 +1,6 @@
 ;;; apropos.el --- apropos commands for users and programmers  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1989-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1989-2023 Free Software Foundation, Inc.
 
 ;; Author: Joe Wells <jbw@bigbird.bu.edu>
 ;;     Daniel Pfeiffer <occitan@esperanto.org> (rewrite)
diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el
index b6f7794e337..6f3e922880d 100644
--- a/lisp/arc-mode.el
+++ b/lisp/arc-mode.el
@@ -1,6 +1,6 @@
 ;;; arc-mode.el --- simple editing of archives  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995, 1997-1998, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1995, 1997-1998, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Morten Welinder <terra@gnu.org>
diff --git a/lisp/array.el b/lisp/array.el
index aed93ffb65b..b2f961d187b 100644
--- a/lisp/array.el
+++ b/lisp/array.el
@@ -1,6 +1,6 @@
 ;;; array.el --- array editing commands for GNU Emacs  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1987, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: David M. Brown
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/auth-source-pass.el b/lisp/auth-source-pass.el
index fbb6944e26f..dbcc9d05753 100644
--- a/lisp/auth-source-pass.el
+++ b/lisp/auth-source-pass.el
@@ -1,6 +1,6 @@
 ;;; auth-source-pass.el --- Integrate auth-source with password-store -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2015, 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015, 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Damien Cassou <damien@cassou.me>,
 ;;         Nicolas Petton <nicolas@petton.fr>
diff --git a/lisp/auth-source.el b/lisp/auth-source.el
index feefd391a87..e51fc02724a 100644
--- a/lisp/auth-source.el
+++ b/lisp/auth-source.el
@@ -1,6 +1,6 @@
 ;;; auth-source.el --- authentication sources for Gnus and Emacs -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <tzz@lifelogs.com>
 ;; Keywords: news
diff --git a/lisp/autoinsert.el b/lisp/autoinsert.el
index 354b28da5a4..3d95ce60ae3 100644
--- a/lisp/autoinsert.el
+++ b/lisp/autoinsert.el
@@ -1,6 +1,6 @@
 ;;; autoinsert.el --- automatic mode-dependent insertion of text into new 
files  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Author: Charlie Martin <crm@cs.duke.edu>
 ;; Adapted-By: Daniel Pfeiffer <occitan@esperanto.org>
diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index 1ed3f693ab7..23b7ca0a1d4 100644
--- a/lisp/autorevert.el
+++ b/lisp/autorevert.el
@@ -1,6 +1,6 @@
 ;;; autorevert.el --- revert buffers when files on disk change  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1997-1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Anders Lindgren
 ;; Keywords: convenience
diff --git a/lisp/avoid.el b/lisp/avoid.el
index 2e77c8feff1..eea6e88bd9b 100644
--- a/lisp/avoid.el
+++ b/lisp/avoid.el
@@ -1,6 +1,6 @@
 ;;; avoid.el --- make mouse pointer stay out of the way of editing  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1993-1994, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <boris@gnu.org>
 ;; Keywords: mouse
diff --git a/lisp/battery.el b/lisp/battery.el
index 8de80109c6c..4306d5b2058 100644
--- a/lisp/battery.el
+++ b/lisp/battery.el
@@ -1,6 +1,6 @@
 ;;; battery.el --- display battery status information  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1997-1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Ralph Schleicher <rs@ralph-schleicher.de>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/bindings.el b/lisp/bindings.el
index a3f51ebb315..99189d2e570 100644
--- a/lisp/bindings.el
+++ b/lisp/bindings.el
@@ -1,6 +1,6 @@
 ;;; bindings.el --- define standard key bindings and some variables  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
@@ -1012,8 +1012,8 @@ if `inhibit-field-text-motion' is non-nil."
 ;; (define-key ctl-x-map "U" 'undo-only)
 (defvar-keymap undo-repeat-map
   :doc "Keymap to repeat undo key sequences \\`C-x u u'.  Used in 
`repeat-mode'."
+  :repeat t
   "u" #'undo)
-(put 'undo 'repeat-map 'undo-repeat-map)
 
 (define-key global-map '[(control ??)] 'undo-redo)
 (define-key global-map [?\C-\M-_] 'undo-redo)
@@ -1033,12 +1033,10 @@ if `inhibit-field-text-motion' is non-nil."
 
 (defvar-keymap buffer-navigation-repeat-map
   :doc "Keymap to repeat `next-buffer' and `previous-buffer'.  Used in 
`repeat-mode'."
+  :repeat t
   "<right>" #'next-buffer
   "<left>"  #'previous-buffer)
 
-(put 'next-buffer 'repeat-map 'buffer-navigation-repeat-map)
-(put 'previous-buffer 'repeat-map 'buffer-navigation-repeat-map)
-
 (let ((map minibuffer-local-map))
   (define-key map "\en"   'next-history-element)
   (define-key map [next]  'next-history-element)
@@ -1111,12 +1109,11 @@ if `inhibit-field-text-motion' is non-nil."
 
 (defvar-keymap next-error-repeat-map
   :doc "Keymap to repeat `next-error' key sequences.  Used in `repeat-mode'."
+  :repeat t
   "n"   #'next-error
   "M-n" #'next-error
   "p"   #'previous-error
   "M-p" #'previous-error)
-(put 'next-error 'repeat-map 'next-error-repeat-map)
-(put 'previous-error 'repeat-map 'next-error-repeat-map)
 
 (defvar-keymap goto-map
   :doc "Keymap for navigation commands."
@@ -1474,12 +1471,10 @@ if `inhibit-field-text-motion' is non-nil."
 
 (defvar-keymap page-navigation-repeat-map
   :doc "Keymap to repeat page navigation key sequences.  Used in 
`repeat-mode'."
+  :repeat t
   "]" #'forward-page
   "[" #'backward-page)
 
-(put 'forward-page 'repeat-map 'page-navigation-repeat-map)
-(put 'backward-page 'repeat-map 'page-navigation-repeat-map)
-
 (define-key ctl-x-map "\C-p" 'mark-page)
 (define-key ctl-x-map "l" 'count-lines-page)
 (define-key ctl-x-map "np" 'narrow-to-page)
diff --git a/lisp/bookmark.el b/lisp/bookmark.el
index 7f3a264f53d..11368910876 100644
--- a/lisp/bookmark.el
+++ b/lisp/bookmark.el
@@ -1,6 +1,6 @@
 ;;; bookmark.el --- set bookmarks, maybe annotate them, jump to them later -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1993-1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Karl Fogel <kfogel@red-bean.com>
 ;; Created: July, 1993
diff --git a/lisp/bs.el b/lisp/bs.el
index d6df89138db..5f31530f068 100644
--- a/lisp/bs.el
+++ b/lisp/bs.el
@@ -1,6 +1,6 @@
 ;;; bs.el --- menu for selecting and displaying buffers -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Olaf Sylvester <Olaf.Sylvester@netsurf.de>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el
index 448a5395c04..29c981c1364 100644
--- a/lisp/buff-menu.el
+++ b/lisp/buff-menu.el
@@ -1,6 +1,6 @@
 ;;; buff-menu.el --- Interface for viewing and manipulating buffers -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: convenience
diff --git a/lisp/button.el b/lisp/button.el
index 21047ad5541..f043073ea86 100644
--- a/lisp/button.el
+++ b/lisp/button.el
@@ -1,6 +1,6 @@
 ;;; button.el --- clickable buttons -*- lexical-binding: t -*-
 ;;
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
 ;; Keywords: extensions, hypermedia
diff --git a/lisp/calc/calc-aent.el b/lisp/calc/calc-aent.el
index ef3e0d4b670..66ede3295ae 100644
--- a/lisp/calc/calc-aent.el
+++ b/lisp/calc/calc-aent.el
@@ -1,6 +1,6 @@
 ;;; calc-aent.el --- algebraic entry functions for Calc  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-alg.el b/lisp/calc/calc-alg.el
index 93ff5ee2403..95f7a34a4ae 100644
--- a/lisp/calc/calc-alg.el
+++ b/lisp/calc/calc-alg.el
@@ -1,6 +1,6 @@
 ;;; calc-alg.el --- algebraic functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-arith.el b/lisp/calc/calc-arith.el
index 025c1ab7f36..54f0a5649a3 100644
--- a/lisp/calc/calc-arith.el
+++ b/lisp/calc/calc-arith.el
@@ -1,6 +1,6 @@
 ;;; calc-arith.el --- arithmetic functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-bin.el b/lisp/calc/calc-bin.el
index 6c6b22296ab..16ebe7552f4 100644
--- a/lisp/calc/calc-bin.el
+++ b/lisp/calc/calc-bin.el
@@ -1,6 +1,6 @@
 ;;; calc-bin.el --- binary functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-comb.el b/lisp/calc/calc-comb.el
index c1352fa3242..a1ebd68f571 100644
--- a/lisp/calc/calc-comb.el
+++ b/lisp/calc/calc-comb.el
@@ -1,6 +1,6 @@
 ;;; calc-comb.el --- combinatoric functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-cplx.el b/lisp/calc/calc-cplx.el
index a084afde189..63e450d86bb 100644
--- a/lisp/calc/calc-cplx.el
+++ b/lisp/calc/calc-cplx.el
@@ -1,6 +1,6 @@
 ;;; calc-cplx.el --- Complex number functions for Calc  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-embed.el b/lisp/calc/calc-embed.el
index 4a9ff256f9f..284d68adeeb 100644
--- a/lisp/calc/calc-embed.el
+++ b/lisp/calc/calc-embed.el
@@ -1,6 +1,6 @@
 ;;; calc-embed.el --- embed Calc in a buffer  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-ext.el b/lisp/calc/calc-ext.el
index 7ee73d100a0..bb0ecd2c84f 100644
--- a/lisp/calc/calc-ext.el
+++ b/lisp/calc/calc-ext.el
@@ -1,6 +1,6 @@
 ;;; calc-ext.el --- various extension functions for Calc  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-fin.el b/lisp/calc/calc-fin.el
index 1ff6914ebd8..30da613f988 100644
--- a/lisp/calc/calc-fin.el
+++ b/lisp/calc/calc-fin.el
@@ -1,6 +1,6 @@
 ;;; calc-fin.el --- financial functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-forms.el b/lisp/calc/calc-forms.el
index 8f5104e9dc5..a75842ad172 100644
--- a/lisp/calc/calc-forms.el
+++ b/lisp/calc/calc-forms.el
@@ -1,6 +1,6 @@
 ;;; calc-forms.el --- data format conversion functions for Calc  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-frac.el b/lisp/calc/calc-frac.el
index 0a2ad52cd67..b57c1d6c760 100644
--- a/lisp/calc/calc-frac.el
+++ b/lisp/calc/calc-frac.el
@@ -1,6 +1,6 @@
 ;;; calc-frac.el --- fraction functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-funcs.el b/lisp/calc/calc-funcs.el
index 23d33b38a79..cb9f7887ddc 100644
--- a/lisp/calc/calc-funcs.el
+++ b/lisp/calc/calc-funcs.el
@@ -1,6 +1,6 @@
 ;;; calc-funcs.el --- well-known functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-graph.el b/lisp/calc/calc-graph.el
index 5735126bf50..3de761e19f8 100644
--- a/lisp/calc/calc-graph.el
+++ b/lisp/calc/calc-graph.el
@@ -1,6 +1,6 @@
 ;;; calc-graph.el --- graph output functions for Calc  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-help.el b/lisp/calc/calc-help.el
index a513a7de0c5..d0052472836 100644
--- a/lisp/calc/calc-help.el
+++ b/lisp/calc/calc-help.el
@@ -1,6 +1,6 @@
 ;;; calc-help.el --- help display functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-incom.el b/lisp/calc/calc-incom.el
index 5ef3b224702..16cb991dfa6 100644
--- a/lisp/calc/calc-incom.el
+++ b/lisp/calc/calc-incom.el
@@ -1,6 +1,6 @@
 ;;; calc-incom.el --- complex data type input functions for Calc  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-keypd.el b/lisp/calc/calc-keypd.el
index 3db3746a8e5..060099b8892 100644
--- a/lisp/calc/calc-keypd.el
+++ b/lisp/calc/calc-keypd.el
@@ -1,6 +1,6 @@
 ;;; calc-keypd.el --- mouse-capable keypad input for Calc  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-lang.el b/lisp/calc/calc-lang.el
index 5c36dd30b99..f2d8aaa20a7 100644
--- a/lisp/calc/calc-lang.el
+++ b/lisp/calc/calc-lang.el
@@ -1,6 +1,6 @@
 ;;; calc-lang.el --- calc language functions  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-macs.el b/lisp/calc/calc-macs.el
index 0d27b627f27..9421f74a8ed 100644
--- a/lisp/calc/calc-macs.el
+++ b/lisp/calc/calc-macs.el
@@ -1,6 +1,6 @@
 ;;; calc-macs.el --- important macros for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-map.el b/lisp/calc/calc-map.el
index 638a4cdbe85..7496537494b 100644
--- a/lisp/calc/calc-map.el
+++ b/lisp/calc/calc-map.el
@@ -1,6 +1,6 @@
 ;;; calc-map.el --- higher-order functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-math.el b/lisp/calc/calc-math.el
index 40236e452cc..7b4c14efad0 100644
--- a/lisp/calc/calc-math.el
+++ b/lisp/calc/calc-math.el
@@ -1,6 +1,6 @@
 ;;; calc-math.el --- mathematical functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-menu.el b/lisp/calc/calc-menu.el
index 9d69e447714..bc6bb761f26 100644
--- a/lisp/calc/calc-menu.el
+++ b/lisp/calc/calc-menu.el
@@ -1,6 +1,6 @@
 ;;; calc-menu.el --- a menu for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/calc/calc-misc.el b/lisp/calc/calc-misc.el
index 7c75e79a268..613fb0a0154 100644
--- a/lisp/calc/calc-misc.el
+++ b/lisp/calc/calc-misc.el
@@ -1,6 +1,6 @@
 ;;; calc-misc.el --- miscellaneous functions for Calc  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-mode.el b/lisp/calc/calc-mode.el
index 5690f101182..71a0171e7de 100644
--- a/lisp/calc/calc-mode.el
+++ b/lisp/calc/calc-mode.el
@@ -1,6 +1,6 @@
 ;;; calc-mode.el --- calculator modes for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-mtx.el b/lisp/calc/calc-mtx.el
index d54efb6637e..0a5f2a2c208 100644
--- a/lisp/calc/calc-mtx.el
+++ b/lisp/calc/calc-mtx.el
@@ -1,6 +1,6 @@
 ;;; calc-mtx.el --- matrix functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-nlfit.el b/lisp/calc/calc-nlfit.el
index 2b2abc3fdb1..72b906ff69b 100644
--- a/lisp/calc/calc-nlfit.el
+++ b/lisp/calc/calc-nlfit.el
@@ -1,6 +1,6 @@
 ;;; calc-nlfit.el --- nonlinear curve fitting for Calc  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/calc/calc-poly.el b/lisp/calc/calc-poly.el
index 3e98b0532fe..c32b5be5849 100644
--- a/lisp/calc/calc-poly.el
+++ b/lisp/calc/calc-poly.el
@@ -1,6 +1,6 @@
 ;;; calc-poly.el --- polynomial functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-prog.el b/lisp/calc/calc-prog.el
index 127f6340a1e..d8569d0c5af 100644
--- a/lisp/calc/calc-prog.el
+++ b/lisp/calc/calc-prog.el
@@ -1,6 +1,6 @@
 ;;; calc-prog.el --- user programmability functions for Calc  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-rewr.el b/lisp/calc/calc-rewr.el
index 5da91b49c8d..b7b3b7b16d4 100644
--- a/lisp/calc/calc-rewr.el
+++ b/lisp/calc/calc-rewr.el
@@ -1,6 +1,6 @@
 ;;; calc-rewr.el --- rewriting functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-rules.el b/lisp/calc/calc-rules.el
index 96264bf18f3..2d012d7ff63 100644
--- a/lisp/calc/calc-rules.el
+++ b/lisp/calc/calc-rules.el
@@ -1,6 +1,6 @@
 ;;; calc-rules.el --- rules for simplifying algebraic expressions in Calc  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-sel.el b/lisp/calc/calc-sel.el
index 64f8007e521..8d020d02aa7 100644
--- a/lisp/calc/calc-sel.el
+++ b/lisp/calc/calc-sel.el
@@ -1,6 +1,6 @@
 ;;; calc-sel.el --- data selection functions for Calc  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-stat.el b/lisp/calc/calc-stat.el
index a7fe36001f0..bc5d575f257 100644
--- a/lisp/calc/calc-stat.el
+++ b/lisp/calc/calc-stat.el
@@ -1,6 +1,6 @@
 ;;; calc-stat.el --- statistical functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-store.el b/lisp/calc/calc-store.el
index 023dd40c155..97d1a76d0dc 100644
--- a/lisp/calc/calc-store.el
+++ b/lisp/calc/calc-store.el
@@ -1,6 +1,6 @@
 ;;; calc-store.el --- value storage functions for Calc  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-stuff.el b/lisp/calc/calc-stuff.el
index 758b9201843..595fef85224 100644
--- a/lisp/calc/calc-stuff.el
+++ b/lisp/calc/calc-stuff.el
@@ -1,6 +1,6 @@
 ;;; calc-stuff.el --- miscellaneous functions for Calc  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-trail.el b/lisp/calc/calc-trail.el
index d8c6eb615fa..945de4ae493 100644
--- a/lisp/calc/calc-trail.el
+++ b/lisp/calc/calc-trail.el
@@ -1,6 +1,6 @@
 ;;; calc-trail.el --- functions for manipulating the Calc "trail"  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-undo.el b/lisp/calc/calc-undo.el
index 9ff5d4dfbb6..cb6254f4ab6 100644
--- a/lisp/calc/calc-undo.el
+++ b/lisp/calc/calc-undo.el
@@ -1,6 +1,6 @@
 ;;; calc-undo.el --- undo functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el
index cc1f5085a7c..988fef2fcd2 100644
--- a/lisp/calc/calc-units.el
+++ b/lisp/calc/calc-units.el
@@ -1,6 +1,6 @@
 ;;; calc-units.el --- unit conversion functions for Calc  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-vec.el b/lisp/calc/calc-vec.el
index 8d99f62a9ba..90239d58808 100644
--- a/lisp/calc/calc-vec.el
+++ b/lisp/calc/calc-vec.el
@@ -1,6 +1,6 @@
 ;;; calc-vec.el --- vector functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc-yank.el b/lisp/calc/calc-yank.el
index 35014e022be..a2a91dc8fb8 100644
--- a/lisp/calc/calc-yank.el
+++ b/lisp/calc/calc-yank.el
@@ -1,6 +1,6 @@
 ;;; calc-yank.el --- kill-ring functionality for Calc  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el
index 6ea8a4202fc..39e54c89e06 100644
--- a/lisp/calc/calc.el
+++ b/lisp/calc/calc.el
@@ -1,6 +1,6 @@
 ;;; calc.el --- the GNU Emacs calculator  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 ;; Keywords: convenience, extensions
diff --git a/lisp/calc/calcalg2.el b/lisp/calc/calcalg2.el
index 0f3f37de760..e60c4539608 100644
--- a/lisp/calc/calcalg2.el
+++ b/lisp/calc/calcalg2.el
@@ -1,6 +1,6 @@
 ;;; calcalg2.el --- more algebraic functions for Calc  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calcalg3.el b/lisp/calc/calcalg3.el
index 1d85f3d549b..af0daa55309 100644
--- a/lisp/calc/calcalg3.el
+++ b/lisp/calc/calcalg3.el
@@ -1,6 +1,6 @@
 ;;; calcalg3.el --- more algebraic functions for Calc  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calccomp.el b/lisp/calc/calccomp.el
index 60b25e64416..c42e62853ed 100644
--- a/lisp/calc/calccomp.el
+++ b/lisp/calc/calccomp.el
@@ -1,6 +1,6 @@
 ;;; calccomp.el --- composition functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calcsel2.el b/lisp/calc/calcsel2.el
index 317a628c6db..8935511db6e 100644
--- a/lisp/calc/calcsel2.el
+++ b/lisp/calc/calcsel2.el
@@ -1,6 +1,6 @@
 ;;; calcsel2.el --- selection functions for Calc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calculator.el b/lisp/calculator.el
index a80437d6ecf..6a1d960c3e4 100644
--- a/lisp/calculator.el
+++ b/lisp/calculator.el
@@ -1,6 +1,6 @@
 ;;; calculator.el --- a calculator for Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Eli Barzilay <eli@barzilay.org>
 ;; Keywords: tools, convenience
diff --git a/lisp/calendar/appt.el b/lisp/calendar/appt.el
index a7d13cff9a1..a209623b65e 100644
--- a/lisp/calendar/appt.el
+++ b/lisp/calendar/appt.el
@@ -1,6 +1,6 @@
 ;;; appt.el --- appointment notification functions  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1989-1990, 1994, 1998, 2001-2022 Free Software
+;; Copyright (C) 1989-1990, 1994, 1998, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Neil Mager <neilm@juliet.ll.mit.edu>
diff --git a/lisp/calendar/cal-bahai.el b/lisp/calendar/cal-bahai.el
index 74ce36d21ea..202c38916a9 100644
--- a/lisp/calendar/cal-bahai.el
+++ b/lisp/calendar/cal-bahai.el
@@ -1,6 +1,6 @@
 ;;; cal-bahai.el --- calendar functions for the Bahá’í calendar.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Keywords: calendar
diff --git a/lisp/calendar/cal-china.el b/lisp/calendar/cal-china.el
index c7f7be0dce2..b31d056941c 100644
--- a/lisp/calendar/cal-china.el
+++ b/lisp/calendar/cal-china.el
@@ -1,6 +1,6 @@
 ;;; cal-china.el --- calendar functions for the Chinese calendar  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/calendar/cal-coptic.el b/lisp/calendar/cal-coptic.el
index 4c6aa2a9419..123b1f11f55 100644
--- a/lisp/calendar/cal-coptic.el
+++ b/lisp/calendar/cal-coptic.el
@@ -1,6 +1,6 @@
 ;;; cal-coptic.el --- calendar functions for the Coptic/Ethiopic calendars  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/calendar/cal-dst.el b/lisp/calendar/cal-dst.el
index 5f601f24d24..a96fb0adf7c 100644
--- a/lisp/calendar/cal-dst.el
+++ b/lisp/calendar/cal-dst.el
@@ -1,6 +1,6 @@
 ;;; cal-dst.el --- calendar functions for daylight saving rules  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1993-1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Paul Eggert <eggert@cs.ucla.edu>
 ;;         Edward M. Reingold <reingold@cs.uiuc.edu>
@@ -354,10 +354,10 @@ If the locale never uses daylight saving time, set this 
to 0."
       (if calendar-current-time-zone-cache
           (format-time-string
            "%z" 0 (* 60 (car calendar-current-time-zone-cache)))
-        "+0000")
-    (or (nth 2 calendar-current-time-zone-cache) "EST"))
+        "-0000")
+    (or (nth 2 calendar-current-time-zone-cache) "UTC"))
   "Abbreviated name of standard time zone at `calendar-location-name'.
-For example, \"EST\" in New York City, \"PST\" for Los Angeles."
+For example, \"-0500\" or \"EST\" in New York City."
   :type 'string
   :version "28.1"
   :set-after '(calendar-time-zone-style)
@@ -368,10 +368,10 @@ For example, \"EST\" in New York City, \"PST\" for Los 
Angeles."
       (if calendar-current-time-zone-cache
           (format-time-string
            "%z" 0 (* 60 (cadr calendar-current-time-zone-cache)))
-        "+0000")
-    (or (nth 3 calendar-current-time-zone-cache) "EDT"))
+        "-0000")
+    (or (nth 3 calendar-current-time-zone-cache) "UTC"))
   "Abbreviated name of daylight saving time zone at `calendar-location-name'.
-For example, \"EDT\" in New York City, \"PDT\" for Los Angeles."
+For example, \"-0400\" or \"EDT\" in New York City."
   :type 'string
   :version "28.1"
   :set-after '(calendar-time-zone-style)
diff --git a/lisp/calendar/cal-french.el b/lisp/calendar/cal-french.el
index d70db8de0c5..cc523c28f49 100644
--- a/lisp/calendar/cal-french.el
+++ b/lisp/calendar/cal-french.el
@@ -1,6 +1,6 @@
 ;;; cal-french.el --- calendar functions for the French Revolutionary calendar 
 -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1988-1989, 1992, 1994-1995, 1997, 2001-2022 Free
+;; Copyright (C) 1988-1989, 1992, 1994-1995, 1997, 2001-2023 Free
 ;; Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
diff --git a/lisp/calendar/cal-hebrew.el b/lisp/calendar/cal-hebrew.el
index 1c08de53fbd..b6c60185029 100644
--- a/lisp/calendar/cal-hebrew.el
+++ b/lisp/calendar/cal-hebrew.el
@@ -1,6 +1,6 @@
 ;;; cal-hebrew.el --- calendar functions for the Hebrew calendar  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Nachum Dershowitz <nachum@cs.uiuc.edu>
 ;;         Edward M. Reingold <reingold@cs.uiuc.edu>
diff --git a/lisp/calendar/cal-html.el b/lisp/calendar/cal-html.el
index b1c829af48b..c85c476a109 100644
--- a/lisp/calendar/cal-html.el
+++ b/lisp/calendar/cal-html.el
@@ -1,6 +1,6 @@
 ;;; cal-html.el --- functions for printing HTML calendars  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Anna M. Bigatti <bigatti@dima.unige.it>
 ;; Keywords: calendar
diff --git a/lisp/calendar/cal-islam.el b/lisp/calendar/cal-islam.el
index c6afb27b445..172e54edca6 100644
--- a/lisp/calendar/cal-islam.el
+++ b/lisp/calendar/cal-islam.el
@@ -1,6 +1,6 @@
 ;;; cal-islam.el --- calendar functions for the Islamic calendar  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/calendar/cal-iso.el b/lisp/calendar/cal-iso.el
index 880dd539aaf..a4a3e585745 100644
--- a/lisp/calendar/cal-iso.el
+++ b/lisp/calendar/cal-iso.el
@@ -1,6 +1,6 @@
 ;;; cal-iso.el --- calendar functions for the ISO calendar  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/calendar/cal-julian.el b/lisp/calendar/cal-julian.el
index e614d3a1f66..f45150455b0 100644
--- a/lisp/calendar/cal-julian.el
+++ b/lisp/calendar/cal-julian.el
@@ -1,6 +1,6 @@
 ;;; cal-julian.el --- calendar functions for the Julian calendar  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/calendar/cal-mayan.el b/lisp/calendar/cal-mayan.el
index c1f235ae76f..8ec867454ff 100644
--- a/lisp/calendar/cal-mayan.el
+++ b/lisp/calendar/cal-mayan.el
@@ -1,6 +1,6 @@
 ;;; cal-mayan.el --- calendar functions for the Mayan calendars  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1992-1993, 1995, 1997, 2001-2022 Free Software
+;; Copyright (C) 1992-1993, 1995, 1997, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Stewart M. Clamen <clamen@cs.cmu.edu>
diff --git a/lisp/calendar/cal-menu.el b/lisp/calendar/cal-menu.el
index d66d82d6f4e..edf5534581c 100644
--- a/lisp/calendar/cal-menu.el
+++ b/lisp/calendar/cal-menu.el
@@ -1,6 +1,6 @@
 ;;; cal-menu.el --- calendar functions for menu bar and popup menu support  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1994-1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
 ;;         Lara Rios <lrios@coewl.cen.uiuc.edu>
diff --git a/lisp/calendar/cal-move.el b/lisp/calendar/cal-move.el
index 211e0f1e62d..07a813bb705 100644
--- a/lisp/calendar/cal-move.el
+++ b/lisp/calendar/cal-move.el
@@ -1,6 +1,6 @@
 ;;; cal-move.el --- calendar functions for movement in the calendar  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/calendar/cal-persia.el b/lisp/calendar/cal-persia.el
index f38eb8779a5..822f2153c50 100644
--- a/lisp/calendar/cal-persia.el
+++ b/lisp/calendar/cal-persia.el
@@ -1,6 +1,6 @@
 ;;; cal-persia.el --- calendar functions for the Persian calendar  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/calendar/cal-tex.el b/lisp/calendar/cal-tex.el
index 4458fd6d6cb..8399d77b4c4 100644
--- a/lisp/calendar/cal-tex.el
+++ b/lisp/calendar/cal-tex.el
@@ -1,6 +1,6 @@
 ;;; cal-tex.el --- calendar functions for printing calendars with LaTeX  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Steve Fisk <fisk@bowdoin.edu>
 ;;         Edward M. Reingold <reingold@cs.uiuc.edu>
diff --git a/lisp/calendar/cal-x.el b/lisp/calendar/cal-x.el
index bbc8f27394c..58eea324e82 100644
--- a/lisp/calendar/cal-x.el
+++ b/lisp/calendar/cal-x.el
@@ -1,6 +1,6 @@
 ;;; cal-x.el --- calendar windows in dedicated frames  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1994-1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;;         Edward M. Reingold <reingold@cs.uiuc.edu>
diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el
index c1f176050c2..faa88e7f52f 100644
--- a/lisp/calendar/calendar.el
+++ b/lisp/calendar/calendar.el
@@ -1,6 +1,6 @@
 ;;; calendar.el --- calendar functions  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1988-1995, 1997, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1988-1995, 1997, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
diff --git a/lisp/calendar/diary-lib.el b/lisp/calendar/diary-lib.el
index 9a2baf1e43c..5f1ce0aaea6 100644
--- a/lisp/calendar/diary-lib.el
+++ b/lisp/calendar/diary-lib.el
@@ -1,6 +1,6 @@
 ;;; diary-lib.el --- diary functions  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1989-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1989-2023 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
 ;; Maintainer: emacs-devel@gnu.org
@@ -339,7 +339,7 @@ Returns a string using match elements 1-5, where:
                     (t "\\1 \\2 \\3"))) ; MDY
             "\n \\4 %s, \\5")))
 ;; TODO Sometimes the time is in a different time-zone to the one you
-;; are in.  Eg in PST, you might still get an email referring to:
+;; are in.  E.g., in Los Angeles, you might still get an email referring to:
 ;; "7:00 PM-8:00 PM. Greenwich Standard Time".
 ;; Note that it doesn't use a standard abbreviation for the timezone,
 ;; or anything helpful like that.
diff --git a/lisp/calendar/holidays.el b/lisp/calendar/holidays.el
index 5aa0d26d192..f30c5653c11 100644
--- a/lisp/calendar/holidays.el
+++ b/lisp/calendar/holidays.el
@@ -1,6 +1,6 @@
 ;;; holidays.el --- holiday functions for the calendar package  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1989-1990, 1992-1994, 1997, 2001-2022 Free Software
+;; Copyright (C) 1989-1990, 1992-1994, 1997, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el
index 55757400406..e51251d6d9f 100644
--- a/lisp/calendar/icalendar.el
+++ b/lisp/calendar/icalendar.el
@@ -1,6 +1,6 @@
 ;;; icalendar.el --- iCalendar implementation -*- lexical-binding: t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author:         Ulf Jasper <ulf.jasper@web.de>
 ;; Created:        August 2002
diff --git a/lisp/calendar/iso8601.el b/lisp/calendar/iso8601.el
index 6827a957a6f..d7d064d9c2a 100644
--- a/lisp/calendar/iso8601.el
+++ b/lisp/calendar/iso8601.el
@@ -1,6 +1,6 @@
 ;;; iso8601.el --- parse ISO 8601 date/time strings  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Keywords: dates
 
@@ -129,7 +129,7 @@ well as variants like \"2008W32\" (week number) and
 
 See `decode-time' for the meaning of FORM."
   (if (not (iso8601-valid-p string))
-      (signal 'wrong-type-argument string)
+      (signal 'wrong-type-argument (list string))
     (let* ((date-string (match-string 1 string))
            (time-string (match-string 2 string))
            (zone-string (match-string 3 string))
@@ -217,7 +217,7 @@ See `decode-time' for the meaning of FORM."
    ((iso8601--match "---\\([0-9][0-9]\\)" string)
     (iso8601--decoded-time :day (string-to-number (match-string 1 string))))
    (t
-    (signal 'wrong-type-argument string))))
+    (signal 'wrong-type-argument (list string)))))
 
 (defun iso8601-parse-time (string &optional form)
   "Parse STRING, which should be an ISO 8601 time string.
@@ -226,11 +226,11 @@ hour/minute/seconds/zone fields filled in.
 
 See `decode-time' for the meaning of FORM."
   (if (not (iso8601--match iso8601--full-time-match string))
-      (signal 'wrong-type-argument string)
+      (signal 'wrong-type-argument (list string))
     (let ((time (match-string 1 string))
           (zone (match-string 2 string)))
       (if (not (iso8601--match iso8601--time-match time))
-          (signal 'wrong-type-argument string)
+          (signal 'wrong-type-argument (list string))
         (let ((hour (string-to-number (match-string 1 time)))
               (minute (and (match-string 2 time)
                            (string-to-number (match-string 2 time))))
@@ -274,7 +274,7 @@ See `decode-time' for the meaning of FORM."
   "Parse STRING, which should be an ISO 8601 time zone.
 Return the number of minutes."
   (if (not (iso8601--match iso8601--zone-match string))
-      (signal 'wrong-type-argument string)
+      (signal 'wrong-type-argument (list string))
     (if (match-string 2 string)
         ;; HH:MM-ish.
         (let ((hour (string-to-number (match-string 3 string)))
@@ -314,14 +314,14 @@ Return the number of minutes."
    ((iso8601--match iso8601--duration-combined-match string)
     (iso8601-parse (substring string 1)))
    (t
-    (signal 'wrong-type-argument string))))
+    (signal 'wrong-type-argument (list string)))))
 
 (defun iso8601-parse-interval (string)
   "Parse ISO 8601 intervals."
   (let ((bits (split-string string "/"))
         start end duration)
     (if (not (= (length bits) 2))
-        (signal 'wrong-type-argument string)
+        (signal 'wrong-type-argument (list string))
       ;; The intervals may be an explicit start/end times, or either a
       ;; start or an end, and an accompanying duration.
       (cond
@@ -338,7 +338,7 @@ Return the number of minutes."
         (setq start (iso8601-parse (car bits))
               end (iso8601-parse (cadr bits))))
        (t
-        (signal 'wrong-type-argument string))))
+        (signal 'wrong-type-argument (list string)))))
     (unless end
       (setq end (decoded-time-add start duration)))
     (unless start
diff --git a/lisp/calendar/lunar.el b/lisp/calendar/lunar.el
index 751bfa1cc82..0db811417af 100644
--- a/lisp/calendar/lunar.el
+++ b/lisp/calendar/lunar.el
@@ -1,6 +1,6 @@
 ;;; lunar.el --- calendar functions for phases of the moon  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1992-1993, 1995, 1997, 2001-2022 Free Software
+;; Copyright (C) 1992-1993, 1995, 1997, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
diff --git a/lisp/calendar/parse-time.el b/lisp/calendar/parse-time.el
index f3ad5139255..1b667a6852e 100644
--- a/lisp/calendar/parse-time.el
+++ b/lisp/calendar/parse-time.el
@@ -1,6 +1,6 @@
 ;;; parse-time.el --- parsing time strings -*- lexical-binding: t -*-
 
-;; Copyright (C) 1996, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Erik Naggum <erik@naggum.no>
 ;; Keywords: util
diff --git a/lisp/calendar/solar.el b/lisp/calendar/solar.el
index 8f501824bb0..d82215a6d35 100644
--- a/lisp/calendar/solar.el
+++ b/lisp/calendar/solar.el
@@ -1,6 +1,6 @@
 ;;; solar.el --- calendar functions for solar events  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1992-1993, 1995, 1997, 2001-2022 Free Software
+;; Copyright (C) 1992-1993, 1995, 1997, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
@@ -839,12 +839,10 @@ This function is suitable for execution in an init file."
                             "E" "W"))))))
          (calendar-standard-time-zone-name
           (if (< arg 16) calendar-standard-time-zone-name
-            (cond ((zerop calendar-time-zone)
-                   (if (eq calendar-time-zone-style 'numeric)
-                       "+0000" "UTC"))
-                  ((< calendar-time-zone 0)
-                   (format "UTC%dmin" calendar-time-zone))
-                  (t  (format "UTC+%dmin" calendar-time-zone)))))
+           (if (and (zerop calendar-time-zone)
+                    (not (eq calendar-time-zone-style 'numeric)))
+               "UTC"
+             (format-time-string "%z" 0 (* 60 calendar-time-zone)))))
          (calendar-daylight-savings-starts
           (if (< arg 16) calendar-daylight-savings-starts))
          (calendar-daylight-savings-ends
diff --git a/lisp/calendar/time-date.el b/lisp/calendar/time-date.el
index bbdcaa4db4e..9cbe8e0f53c 100644
--- a/lisp/calendar/time-date.el
+++ b/lisp/calendar/time-date.el
@@ -1,6 +1,6 @@
 ;;; time-date.el --- Date and time handling functions  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu Umeda <umerin@mse.kyutech.ac.jp>
diff --git a/lisp/calendar/timeclock.el b/lisp/calendar/timeclock.el
index e36119984be..0cd03c15881 100644
--- a/lisp/calendar/timeclock.el
+++ b/lisp/calendar/timeclock.el
@@ -1,6 +1,6 @@
 ;;; timeclock.el --- mode for keeping track of how much you work  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Created: 25 Mar 1999
diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el
index 57fcd1b17e1..671210f3ee8 100644
--- a/lisp/calendar/todo-mode.el
+++ b/lisp/calendar/todo-mode.el
@@ -1,6 +1,6 @@
 ;;; todo-mode.el --- facilities for making and maintaining todo lists  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1997, 1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Oliver Seidel <privat@os10000.net>
 ;;     Stephen Berman <stephen.berman@gmx.net>
diff --git a/lisp/case-table.el b/lisp/case-table.el
index f6f6851dd33..f5cfbae2c9c 100644
--- a/lisp/case-table.el
+++ b/lisp/case-table.el
@@ -1,6 +1,6 @@
 ;;; case-table.el --- code to extend the character set and support case tables 
 -*- lexical-binding: t -*-
 
-;; Copyright (C) 1988, 1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Howard Gayle
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/cdl.el b/lisp/cdl.el
index 81d64b10f63..57504f4dae0 100644
--- a/lisp/cdl.el
+++ b/lisp/cdl.el
@@ -1,6 +1,6 @@
 ;;; cdl.el --- Common Data Language (CDL) utility functions for GNU Emacs -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Ata Etemadi <ATAE@spva.physics.imperial.ac.uk>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/cedet/ChangeLog.1 b/lisp/cedet/ChangeLog.1
index 78275f4db3a..5242c73062b 100644
--- a/lisp/cedet/ChangeLog.1
+++ b/lisp/cedet/ChangeLog.1
@@ -1446,7 +1446,7 @@
        modes, and merge the tables together in :tables from :modetables.
        (srecode-make-mode-table): Init :modetables.
        (srecode-mode-table-find): Search in modetables.
-       (srecode-mode-table-new): Merge the differet files into the
+       (srecode-mode-table-new): Merge the different files into the
        modetables slot.
 
 2012-10-01  David Engster  <deng@randomsample.de>
@@ -3459,7 +3459,7 @@
 ;; coding: utf-8
 ;; End:
 
-       Copyright (C) 2009-2022 Free Software Foundation, Inc.
+       Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/cedet/cedet-cscope.el b/lisp/cedet/cedet-cscope.el
index 454005f8649..da86847a8f2 100644
--- a/lisp/cedet/cedet-cscope.el
+++ b/lisp/cedet/cedet-cscope.el
@@ -1,6 +1,6 @@
 ;;; cedet-cscope.el --- CScope support for CEDET  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Package: cedet
diff --git a/lisp/cedet/cedet-files.el b/lisp/cedet/cedet-files.el
index 19a6d3935e1..1c82b7165a9 100644
--- a/lisp/cedet/cedet-files.el
+++ b/lisp/cedet/cedet-files.el
@@ -1,6 +1,6 @@
 ;;; cedet-files.el --- Common routines dealing with file names.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Package: cedet
diff --git a/lisp/cedet/cedet-global.el b/lisp/cedet/cedet-global.el
index a2d8bae36b4..a175f16d6b8 100644
--- a/lisp/cedet/cedet-global.el
+++ b/lisp/cedet/cedet-global.el
@@ -1,6 +1,6 @@
 ;;; cedet-global.el --- GNU Global support for CEDET.  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Package: cedet
diff --git a/lisp/cedet/cedet-idutils.el b/lisp/cedet/cedet-idutils.el
index 5c500f7e069..e82ffd0990c 100644
--- a/lisp/cedet/cedet-idutils.el
+++ b/lisp/cedet/cedet-idutils.el
@@ -1,6 +1,6 @@
 ;;; cedet-idutils.el --- ID Utils support for CEDET.  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Old-Version: 0.2
diff --git a/lisp/cedet/cedet.el b/lisp/cedet/cedet.el
index c33ac850722..337a5be1cd8 100644
--- a/lisp/cedet/cedet.el
+++ b/lisp/cedet/cedet.el
@@ -1,6 +1,6 @@
 ;;; cedet.el --- Setup CEDET environment  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <david@dponce.com>
 ;; Maintainer: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/cedet/data-debug.el b/lisp/cedet/data-debug.el
index 605dc9fa19c..837d75ea158 100644
--- a/lisp/cedet/data-debug.el
+++ b/lisp/cedet/data-debug.el
@@ -1,6 +1,6 @@
 ;;; data-debug.el --- Data structure debugger  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Old-Version: 0.2
diff --git a/lisp/cedet/ede.el b/lisp/cedet/ede.el
index 1118235757c..272633f5cac 100644
--- a/lisp/cedet/ede.el
+++ b/lisp/cedet/ede.el
@@ -1,6 +1,6 @@
 ;;; ede.el --- Emacs Development Environment gloss  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/auto.el b/lisp/cedet/ede/auto.el
index 7e3cac616fd..901fe958560 100644
--- a/lisp/cedet/ede/auto.el
+++ b/lisp/cedet/ede/auto.el
@@ -1,6 +1,6 @@
 ;;; ede/auto.el --- Autoload features for EDE  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/autoconf-edit.el b/lisp/cedet/ede/autoconf-edit.el
index 8458820bdd0..6663dd03576 100644
--- a/lisp/cedet/ede/autoconf-edit.el
+++ b/lisp/cedet/ede/autoconf-edit.el
@@ -1,6 +1,6 @@
 ;;; ede/autoconf-edit.el --- Keymap for autoconf  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2000, 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2000, 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project
diff --git a/lisp/cedet/ede/base.el b/lisp/cedet/ede/base.el
index 9182fcd5ac9..305bf599151 100644
--- a/lisp/cedet/ede/base.el
+++ b/lisp/cedet/ede/base.el
@@ -1,6 +1,6 @@
 ;;; ede/base.el --- Baseclasses for EDE  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/config.el b/lisp/cedet/ede/config.el
index 8c4f52647bc..39a65d6e393 100644
--- a/lisp/cedet/ede/config.el
+++ b/lisp/cedet/ede/config.el
@@ -1,6 +1,6 @@
 ;;; ede/config.el --- Configuration Handler baseclass  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/cpp-root.el b/lisp/cedet/ede/cpp-root.el
index fe81a4c87df..d30f45f8619 100644
--- a/lisp/cedet/ede/cpp-root.el
+++ b/lisp/cedet/ede/cpp-root.el
@@ -1,6 +1,6 @@
 ;;; ede/cpp-root.el --- A simple way to wrap a C++ project with a single root  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/custom.el b/lisp/cedet/ede/custom.el
index 0854c8cc47f..81edaa01ad4 100644
--- a/lisp/cedet/ede/custom.el
+++ b/lisp/cedet/ede/custom.el
@@ -1,6 +1,6 @@
 ;;; ede/custom.el --- customization of EDE projects.  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/detect.el b/lisp/cedet/ede/detect.el
index 609103566a0..445b540e826 100644
--- a/lisp/cedet/ede/detect.el
+++ b/lisp/cedet/ede/detect.el
@@ -1,6 +1,6 @@
 ;;; ede/detect.el --- EDE project detection and file associations  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/dired.el b/lisp/cedet/ede/dired.el
index dc987b2d5d4..850b1b2b5e2 100644
--- a/lisp/cedet/ede/dired.el
+++ b/lisp/cedet/ede/dired.el
@@ -1,6 +1,6 @@
 ;;; ede/dired.el --- EDE extensions to dired.  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1998-2000, 2003, 2009-2022 Free Software Foundation,
+;; Copyright (C) 1998-2000, 2003, 2009-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/cedet/ede/emacs.el b/lisp/cedet/ede/emacs.el
index c83e6873679..4ae16f6226e 100644
--- a/lisp/cedet/ede/emacs.el
+++ b/lisp/cedet/ede/emacs.el
@@ -1,6 +1,6 @@
 ;;; ede/emacs.el --- Special project for Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/files.el b/lisp/cedet/ede/files.el
index e44ddea32f6..28dc788c736 100644
--- a/lisp/cedet/ede/files.el
+++ b/lisp/cedet/ede/files.el
@@ -1,6 +1,6 @@
 ;;; ede/files.el --- Associate projects with files and directories.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/generic.el b/lisp/cedet/ede/generic.el
index de94808666c..c3e6d5ef520 100644
--- a/lisp/cedet/ede/generic.el
+++ b/lisp/cedet/ede/generic.el
@@ -1,6 +1,6 @@
 ;;; ede/generic.el --- Base Support for generic build systems  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/linux.el b/lisp/cedet/ede/linux.el
index 718eaabb7aa..0208475a8c7 100644
--- a/lisp/cedet/ede/linux.el
+++ b/lisp/cedet/ede/linux.el
@@ -1,6 +1,6 @@
 ;;; ede/linux.el --- Special project for Linux  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/locate.el b/lisp/cedet/ede/locate.el
index 3d89419364f..c356979839d 100644
--- a/lisp/cedet/ede/locate.el
+++ b/lisp/cedet/ede/locate.el
@@ -1,6 +1,6 @@
 ;;; ede/locate.el --- Locate support  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/make.el b/lisp/cedet/ede/make.el
index 5db78a1afb9..5d4bc9f556e 100644
--- a/lisp/cedet/ede/make.el
+++ b/lisp/cedet/ede/make.el
@@ -1,6 +1,6 @@
 ;;; ede/make.el --- General information about "make"  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/makefile-edit.el b/lisp/cedet/ede/makefile-edit.el
index 5aaa5b2687c..9a35c74d841 100644
--- a/lisp/cedet/ede/makefile-edit.el
+++ b/lisp/cedet/ede/makefile-edit.el
@@ -1,6 +1,6 @@
 ;;; makefile-edit.el --- Makefile editing/scanning commands.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/pconf.el b/lisp/cedet/ede/pconf.el
index d747326a3a5..610d0a1dcb6 100644
--- a/lisp/cedet/ede/pconf.el
+++ b/lisp/cedet/ede/pconf.el
@@ -1,6 +1,6 @@
 ;;; ede/pconf.el --- configure.ac maintenance for EDE  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project
diff --git a/lisp/cedet/ede/pmake.el b/lisp/cedet/ede/pmake.el
index 7739115b31f..954683a22bb 100644
--- a/lisp/cedet/ede/pmake.el
+++ b/lisp/cedet/ede/pmake.el
@@ -1,6 +1,6 @@
 ;;; ede-pmake.el --- EDE Generic Project Makefile code generator  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/proj-archive.el b/lisp/cedet/ede/proj-archive.el
index 5de46a49129..9f84497351c 100644
--- a/lisp/cedet/ede/proj-archive.el
+++ b/lisp/cedet/ede/proj-archive.el
@@ -1,6 +1,6 @@
 ;;; ede/proj-archive.el --- EDE Generic Project archive support  -*- 
lexical-binding: t -*-
 
-;;  Copyright (C) 1998-2001, 2009-2022 Free Software Foundation, Inc.
+;;  Copyright (C) 1998-2001, 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/proj-aux.el b/lisp/cedet/ede/proj-aux.el
index 73808da0922..50fcb8ac201 100644
--- a/lisp/cedet/ede/proj-aux.el
+++ b/lisp/cedet/ede/proj-aux.el
@@ -1,6 +1,6 @@
 ;;; ede/proj-aux.el --- EDE Generic Project auxiliary file support  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1998-2000, 2007, 2009-2022 Free Software Foundation,
+;; Copyright (C) 1998-2000, 2007, 2009-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/cedet/ede/proj-comp.el b/lisp/cedet/ede/proj-comp.el
index ec676ac04ba..a31313bfe3d 100644
--- a/lisp/cedet/ede/proj-comp.el
+++ b/lisp/cedet/ede/proj-comp.el
@@ -1,6 +1,6 @@
 ;;; ede/proj-comp.el --- EDE Generic Project compiler/rule driver  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2001, 2004-2005, 2007, 2009-2022 Free Software
+;; Copyright (C) 1999-2001, 2004-2005, 2007, 2009-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/cedet/ede/proj-elisp.el b/lisp/cedet/ede/proj-elisp.el
index 594d8f1c29d..1aa637c94fe 100644
--- a/lisp/cedet/ede/proj-elisp.el
+++ b/lisp/cedet/ede/proj-elisp.el
@@ -1,6 +1,6 @@
 ;;; ede-proj-elisp.el --- EDE Generic Project Emacs Lisp support  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/proj-info.el b/lisp/cedet/ede/proj-info.el
index 299b45967ae..07fe5031ecf 100644
--- a/lisp/cedet/ede/proj-info.el
+++ b/lisp/cedet/ede/proj-info.el
@@ -1,6 +1,6 @@
 ;;; ede-proj-info.el --- EDE Generic Project texinfo support  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/proj-misc.el b/lisp/cedet/ede/proj-misc.el
index 80cbe53475c..3433443f5d8 100644
--- a/lisp/cedet/ede/proj-misc.el
+++ b/lisp/cedet/ede/proj-misc.el
@@ -1,6 +1,6 @@
 ;;; ede-proj-misc.el --- EDE Generic Project Emacs Lisp support  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1998-2001, 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2001, 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/proj-obj.el b/lisp/cedet/ede/proj-obj.el
index 852bbd643aa..50eedf62eca 100644
--- a/lisp/cedet/ede/proj-obj.el
+++ b/lisp/cedet/ede/proj-obj.el
@@ -1,6 +1,6 @@
 ;;; ede/proj-obj.el --- EDE Generic Project Object code generation support  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/proj-prog.el b/lisp/cedet/ede/proj-prog.el
index fab1de81a0b..ce782eb4d0b 100644
--- a/lisp/cedet/ede/proj-prog.el
+++ b/lisp/cedet/ede/proj-prog.el
@@ -1,6 +1,6 @@
 ;;; ede-proj-prog.el --- EDE Generic Project program support  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2001, 2005, 2008-2022 Free Software Foundation,
+;; Copyright (C) 1998-2001, 2005, 2008-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/cedet/ede/proj-scheme.el b/lisp/cedet/ede/proj-scheme.el
index 7b3df3ca000..aa2b8c7fd86 100644
--- a/lisp/cedet/ede/proj-scheme.el
+++ b/lisp/cedet/ede/proj-scheme.el
@@ -1,6 +1,6 @@
 ;;; ede/proj-scheme.el --- EDE Generic Project scheme (guile) support  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1998-2000, 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2000, 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project, make, scheme
diff --git a/lisp/cedet/ede/proj-shared.el b/lisp/cedet/ede/proj-shared.el
index 84bb7f2f3c8..34c9dbb5cf4 100644
--- a/lisp/cedet/ede/proj-shared.el
+++ b/lisp/cedet/ede/proj-shared.el
@@ -1,6 +1,6 @@
 ;;; ede-proj-shared.el --- EDE Generic Project shared library support  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/proj.el b/lisp/cedet/ede/proj.el
index 398e08a1a9d..3d680b3cb8c 100644
--- a/lisp/cedet/ede/proj.el
+++ b/lisp/cedet/ede/proj.el
@@ -1,6 +1,6 @@
 ;;; ede/proj.el --- EDE Generic Project file driver  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1998-2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/project-am.el b/lisp/cedet/ede/project-am.el
index 75fde2043cb..0f28afa7416 100644
--- a/lisp/cedet/ede/project-am.el
+++ b/lisp/cedet/ede/project-am.el
@@ -1,6 +1,6 @@
 ;;; project-am.el --- A project management scheme based on automake files.  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2000, 2003, 2005, 2007-2022 Free Software
+;; Copyright (C) 1998-2000, 2003, 2005, 2007-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/cedet/ede/shell.el b/lisp/cedet/ede/shell.el
index fcf7294215b..4d58797e30b 100644
--- a/lisp/cedet/ede/shell.el
+++ b/lisp/cedet/ede/shell.el
@@ -1,6 +1,6 @@
 ;;; ede/shell.el --- A shell controlled by EDE.  -*- lexical-binding: t; -*-
 ;;
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/simple.el b/lisp/cedet/ede/simple.el
index 83b99d96586..071e8d79eb5 100644
--- a/lisp/cedet/ede/simple.el
+++ b/lisp/cedet/ede/simple.el
@@ -1,6 +1,6 @@
 ;;; ede/simple.el --- Overlay an EDE structure on an existing project  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/source.el b/lisp/cedet/ede/source.el
index e4c8b3cee2a..8c699e8976f 100644
--- a/lisp/cedet/ede/source.el
+++ b/lisp/cedet/ede/source.el
@@ -1,6 +1,6 @@
 ;; ede/source.el --- EDE source code object  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2000, 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project, make
diff --git a/lisp/cedet/ede/speedbar.el b/lisp/cedet/ede/speedbar.el
index f45c070539a..aa3c95fec0c 100644
--- a/lisp/cedet/ede/speedbar.el
+++ b/lisp/cedet/ede/speedbar.el
@@ -1,6 +1,6 @@
 ;;; ede/speedbar.el --- Speedbar viewing of EDE projects  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1998-2001, 2003, 2005, 2007-2022 Free Software
+;; Copyright (C) 1998-2001, 2003, 2005, 2007-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/cedet/ede/srecode.el b/lisp/cedet/ede/srecode.el
index 0aab5b3e6b4..b2f5e4779c8 100644
--- a/lisp/cedet/ede/srecode.el
+++ b/lisp/cedet/ede/srecode.el
@@ -1,6 +1,6 @@
 ;;; ede/srecode.el --- EDE utilities on top of SRecoder  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/ede/system.el b/lisp/cedet/ede/system.el
index b4fc95c6073..dbd48308769 100644
--- a/lisp/cedet/ede/system.el
+++ b/lisp/cedet/ede/system.el
@@ -1,6 +1,6 @@
 ;;; ede-system.el --- EDE working with the system (VC, FTP, ETC)  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2001-2003, 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2003, 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project, make, vc
diff --git a/lisp/cedet/ede/util.el b/lisp/cedet/ede/util.el
index 2a7aecc8bcd..739a2e34e86 100644
--- a/lisp/cedet/ede/util.el
+++ b/lisp/cedet/ede/util.el
@@ -1,6 +1,6 @@
 ;;; ede/util.el --- EDE utilities  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2000, 2005, 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2005, 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project, make
diff --git a/lisp/cedet/mode-local.el b/lisp/cedet/mode-local.el
index ce37a28c351..e1746e1a541 100644
--- a/lisp/cedet/mode-local.el
+++ b/lisp/cedet/mode-local.el
@@ -1,6 +1,6 @@
 ;;; mode-local.el --- Support for mode local facilities  -*- lexical-binding:t 
-*-
 ;;
-;; Copyright (C) 2004-2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2005, 2007-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: David Ponce <david@dponce.com>
 ;; Created: 27 Apr 2004
diff --git a/lisp/cedet/pulse.el b/lisp/cedet/pulse.el
index 5b0df013a3c..37b41fbe8c3 100644
--- a/lisp/cedet/pulse.el
+++ b/lisp/cedet/pulse.el
@@ -1,6 +1,6 @@
 ;;; pulse.el --- Pulsing Overlays  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Version: 1.0
diff --git a/lisp/cedet/semantic.el b/lisp/cedet/semantic.el
index adb47056201..1c9228b0123 100644
--- a/lisp/cedet/semantic.el
+++ b/lisp/cedet/semantic.el
@@ -1,6 +1,6 @@
 ;;; semantic.el --- Semantic buffer evaluator.  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax tools
diff --git a/lisp/cedet/semantic/analyze.el b/lisp/cedet/semantic/analyze.el
index 4c60136ca34..405b1b136e3 100644
--- a/lisp/cedet/semantic/analyze.el
+++ b/lisp/cedet/semantic/analyze.el
@@ -1,6 +1,6 @@
 ;;; semantic/analyze.el --- Analyze semantic tags against local context  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/analyze/complete.el 
b/lisp/cedet/semantic/analyze/complete.el
index 66ce4ff8926..8c8ae6a271d 100644
--- a/lisp/cedet/semantic/analyze/complete.el
+++ b/lisp/cedet/semantic/analyze/complete.el
@@ -1,6 +1,6 @@
 ;;; semantic/analyze/complete.el --- Smart Completions  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/analyze/debug.el 
b/lisp/cedet/semantic/analyze/debug.el
index f750814baa3..6f195c24337 100644
--- a/lisp/cedet/semantic/analyze/debug.el
+++ b/lisp/cedet/semantic/analyze/debug.el
@@ -1,6 +1,6 @@
 ;;; semantic/analyze/debug.el --- Debug the analyzer  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/analyze/fcn.el 
b/lisp/cedet/semantic/analyze/fcn.el
index ef372b5d8b2..d2c4e1aecb4 100644
--- a/lisp/cedet/semantic/analyze/fcn.el
+++ b/lisp/cedet/semantic/analyze/fcn.el
@@ -1,6 +1,6 @@
 ;;; semantic/analyze/fcn.el --- Analyzer support functions.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/analyze/refs.el 
b/lisp/cedet/semantic/analyze/refs.el
index d06962f6fcc..c3acec6a37b 100644
--- a/lisp/cedet/semantic/analyze/refs.el
+++ b/lisp/cedet/semantic/analyze/refs.el
@@ -1,6 +1,6 @@
 ;;; semantic/analyze/refs.el --- Analysis of the references between tags.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/bovine.el b/lisp/cedet/semantic/bovine.el
index a6cf8d89a4f..1fe4bbf76f5 100644
--- a/lisp/cedet/semantic/bovine.el
+++ b/lisp/cedet/semantic/bovine.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine.el --- LL Parser/Analyzer core  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2004, 2006-2007, 2009-2022 Free Software
+;; Copyright (C) 1999-2004, 2006-2007, 2009-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/cedet/semantic/bovine/c.el b/lisp/cedet/semantic/bovine/c.el
index c8470e08cb8..4e6f6568501 100644
--- a/lisp/cedet/semantic/bovine/c.el
+++ b/lisp/cedet/semantic/bovine/c.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine/c.el --- Semantic details for C  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/bovine/debug.el 
b/lisp/cedet/semantic/bovine/debug.el
index 880be915477..f583dbbc691 100644
--- a/lisp/cedet/semantic/bovine/debug.el
+++ b/lisp/cedet/semantic/bovine/debug.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine/debug.el --- Debugger support for bovinator  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2003, 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/bovine/el.el b/lisp/cedet/semantic/bovine/el.el
index 61b400b505f..294616f70d9 100644
--- a/lisp/cedet/semantic/bovine/el.el
+++ b/lisp/cedet/semantic/bovine/el.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine/el.el --- Semantic details for Emacs Lisp  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/bovine/gcc.el 
b/lisp/cedet/semantic/bovine/gcc.el
index 01dbec0113d..4c687fa43be 100644
--- a/lisp/cedet/semantic/bovine/gcc.el
+++ b/lisp/cedet/semantic/bovine/gcc.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine/gcc.el --- gcc querying special code for the C parser  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/bovine/grammar.el 
b/lisp/cedet/semantic/bovine/grammar.el
index 67366ad445e..1b9b65eaaf9 100644
--- a/lisp/cedet/semantic/bovine/grammar.el
+++ b/lisp/cedet/semantic/bovine/grammar.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine/grammar.el --- Bovine's input grammar mode  -*- 
lexical-binding: t; -*-
 ;;
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: David Ponce <david@dponce.com>
 ;; Created: 26 Aug 2002
diff --git a/lisp/cedet/semantic/bovine/make.el 
b/lisp/cedet/semantic/bovine/make.el
index bfc3de20fff..2171136ae9d 100644
--- a/lisp/cedet/semantic/bovine/make.el
+++ b/lisp/cedet/semantic/bovine/make.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine/make.el --- Makefile parsing rules.  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2000-2004, 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2004, 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/bovine/scm.el 
b/lisp/cedet/semantic/bovine/scm.el
index e1cb07034a9..c0852eca8dd 100644
--- a/lisp/cedet/semantic/bovine/scm.el
+++ b/lisp/cedet/semantic/bovine/scm.el
@@ -1,6 +1,6 @@
 ;;; semantic/bovine/scm.el --- Semantic details for Scheme (guile)  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/chart.el b/lisp/cedet/semantic/chart.el
index 342b03f8bb7..880d86fac49 100644
--- a/lisp/cedet/semantic/chart.el
+++ b/lisp/cedet/semantic/chart.el
@@ -1,6 +1,6 @@
 ;;; semantic/chart.el --- Utilities for use with semantic tag tables  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2001, 2003, 2005, 2008-2022 Free Software
+;; Copyright (C) 1999-2001, 2003, 2005, 2008-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/cedet/semantic/complete.el b/lisp/cedet/semantic/complete.el
index 1f372804dcc..84040b572bc 100644
--- a/lisp/cedet/semantic/complete.el
+++ b/lisp/cedet/semantic/complete.el
@@ -1,6 +1,6 @@
 ;;; semantic/complete.el --- Routines for performing tag completion  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2003-2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/ctxt.el b/lisp/cedet/semantic/ctxt.el
index 57c158fc9c8..84e6c6ebecb 100644
--- a/lisp/cedet/semantic/ctxt.el
+++ b/lisp/cedet/semantic/ctxt.el
@@ -1,6 +1,6 @@
 ;;; semantic/ctxt.el --- Context calculations for Semantic tools  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/db-debug.el b/lisp/cedet/semantic/db-debug.el
index 5ce9717421a..c2ab5f0483c 100644
--- a/lisp/cedet/semantic/db-debug.el
+++ b/lisp/cedet/semantic/db-debug.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-debug.el --- Extra level debugging routines for Semantic  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/db-ebrowse.el 
b/lisp/cedet/semantic/db-ebrowse.el
index fa608c7c461..f8ea73cbdde 100644
--- a/lisp/cedet/semantic/db-ebrowse.el
+++ b/lisp/cedet/semantic/db-ebrowse.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-ebrowse.el --- Semanticdb backend using ebrowse.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Authors: Eric M. Ludlam <zappo@gnu.org>
 ;;     Joakim Verona
diff --git a/lisp/cedet/semantic/db-el.el b/lisp/cedet/semantic/db-el.el
index f72e2069089..b97a8264a95 100644
--- a/lisp/cedet/semantic/db-el.el
+++ b/lisp/cedet/semantic/db-el.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-el.el --- Semantic database extensions for Emacs Lisp  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: tags
diff --git a/lisp/cedet/semantic/db-file.el b/lisp/cedet/semantic/db-file.el
index 0fc6806e403..11c3cb7c55f 100644
--- a/lisp/cedet/semantic/db-file.el
+++ b/lisp/cedet/semantic/db-file.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-file.el --- Save a semanticdb to a cache file.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: tags
diff --git a/lisp/cedet/semantic/db-find.el b/lisp/cedet/semantic/db-find.el
index e9d5aaa1777..675ff72cfd3 100644
--- a/lisp/cedet/semantic/db-find.el
+++ b/lisp/cedet/semantic/db-find.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-find.el --- Searching through semantic databases.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: tags
diff --git a/lisp/cedet/semantic/db-global.el b/lisp/cedet/semantic/db-global.el
index 1ef97a6036f..b8dfc3c245f 100644
--- a/lisp/cedet/semantic/db-global.el
+++ b/lisp/cedet/semantic/db-global.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-global.el --- Semantic database extensions for GLOBAL  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2006, 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2006, 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: tags
diff --git a/lisp/cedet/semantic/db-javascript.el 
b/lisp/cedet/semantic/db-javascript.el
index 9c62329e43d..b1c33e25018 100644
--- a/lisp/cedet/semantic/db-javascript.el
+++ b/lisp/cedet/semantic/db-javascript.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-javascript.el --- Semantic database extensions for javascript  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Joakim Verona
 
diff --git a/lisp/cedet/semantic/db-mode.el b/lisp/cedet/semantic/db-mode.el
index 7c471bee4f7..4e40424acb4 100644
--- a/lisp/cedet/semantic/db-mode.el
+++ b/lisp/cedet/semantic/db-mode.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-mode.el --- Semanticdb Minor Mode  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/db-ref.el b/lisp/cedet/semantic/db-ref.el
index 47fd3a903ff..2ed7d8d8937 100644
--- a/lisp/cedet/semantic/db-ref.el
+++ b/lisp/cedet/semantic/db-ref.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-ref.el --- Handle cross-db file references  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/db-typecache.el 
b/lisp/cedet/semantic/db-typecache.el
index efc1ab2c5f9..1864e567c9a 100644
--- a/lisp/cedet/semantic/db-typecache.el
+++ b/lisp/cedet/semantic/db-typecache.el
@@ -1,6 +1,6 @@
 ;;; semantic/db-typecache.el --- Manage Datatypes  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/db.el b/lisp/cedet/semantic/db.el
index 08e03bf7158..7c7ee749249 100644
--- a/lisp/cedet/semantic/db.el
+++ b/lisp/cedet/semantic/db.el
@@ -1,6 +1,6 @@
 ;;; semantic/db.el --- Semantic tag database manager  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: tags
diff --git a/lisp/cedet/semantic/debug.el b/lisp/cedet/semantic/debug.el
index 2fe651a5590..11e44538d31 100644
--- a/lisp/cedet/semantic/debug.el
+++ b/lisp/cedet/semantic/debug.el
@@ -1,6 +1,6 @@
 ;;; semantic/debug.el --- Language Debugger framework  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2003-2005, 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2005, 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/decorate.el b/lisp/cedet/semantic/decorate.el
index ca2a6de3d3e..27cfea6a65c 100644
--- a/lisp/cedet/semantic/decorate.el
+++ b/lisp/cedet/semantic/decorate.el
@@ -1,6 +1,6 @@
 ;;; semantic/decorate.el --- Utilities for decorating/highlighting tokens.  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/decorate/include.el 
b/lisp/cedet/semantic/decorate/include.el
index 26785298e6b..c83de66ef0c 100644
--- a/lisp/cedet/semantic/decorate/include.el
+++ b/lisp/cedet/semantic/decorate/include.el
@@ -1,6 +1,6 @@
 ;;; semantic/decorate/include.el --- Decoration modes for include statements  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/decorate/mode.el 
b/lisp/cedet/semantic/decorate/mode.el
index ad215db0f63..5adcf636cef 100644
--- a/lisp/cedet/semantic/decorate/mode.el
+++ b/lisp/cedet/semantic/decorate/mode.el
@@ -1,6 +1,6 @@
 ;;; semantic/decorate/mode.el --- Minor mode for decorating tags  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/dep.el b/lisp/cedet/semantic/dep.el
index eb922a12507..bd01581feb1 100644
--- a/lisp/cedet/semantic/dep.el
+++ b/lisp/cedet/semantic/dep.el
@@ -1,6 +1,6 @@
 ;;; semantic/dep.el --- Methods for tracking dependencies (include files)  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/doc.el b/lisp/cedet/semantic/doc.el
index 32cd63bce90..09b66e5cfac 100644
--- a/lisp/cedet/semantic/doc.el
+++ b/lisp/cedet/semantic/doc.el
@@ -1,6 +1,6 @@
 ;;; semantic/doc.el --- Routines for documentation strings  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2003, 2005, 2008-2022 Free Software Foundation,
+;; Copyright (C) 1999-2003, 2005, 2008-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/cedet/semantic/ede-grammar.el 
b/lisp/cedet/semantic/ede-grammar.el
index 40ff8fc86d3..42ffe50ca63 100644
--- a/lisp/cedet/semantic/ede-grammar.el
+++ b/lisp/cedet/semantic/ede-grammar.el
@@ -1,6 +1,6 @@
 ;;; semantic/ede-grammar.el --- EDE support for Semantic Grammar Files  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2003-2004, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: project, make
diff --git a/lisp/cedet/semantic/edit.el b/lisp/cedet/semantic/edit.el
index d752ecdf38a..4eeb7745370 100644
--- a/lisp/cedet/semantic/edit.el
+++ b/lisp/cedet/semantic/edit.el
@@ -1,6 +1,6 @@
 ;;; semantic/edit.el --- Edit Management for Semantic  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/find.el b/lisp/cedet/semantic/find.el
index 92644ce0066..9094fcf0739 100644
--- a/lisp/cedet/semantic/find.el
+++ b/lisp/cedet/semantic/find.el
@@ -1,6 +1,6 @@
 ;;; semantic/find.el --- Search routines for Semantic  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1999-2005, 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/format.el b/lisp/cedet/semantic/format.el
index 3d9476d685f..c808da3b093 100644
--- a/lisp/cedet/semantic/format.el
+++ b/lisp/cedet/semantic/format.el
@@ -1,6 +1,6 @@
 ;;; semantic/format.el --- Routines for formatting tags  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1999-2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/fw.el b/lisp/cedet/semantic/fw.el
index 9917c4c5be6..30704760c1d 100644
--- a/lisp/cedet/semantic/fw.el
+++ b/lisp/cedet/semantic/fw.el
@@ -1,6 +1,6 @@
 ;;; semantic/fw.el --- Framework for Semantic  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/grammar.el b/lisp/cedet/semantic/grammar.el
index 8ba0e346fff..2dccd87a710 100644
--- a/lisp/cedet/semantic/grammar.el
+++ b/lisp/cedet/semantic/grammar.el
@@ -1,6 +1,6 @@
 ;;; semantic/grammar.el --- Major mode framework for Semantic grammars  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <david@dponce.com>
 
diff --git a/lisp/cedet/semantic/grm-wy-boot.el 
b/lisp/cedet/semantic/grm-wy-boot.el
index 376fab89c23..159ac64fc30 100644
--- a/lisp/cedet/semantic/grm-wy-boot.el
+++ b/lisp/cedet/semantic/grm-wy-boot.el
@@ -1,6 +1,6 @@
 ;;; semantic/grammar-wy.el --- Generated parser support file  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/cedet/semantic/html.el b/lisp/cedet/semantic/html.el
index 00e19dbc892..7c1181de0d7 100644
--- a/lisp/cedet/semantic/html.el
+++ b/lisp/cedet/semantic/html.el
@@ -1,6 +1,6 @@
 ;;; semantic/html.el --- Semantic details for html files  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2004-2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/ia-sb.el b/lisp/cedet/semantic/ia-sb.el
index 25a011188e1..47a4ce322ca 100644
--- a/lisp/cedet/semantic/ia-sb.el
+++ b/lisp/cedet/semantic/ia-sb.el
@@ -1,6 +1,6 @@
 ;;; semantic/ia-sb.el --- Speedbar analysis display interactor  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/ia.el b/lisp/cedet/semantic/ia.el
index da884b9d16d..890c6dac51a 100644
--- a/lisp/cedet/semantic/ia.el
+++ b/lisp/cedet/semantic/ia.el
@@ -1,6 +1,6 @@
 ;;; semantic/ia.el --- Interactive Analysis functions  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/idle.el b/lisp/cedet/semantic/idle.el
index 8ab115d717e..58f162e67f7 100644
--- a/lisp/cedet/semantic/idle.el
+++ b/lisp/cedet/semantic/idle.el
@@ -1,6 +1,6 @@
 ;;; idle.el --- Schedule parsing tasks in idle time  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2003-2006, 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2006, 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/imenu.el b/lisp/cedet/semantic/imenu.el
index 37dc9632729..a28f050f3a0 100644
--- a/lisp/cedet/semantic/imenu.el
+++ b/lisp/cedet/semantic/imenu.el
@@ -1,6 +1,6 @@
 ;;; semantic/imenu.el --- Use Semantic as an imenu tag generator  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2005, 2007-2008, 2010-2022 Free Software
+;; Copyright (C) 2000-2005, 2007-2008, 2010-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/cedet/semantic/java.el b/lisp/cedet/semantic/java.el
index 53fd4de2975..e65dcdb2db3 100644
--- a/lisp/cedet/semantic/java.el
+++ b/lisp/cedet/semantic/java.el
@@ -1,6 +1,6 @@
 ;;; semantic/java.el --- Semantic functions for Java  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <david@dponce.com>
 
diff --git a/lisp/cedet/semantic/lex-spp.el b/lisp/cedet/semantic/lex-spp.el
index 390c13ec98b..6a16845ecf2 100644
--- a/lisp/cedet/semantic/lex-spp.el
+++ b/lisp/cedet/semantic/lex-spp.el
@@ -1,6 +1,6 @@
 ;;; semantic/lex-spp.el --- Semantic Lexical Pre-processor  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
@@ -1243,7 +1243,7 @@ Finds the header file belonging to NAME, gets the macros
 from that file, and then merge the macros with our current
 symbol table."
   (when semantic-lex-spp-use-headers-flag
-    ;; @todo - do this someday, ok?
+    nil  ; @todo - do this someday, ok?
     ))
 
 (defmacro define-lex-spp-include-analyzer (name doc regexp tokidx
diff --git a/lisp/cedet/semantic/lex.el b/lisp/cedet/semantic/lex.el
index 264b2027711..5fd1fd45400 100644
--- a/lisp/cedet/semantic/lex.el
+++ b/lisp/cedet/semantic/lex.el
@@ -1,6 +1,6 @@
 ;;; semantic/lex.el --- Lexical Analyzer builder  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
@@ -1108,7 +1108,7 @@ This can be done by using `semantic-lex-push-token'."
             (semantic-lex-analysis-bounds (cons (point) (point-max)))
             (semantic-lex-current-depth 0)
             (semantic-lex-maximum-depth semantic-lex-depth))
-        (when ,condition ,@forms)
+        (when ,condition nil ,@forms)  ; `nil' avoids an empty-body warning.
         semantic-lex-token-stream))))
 
 (defmacro define-lex-regex-analyzer (name doc regexp &rest forms)
diff --git a/lisp/cedet/semantic/mru-bookmark.el 
b/lisp/cedet/semantic/mru-bookmark.el
index c3f59a3358f..b8d28eb7b08 100644
--- a/lisp/cedet/semantic/mru-bookmark.el
+++ b/lisp/cedet/semantic/mru-bookmark.el
@@ -1,6 +1,6 @@
 ;;; semantic/mru-bookmark.el --- Automatic bookmark tracking  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/sb.el b/lisp/cedet/semantic/sb.el
index cf18160ad7f..17cf00cd3c4 100644
--- a/lisp/cedet/semantic/sb.el
+++ b/lisp/cedet/semantic/sb.el
@@ -1,6 +1,6 @@
 ;;; semantic/sb.el --- Semantic tag display for speedbar  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/scope.el b/lisp/cedet/semantic/scope.el
index 45964a1a17d..956e901d538 100644
--- a/lisp/cedet/semantic/scope.el
+++ b/lisp/cedet/semantic/scope.el
@@ -1,6 +1,6 @@
 ;;; semantic/scope.el --- Analyzer Scope Calculations  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/senator.el b/lisp/cedet/semantic/senator.el
index 1d16b024a5e..ca4334eaff5 100644
--- a/lisp/cedet/semantic/senator.el
+++ b/lisp/cedet/semantic/senator.el
@@ -1,6 +1,6 @@
 ;;; semantic/senator.el --- SEmantic NAvigaTOR  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <david@dponce.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/cedet/semantic/sort.el b/lisp/cedet/semantic/sort.el
index e02abe98765..aebd50a649b 100644
--- a/lisp/cedet/semantic/sort.el
+++ b/lisp/cedet/semantic/sort.el
@@ -1,6 +1,6 @@
 ;;; semantic/sort.el --- Utilities for sorting and re-arranging tag tables.  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/symref.el b/lisp/cedet/semantic/symref.el
index 2ad95fb5a05..1ebd7ea154b 100644
--- a/lisp/cedet/semantic/symref.el
+++ b/lisp/cedet/semantic/symref.el
@@ -1,6 +1,6 @@
 ;;; semantic/symref.el --- Symbol Reference API  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/symref/cscope.el 
b/lisp/cedet/semantic/symref/cscope.el
index f0246c77d26..2d2e3e134aa 100644
--- a/lisp/cedet/semantic/symref/cscope.el
+++ b/lisp/cedet/semantic/symref/cscope.el
@@ -1,6 +1,6 @@
 ;;; semantic/symref/cscope.el --- Semantic-symref support via cscope  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/symref/filter.el 
b/lisp/cedet/semantic/symref/filter.el
index 3a8f4ad357e..efc4cb06b83 100644
--- a/lisp/cedet/semantic/symref/filter.el
+++ b/lisp/cedet/semantic/symref/filter.el
@@ -1,6 +1,6 @@
 ;;; semantic/symref/filter.el --- Filter symbol reference hits for accuracy  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/symref/global.el 
b/lisp/cedet/semantic/symref/global.el
index b5de9cb90ee..d13222855af 100644
--- a/lisp/cedet/semantic/symref/global.el
+++ b/lisp/cedet/semantic/symref/global.el
@@ -1,6 +1,6 @@
 ;;; semantic/symref/global.el --- Use GNU Global for symbol references  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/symref/grep.el 
b/lisp/cedet/semantic/symref/grep.el
index 076775bfecb..c698c2ef5a2 100644
--- a/lisp/cedet/semantic/symref/grep.el
+++ b/lisp/cedet/semantic/symref/grep.el
@@ -1,6 +1,6 @@
 ;;; semantic/symref/grep.el --- Symref implementation using find/grep  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/symref/idutils.el 
b/lisp/cedet/semantic/symref/idutils.el
index a8d84c7dec1..3052070da75 100644
--- a/lisp/cedet/semantic/symref/idutils.el
+++ b/lisp/cedet/semantic/symref/idutils.el
@@ -1,6 +1,6 @@
 ;;; semantic/symref/idutils.el --- Symref implementation for idutils  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/symref/list.el 
b/lisp/cedet/semantic/symref/list.el
index 1cb5d5b04a7..4b4c968cf81 100644
--- a/lisp/cedet/semantic/symref/list.el
+++ b/lisp/cedet/semantic/symref/list.el
@@ -1,6 +1,6 @@
 ;;; semantic/symref/list.el --- Symref Output List UI  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/tag-file.el b/lisp/cedet/semantic/tag-file.el
index a5220f622ab..ee32adeb574 100644
--- a/lisp/cedet/semantic/tag-file.el
+++ b/lisp/cedet/semantic/tag-file.el
@@ -1,6 +1,6 @@
 ;;; semantic/tag-file.el --- Routines that find files based on tags.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/tag-ls.el b/lisp/cedet/semantic/tag-ls.el
index 244bd57af9f..fb01e0365ac 100644
--- a/lisp/cedet/semantic/tag-ls.el
+++ b/lisp/cedet/semantic/tag-ls.el
@@ -1,6 +1,6 @@
 ;;; semantic/tag-ls.el --- Language Specific override functions for tags  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/tag-write.el b/lisp/cedet/semantic/tag-write.el
index 2b2e8665242..d32a85d6a00 100644
--- a/lisp/cedet/semantic/tag-write.el
+++ b/lisp/cedet/semantic/tag-write.el
@@ -1,6 +1,6 @@
 ;;; semantic/tag-write.el --- Write tags to a text stream  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/tag.el b/lisp/cedet/semantic/tag.el
index aa5b17e9bb7..4c1694ddd6b 100644
--- a/lisp/cedet/semantic/tag.el
+++ b/lisp/cedet/semantic/tag.el
@@ -1,6 +1,6 @@
 ;;; semantic/tag.el --- Tag creation and access  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/texi.el b/lisp/cedet/semantic/texi.el
index d005b7a854c..45e03cb9102 100644
--- a/lisp/cedet/semantic/texi.el
+++ b/lisp/cedet/semantic/texi.el
@@ -1,6 +1,6 @@
 ;;; semantic/texi.el --- Semantic details for Texinfo files  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/semantic/util-modes.el 
b/lisp/cedet/semantic/util-modes.el
index bcded23aec6..92b9f84ebb3 100644
--- a/lisp/cedet/semantic/util-modes.el
+++ b/lisp/cedet/semantic/util-modes.el
@@ -1,6 +1,6 @@
 ;;; semantic/util-modes.el --- Semantic minor modes  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2000-2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Authors: Eric M. Ludlam <zappo@gnu.org>
 ;;          David Ponce <david@dponce.com>
diff --git a/lisp/cedet/semantic/util.el b/lisp/cedet/semantic/util.el
index 24f71a2dcc1..2cd3184d006 100644
--- a/lisp/cedet/semantic/util.el
+++ b/lisp/cedet/semantic/util.el
@@ -1,6 +1,6 @@
 ;;; semantic/util.el --- Utilities for use with semantic tag tables  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/wisent.el b/lisp/cedet/semantic/wisent.el
index b13dc994568..d135adf4d3b 100644
--- a/lisp/cedet/semantic/wisent.el
+++ b/lisp/cedet/semantic/wisent.el
@@ -1,6 +1,6 @@
 ;;; semantic/wisent.el --- Wisent - Semantic gateway  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2001-2007, 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2007, 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <david@dponce.com>
 ;; Created: 30 Aug 2001
diff --git a/lisp/cedet/semantic/wisent/comp.el 
b/lisp/cedet/semantic/wisent/comp.el
index e24f6128a68..d13b2cf326d 100644
--- a/lisp/cedet/semantic/wisent/comp.el
+++ b/lisp/cedet/semantic/wisent/comp.el
@@ -1,6 +1,6 @@
 ;;; semantic/wisent/comp.el --- GNU Bison for Emacs - Grammar compiler  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000-2007, 2009-2022 Free
+;; Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000-2007, 2009-2023 Free
 ;; Software Foundation, Inc.
 
 ;; Author: David Ponce <david@dponce.com>
diff --git a/lisp/cedet/semantic/wisent/grammar.el 
b/lisp/cedet/semantic/wisent/grammar.el
index a4104e333d3..b121b05befe 100644
--- a/lisp/cedet/semantic/wisent/grammar.el
+++ b/lisp/cedet/semantic/wisent/grammar.el
@@ -1,6 +1,6 @@
 ;;; semantic/wisent/grammar.el --- Wisent's input grammar mode  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: David Ponce <david@dponce.com>
 ;; Created: 26 Aug 2002
diff --git a/lisp/cedet/semantic/wisent/java-tags.el 
b/lisp/cedet/semantic/wisent/java-tags.el
index de75c0dda86..3bac18a257c 100644
--- a/lisp/cedet/semantic/wisent/java-tags.el
+++ b/lisp/cedet/semantic/wisent/java-tags.el
@@ -1,6 +1,6 @@
 ;;; semantic/wisent/java-tags.el --- Java LALR parser for Emacs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2006, 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2006, 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <david@dponce.com>
 ;; Created: 15 Dec 2001
diff --git a/lisp/cedet/semantic/wisent/javascript.el 
b/lisp/cedet/semantic/wisent/javascript.el
index 492f574fce6..1750d53d46d 100644
--- a/lisp/cedet/semantic/wisent/javascript.el
+++ b/lisp/cedet/semantic/wisent/javascript.el
@@ -1,6 +1,6 @@
 ;;; semantic/wisent/javascript.el --- javascript parser support  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2005, 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
diff --git a/lisp/cedet/semantic/wisent/python.el 
b/lisp/cedet/semantic/wisent/python.el
index 6b2833ef448..c6a8a35d8df 100644
--- a/lisp/cedet/semantic/wisent/python.el
+++ b/lisp/cedet/semantic/wisent/python.el
@@ -1,6 +1,6 @@
 ;;; wisent-python.el --- Semantic support for Python  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Richard Kim <emacs18@gmail.com>
 ;; Created: June 2002
diff --git a/lisp/cedet/semantic/wisent/wisent.el 
b/lisp/cedet/semantic/wisent/wisent.el
index a73fb167b1e..c2bb429ef76 100644
--- a/lisp/cedet/semantic/wisent/wisent.el
+++ b/lisp/cedet/semantic/wisent/wisent.el
@@ -1,6 +1,6 @@
 ;;; semantic/wisent/wisent.el --- GNU Bison for Emacs - Runtime  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <david@dponce.com>
 ;; Created: 30 January 2002
diff --git a/lisp/cedet/srecode.el b/lisp/cedet/srecode.el
index 9691f906a4c..7f606a6eb56 100644
--- a/lisp/cedet/srecode.el
+++ b/lisp/cedet/srecode.el
@@ -1,6 +1,6 @@
 ;;; srecode.el --- Semantic buffer evaluator.  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: codegeneration
diff --git a/lisp/cedet/srecode/args.el b/lisp/cedet/srecode/args.el
index eb141e34ca8..78b217d6b7e 100644
--- a/lisp/cedet/srecode/args.el
+++ b/lisp/cedet/srecode/args.el
@@ -1,6 +1,6 @@
 ;;; srecode/args.el --- Provide some simple template arguments  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/compile.el b/lisp/cedet/srecode/compile.el
index bed74861ca0..77d3fee9df7 100644
--- a/lisp/cedet/srecode/compile.el
+++ b/lisp/cedet/srecode/compile.el
@@ -1,6 +1,6 @@
 ;;; srecode/compile --- Compilation of srecode template files.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: codegeneration
diff --git a/lisp/cedet/srecode/cpp.el b/lisp/cedet/srecode/cpp.el
index ba9e81715a3..0be8db03bbc 100644
--- a/lisp/cedet/srecode/cpp.el
+++ b/lisp/cedet/srecode/cpp.el
@@ -1,6 +1,6 @@
 ;;; srecode/cpp.el --- C++ specific handlers for Semantic Recoder  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;;         Jan Moringen <scymtym@users.sourceforge.net>
diff --git a/lisp/cedet/srecode/ctxt.el b/lisp/cedet/srecode/ctxt.el
index 195b2f433ef..ebcab20303f 100644
--- a/lisp/cedet/srecode/ctxt.el
+++ b/lisp/cedet/srecode/ctxt.el
@@ -1,6 +1,6 @@
 ;;; srecode/ctxt.el --- Derive a context from the source buffer.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/dictionary.el b/lisp/cedet/srecode/dictionary.el
index 5e986827c99..25d595bf3c3 100644
--- a/lisp/cedet/srecode/dictionary.el
+++ b/lisp/cedet/srecode/dictionary.el
@@ -1,6 +1,6 @@
 ;;; srecode/dictionary.el --- Dictionary code for the semantic recoder.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/document.el b/lisp/cedet/srecode/document.el
index c264ebaa70a..40bb7f9e480 100644
--- a/lisp/cedet/srecode/document.el
+++ b/lisp/cedet/srecode/document.el
@@ -1,6 +1,6 @@
 ;;; srecode/document.el --- Documentation (comment) generation  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/el.el b/lisp/cedet/srecode/el.el
index ebfec205090..bf034691103 100644
--- a/lisp/cedet/srecode/el.el
+++ b/lisp/cedet/srecode/el.el
@@ -1,6 +1,6 @@
 ;;; srecode/el.el --- Emacs Lisp specific arguments  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/expandproto.el 
b/lisp/cedet/srecode/expandproto.el
index 125e841c4d9..d5c22c0d71a 100644
--- a/lisp/cedet/srecode/expandproto.el
+++ b/lisp/cedet/srecode/expandproto.el
@@ -1,6 +1,6 @@
 ;;; srecode/expandproto.el --- Expanding prototypes.  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/extract.el b/lisp/cedet/srecode/extract.el
index f218f1c6e9d..4eb7632b721 100644
--- a/lisp/cedet/srecode/extract.el
+++ b/lisp/cedet/srecode/extract.el
@@ -1,6 +1,6 @@
 ;;; srecode/extract.el --- Extract content from previously inserted macro.  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/fields.el b/lisp/cedet/srecode/fields.el
index 67ee82c73e0..804b9937f6d 100644
--- a/lisp/cedet/srecode/fields.el
+++ b/lisp/cedet/srecode/fields.el
@@ -1,6 +1,6 @@
 ;;; srecode/fields.el --- Handling type-in fields in a buffer.  -*- 
lexical-binding: t; -*-
 ;;
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/filters.el b/lisp/cedet/srecode/filters.el
index 5c11f8c31b1..1bb81b4a951 100644
--- a/lisp/cedet/srecode/filters.el
+++ b/lisp/cedet/srecode/filters.el
@@ -1,6 +1,6 @@
 ;;; srecode/filters.el --- Filters for use in template variables.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/find.el b/lisp/cedet/srecode/find.el
index c13342e88f7..cfd64edfc98 100644
--- a/lisp/cedet/srecode/find.el
+++ b/lisp/cedet/srecode/find.el
@@ -1,6 +1,6 @@
 ;;;; srecode/find.el --- Tools for finding templates in the database.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/getset.el b/lisp/cedet/srecode/getset.el
index 4623d2cdefc..9ef85cbf5aa 100644
--- a/lisp/cedet/srecode/getset.el
+++ b/lisp/cedet/srecode/getset.el
@@ -1,6 +1,6 @@
 ;;; srecode/getset.el --- Package for inserting new get/set methods.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/insert.el b/lisp/cedet/srecode/insert.el
index f8cfe2a733e..04f5ef55e05 100644
--- a/lisp/cedet/srecode/insert.el
+++ b/lisp/cedet/srecode/insert.el
@@ -1,6 +1,6 @@
 ;;; srecode/insert.el --- Insert srecode templates to an output stream  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/java.el b/lisp/cedet/srecode/java.el
index 52a00203209..8d43111dd4d 100644
--- a/lisp/cedet/srecode/java.el
+++ b/lisp/cedet/srecode/java.el
@@ -1,6 +1,6 @@
 ;;; srecode/java.el --- Srecode Java support  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/map.el b/lisp/cedet/srecode/map.el
index 32de2588275..125459d6eeb 100644
--- a/lisp/cedet/srecode/map.el
+++ b/lisp/cedet/srecode/map.el
@@ -1,6 +1,6 @@
 ;;; srecode/map.el --- Manage a template file map  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/mode.el b/lisp/cedet/srecode/mode.el
index e8c7762c721..d45f9a4bcd6 100644
--- a/lisp/cedet/srecode/mode.el
+++ b/lisp/cedet/srecode/mode.el
@@ -1,6 +1,6 @@
 ;;; srecode/mode.el --- Minor mode for managing and using SRecode templates  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/semantic.el b/lisp/cedet/srecode/semantic.el
index c5ceb89d2dc..68fedf6fc2c 100644
--- a/lisp/cedet/srecode/semantic.el
+++ b/lisp/cedet/srecode/semantic.el
@@ -1,6 +1,6 @@
 ;;; srecode/semantic.el --- Semantic specific extensions to SRecode  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/srt-mode.el b/lisp/cedet/srecode/srt-mode.el
index cc0983f9f9d..6bd416c5690 100644
--- a/lisp/cedet/srecode/srt-mode.el
+++ b/lisp/cedet/srecode/srt-mode.el
@@ -1,6 +1,6 @@
 ;;; srecode/srt-mode.el --- Major mode for writing screcode macros  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/cedet/srecode/srt.el b/lisp/cedet/srecode/srt.el
index 4b3b5eaeb77..bd2f62f8fd6 100644
--- a/lisp/cedet/srecode/srt.el
+++ b/lisp/cedet/srecode/srt.el
@@ -1,6 +1,6 @@
 ;;; srecode/srt.el --- argument handlers for SRT files  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/table.el b/lisp/cedet/srecode/table.el
index f77898f9065..de151049f7f 100644
--- a/lisp/cedet/srecode/table.el
+++ b/lisp/cedet/srecode/table.el
@@ -1,6 +1,6 @@
 ;;; srecode/table.el --- Tables of Semantic Recoders  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/cedet/srecode/template.el b/lisp/cedet/srecode/template.el
index 7bd142e75dc..4048e13e602 100644
--- a/lisp/cedet/srecode/template.el
+++ b/lisp/cedet/srecode/template.el
@@ -1,6 +1,6 @@
 ;;; srecode/template.el --- SRecoder template language parser support.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/cedet/srecode/texi.el b/lisp/cedet/srecode/texi.el
index c297429e408..65af027fe19 100644
--- a/lisp/cedet/srecode/texi.el
+++ b/lisp/cedet/srecode/texi.el
@@ -1,6 +1,6 @@
 ;;; srecode/texi.el --- Srecode texinfo support.  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/char-fold.el b/lisp/char-fold.el
index 43e3cd45ecb..eff2f5558b3 100644
--- a/lisp/char-fold.el
+++ b/lisp/char-fold.el
@@ -1,6 +1,6 @@
 ;;; char-fold.el --- match unicode to similar ASCII -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: matching
diff --git a/lisp/chistory.el b/lisp/chistory.el
index 9dce60a19fe..e53499d9e05 100644
--- a/lisp/chistory.el
+++ b/lisp/chistory.el
@@ -1,6 +1,6 @@
 ;;; chistory.el --- list command history  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/cmuscheme.el b/lisp/cmuscheme.el
index 22a465f5b61..b3b8ae87ee3 100644
--- a/lisp/cmuscheme.el
+++ b/lisp/cmuscheme.el
@@ -1,6 +1,6 @@
 ;;; cmuscheme.el --- Scheme process in a buffer. Adapted from tea.el  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1988-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1988-2023 Free Software Foundation, Inc.
 
 ;; Author: Olin Shivers <olin.shivers@cs.cmu.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/color.el b/lisp/color.el
index 410659869ae..f68cf5e6b17 100644
--- a/lisp/color.el
+++ b/lisp/color.el
@@ -1,6 +1,6 @@
 ;;; color.el --- Color manipulation library -*- lexical-binding:t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Authors: Julien Danjou <julien@danjou.info>
 ;;          Drew Adams <drew.adams@oracle.com>
diff --git a/lisp/comint.el b/lisp/comint.el
index 7ba423e65de..c5589324a14 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -1,6 +1,6 @@
 ;;; comint.el --- general command interpreter in a window stuff -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1988, 1990, 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1990, 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: Olin Shivers <shivers@cs.cmu.edu>
 ;;     Simon Marshall <simon@gnu.org>
@@ -606,12 +606,10 @@ via PTYs.")
 
 (defvar-keymap comint-repeat-map
   :doc "Keymap to repeat comint key sequences.  Used in `repeat-mode'."
+  :repeat t
   "C-n" #'comint-next-prompt
   "C-p" #'comint-previous-prompt)
 
-(put #'comint-next-prompt 'repeat-map 'comint-repeat-map)
-(put #'comint-previous-prompt 'repeat-map 'comint-repeat-map)
-
 ;; Fixme: Is this still relevant?
 (defvar comint-ptyp t
   "Non-nil if communications via pty; false if by pipe.  Buffer local.
diff --git a/lisp/completion.el b/lisp/completion.el
index 2e486b6a50d..f119fc6028b 100644
--- a/lisp/completion.el
+++ b/lisp/completion.el
@@ -1,6 +1,6 @@
 ;;; completion.el --- dynamic word-completion code  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1990-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: abbrev convenience
diff --git a/lisp/composite.el b/lisp/composite.el
index 6fcf637584e..fb8b76114f4 100644
--- a/lisp/composite.el
+++ b/lisp/composite.el
@@ -1,6 +1,6 @@
 ;;; composite.el --- support character composition  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
 ;;   2008, 2009, 2010, 2011
diff --git a/lisp/cus-dep.el b/lisp/cus-dep.el
index 3f18202affe..00f497d4e90 100644
--- a/lisp/cus-dep.el
+++ b/lisp/cus-dep.el
@@ -1,6 +1,6 @@
 ;;; cus-dep.el --- find customization dependencies  -*- lexical-binding: t; -*-
 ;;
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: internal
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index 65eb066a554..dbef5f47cd6 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -1,6 +1,6 @@
 ;;; cus-edit.el --- tools for customizing Emacs and Lisp packages -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/cus-face.el b/lisp/cus-face.el
index 73a33f064c8..ec89b4f7ff6 100644
--- a/lisp/cus-face.el
+++ b/lisp/cus-face.el
@@ -1,6 +1,6 @@
 ;;; cus-face.el --- customization support for faces  -*- lexical-binding: t; 
-*-
 ;;
-;; Copyright (C) 1996-1997, 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 1999-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, faces
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index d7fb56c9854..054683d7cf6 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -1,6 +1,6 @@
 ;;; cus-start.el --- define customization properties of builtins  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1997, 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: internal
diff --git a/lisp/cus-theme.el b/lisp/cus-theme.el
index 69ed2087a78..dea5dbe9410 100644
--- a/lisp/cus-theme.el
+++ b/lisp/cus-theme.el
@@ -1,6 +1,6 @@
 ;;; cus-theme.el --- custom theme creation user interface  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/custom.el b/lisp/custom.el
index 0d3e2e5d0c2..0522bdd447b 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -1,6 +1,6 @@
 ;;; custom.el --- tools for declaring and initializing options  -*- 
lexical-binding: t -*-
 ;;
-;; Copyright (C) 1996-1997, 1999, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1996-1997, 1999, 2001-2023 Free Software Foundation,
 ;; Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
diff --git a/lisp/dabbrev.el b/lisp/dabbrev.el
index e909da3c207..a4b4d07b688 100644
--- a/lisp/dabbrev.el
+++ b/lisp/dabbrev.el
@@ -1,6 +1,6 @@
 ;;; dabbrev.el --- dynamic abbreviation package  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1992, 1994, 1996-1997, 2000-2022 Free
+;; Copyright (C) 1985-1986, 1992, 1994, 1996-1997, 2000-2023 Free
 ;; Software Foundation, Inc.
 
 ;; Author: Don Morrison
diff --git a/lisp/delim-col.el b/lisp/delim-col.el
index e1e166cc480..1bbcaf736f1 100644
--- a/lisp/delim-col.el
+++ b/lisp/delim-col.el
@@ -1,6 +1,6 @@
 ;;; delim-col.el --- prettify all columns in a region or rectangle  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Old-Version: 2.1
diff --git a/lisp/delsel.el b/lisp/delsel.el
index 5310328e5fd..48656bc8ba3 100644
--- a/lisp/delsel.el
+++ b/lisp/delsel.el
@@ -1,6 +1,6 @@
 ;;; delsel.el --- delete selection if you insert  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1992, 1997-1998, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1992, 1997-1998, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Matthieu Devin <devin@lucid.com>
diff --git a/lisp/descr-text.el b/lisp/descr-text.el
index f105f292448..4834c2eb7ba 100644
--- a/lisp/descr-text.el
+++ b/lisp/descr-text.el
@@ -1,6 +1,6 @@
 ;;; descr-text.el --- describe text mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1994-1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <boris@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/desktop.el b/lisp/desktop.el
index ef73bc596df..6aacb85c12c 100644
--- a/lisp/desktop.el
+++ b/lisp/desktop.el
@@ -1,6 +1,6 @@
 ;;; desktop.el --- save partial status of Emacs when killed -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1993-1995, 1997, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1993-1995, 1997, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Morten Welinder <terra@diku.dk>
@@ -828,7 +828,7 @@ is nil, ask the user where to save the desktop."
   ;; If we own it, we don't anymore.
   (when (eq (emacs-pid) (desktop-owner))
     ;; Allow exiting Emacs even if we can't delete the desktop file.
-    (ignore-error 'file-error
+    (ignore-error file-error
       (desktop-release-lock))))
 
 ;; ----------------------------------------------------------------------------
diff --git a/lisp/dframe.el b/lisp/dframe.el
index 9580a3187fd..995bb0a25d1 100644
--- a/lisp/dframe.el
+++ b/lisp/dframe.el
@@ -1,6 +1,6 @@
 ;;; dframe.el --- dedicate frame support modes  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: file, tags, tools
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index 7499e590a0c..c390017e190 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -1,6 +1,6 @@
 ;;; dired-aux.el --- less commonly used parts of dired -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>.
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index cf1ef37694f..560eefae024 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -1,6 +1,6 @@
 ;;; dired-x.el --- extra Dired functionality  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1993-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2023 Free Software Foundation, Inc.
 
 ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
 ;;     Lawrence R. Dodd <dodd@roebling.poly.edu>
diff --git a/lisp/dired.el b/lisp/dired.el
index 81e62f88cf1..42d15f27a54 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -1,6 +1,6 @@
 ;;; dired.el --- directory-browsing commands -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1992-1997, 2000-2022 Free Software
+;; Copyright (C) 1985-1986, 1992-1997, 2000-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
@@ -4882,9 +4882,9 @@ Interactively with prefix argument, read FILE-NAME."
 
 (defvar-keymap dired-jump-map
   :doc "Keymap to repeat `dired-jump'.  Used in `repeat-mode'."
+  :repeat t
   "j"   #'dired-jump
   "C-j" #'dired-jump)
-(put 'dired-jump 'repeat-map 'dired-jump-map)
 
 
 ;;; Miscellaneous commands
diff --git a/lisp/dirtrack.el b/lisp/dirtrack.el
index 4f092f95e06..b171caa1333 100644
--- a/lisp/dirtrack.el
+++ b/lisp/dirtrack.el
@@ -1,6 +1,6 @@
 ;;; dirtrack.el --- Directory Tracking by watching the prompt  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Peter Breton <pbreton@cs.umb.edu>
 ;; Created: Sun Nov 17 1996
diff --git a/lisp/disp-table.el b/lisp/disp-table.el
index f0ee3d1d780..e8eef0010ec 100644
--- a/lisp/disp-table.el
+++ b/lisp/disp-table.el
@@ -1,6 +1,6 @@
 ;;; disp-table.el --- functions for dealing with char tables  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1987, 1994-1995, 1999, 2001-2022 Free Software
+;; Copyright (C) 1987, 1994-1995, 1999, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Erik Naggum <erik@naggum.no>
diff --git a/lisp/display-fill-column-indicator.el 
b/lisp/display-fill-column-indicator.el
index a13f6b547fb..7ad09de0765 100644
--- a/lisp/display-fill-column-indicator.el
+++ b/lisp/display-fill-column-indicator.el
@@ -1,6 +1,6 @@
 ;;; display-fill-column-indicator.el --- interface for 
display-fill-column-indicator -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: convenience
diff --git a/lisp/display-line-numbers.el b/lisp/display-line-numbers.el
index 897a88398fd..37cf7ade46e 100644
--- a/lisp/display-line-numbers.el
+++ b/lisp/display-line-numbers.el
@@ -1,6 +1,6 @@
 ;;; display-line-numbers.el --- interface for display-line-numbers -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: convenience
diff --git a/lisp/dnd.el b/lisp/dnd.el
index 7708695346f..3abb108a4a7 100644
--- a/lisp/dnd.el
+++ b/lisp/dnd.el
@@ -1,6 +1,6 @@
 ;;; dnd.el --- drag and drop support  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Jan Djärv <jan.h.d@swipnet.se>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/doc-view.el b/lisp/doc-view.el
index b1ea90c212b..7c272f52fb3 100644
--- a/lisp/doc-view.el
+++ b/lisp/doc-view.el
@@ -1,6 +1,6 @@
 ;;; doc-view.el --- Document viewer for Emacs -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Tassilo Horn <tsdh@gnu.org>
 ;; Keywords: files, pdf, ps, dvi, djvu, epub, cbz, fb2, xps, openxps
diff --git a/lisp/dom.el b/lisp/dom.el
index 01bdef3a07a..3066673954a 100644
--- a/lisp/dom.el
+++ b/lisp/dom.el
@@ -1,6 +1,6 @@
 ;;; dom.el --- XML/HTML (etc.) DOM manipulation and searching functions -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: xml, html
diff --git a/lisp/dos-fns.el b/lisp/dos-fns.el
index edbe9e494f1..42ba646a4fb 100644
--- a/lisp/dos-fns.el
+++ b/lisp/dos-fns.el
@@ -1,6 +1,6 @@
 ;;; dos-fns.el --- MS-Dos specific functions  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1991, 1993, 1995-1996, 2001-2022 Free Software
+;; Copyright (C) 1991, 1993, 1995-1996, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/dos-vars.el b/lisp/dos-vars.el
index 87a758f4080..f2493ac573f 100644
--- a/lisp/dos-vars.el
+++ b/lisp/dos-vars.el
@@ -1,6 +1,6 @@
 ;;; dos-vars.el --- MS-Dos specific user options  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
diff --git a/lisp/dos-w32.el b/lisp/dos-w32.el
index 8bfbf4ffdeb..1db5419fc40 100644
--- a/lisp/dos-w32.el
+++ b/lisp/dos-w32.el
@@ -1,6 +1,6 @@
 ;;; dos-w32.el --- Functions shared among MS-DOS and W32 (NT/95) platforms  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: Geoff Voelker <voelker@cs.washington.edu>
 ;; Keywords: internal
diff --git a/lisp/double.el b/lisp/double.el
index d990fa8d906..197bfd4df6f 100644
--- a/lisp/double.el
+++ b/lisp/double.el
@@ -1,6 +1,6 @@
 ;;; double.el --- support for keyboard remapping with double clicking  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1994, 1997-1998, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1994, 1997-1998, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
diff --git a/lisp/dynamic-setting.el b/lisp/dynamic-setting.el
index ee6d1ceb358..9ce09657345 100644
--- a/lisp/dynamic-setting.el
+++ b/lisp/dynamic-setting.el
@@ -1,6 +1,6 @@
 ;;; dynamic-setting.el --- Support dynamic changes  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Jan Djärv <jan.h.d@swipnet.se>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/ebuff-menu.el b/lisp/ebuff-menu.el
index 809a31d4573..3038886034c 100644
--- a/lisp/ebuff-menu.el
+++ b/lisp/ebuff-menu.el
@@ -1,6 +1,6 @@
 ;;; ebuff-menu.el --- electric-buffer-list mode  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1994, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1994, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Richard Mlynarik <mly@ai.mit.edu>
diff --git a/lisp/echistory.el b/lisp/echistory.el
index 809010d0167..31af6eb6039 100644
--- a/lisp/echistory.el
+++ b/lisp/echistory.el
@@ -1,6 +1,6 @@
 ;;; echistory.el --- Electric Command History Mode  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/ecomplete.el b/lisp/ecomplete.el
index b532ef95e7f..c48c3c0650f 100644
--- a/lisp/ecomplete.el
+++ b/lisp/ecomplete.el
@@ -1,6 +1,6 @@
 ;;; ecomplete.el --- electric completion of addresses and the like  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: mail
diff --git a/lisp/edmacro.el b/lisp/edmacro.el
index 26a5d2347f0..c0723dc8dfe 100644
--- a/lisp/edmacro.el
+++ b/lisp/edmacro.el
@@ -1,6 +1,6 @@
 ;;; edmacro.el --- keyboard macro editor  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 ;; Keywords: abbrev
diff --git a/lisp/ehelp.el b/lisp/ehelp.el
index 0c2f02639fc..c0885340975 100644
--- a/lisp/ehelp.el
+++ b/lisp/ehelp.el
@@ -1,6 +1,6 @@
 ;;; ehelp.el --- bindings for electric-help mode -*- lexical-binding: t -*-
 
-;; Copyright (C) 1986, 1995, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 1995, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Richard Mlynarik
 ;; (according to ack.texi and authors.el)
diff --git a/lisp/elec-pair.el b/lisp/elec-pair.el
index e4d64615055..b894965eae4 100644
--- a/lisp/elec-pair.el
+++ b/lisp/elec-pair.el
@@ -1,6 +1,6 @@
 ;;; elec-pair.el --- Automatic parenthesis pairing  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: João Távora <joaotavora@gmail.com>
 
diff --git a/lisp/electric.el b/lisp/electric.el
index bd7ea527ba9..bac3f5a2b3c 100644
--- a/lisp/electric.el
+++ b/lisp/electric.el
@@ -1,6 +1,6 @@
 ;;; electric.el --- window maker and Command loop for `electric' modes  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1985-1986, 1995, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1995, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: K. Shane Hartman
diff --git a/lisp/elide-head.el b/lisp/elide-head.el
index 75a3612df91..f74c85fdfee 100644
--- a/lisp/elide-head.el
+++ b/lisp/elide-head.el
@@ -1,6 +1,6 @@
 ;;; elide-head.el --- hide headers in files  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: outlines tools
@@ -50,24 +50,41 @@
   :group 'tools)
 
 (defcustom elide-head-headers-to-hide
-  `(;; GNU GPL
-    ("is free software[:;] you can redistribute it" .
-     ,(rx (or (seq "If not, see " (? "<")
-                   "http" (? "s") "://www.gnu.org/licenses"
-                   (? "/") (? ">") (? " "))
-              (seq "Boston, MA " (? " ")
-                   "0211" (or "1-1307" "0-1301")
-                   (or "  " ", ") "USA")
-              "675 Mass Ave, Cambridge, MA 02139, USA")
-          (? ".")))
-    ;; FreeBSD license / Modified BSD license (3-clause)
-    (,(rx (or "The Regents of the University of California.  All rights 
reserved."
-              "Redistribution and use in source and binary"))
-     . "POSSIBILITY OF SUCH DAMAGE\\.")
-    ;; X11 and Expat
-    ("Permission is hereby granted, free of charge" .
-     ,(rx (or "authorization from the X Consortium."           ; X11
-              "THE USE OR OTHER DEALINGS IN THE SOFTWARE.")))) ; Expat
+  (rx-let ((delim
+            ;; A line break could be in a non-standard place, and the
+            ;; license could be in a comment.
+            (or
+             ;; Either just some spaces:
+             (+ " ")
+             ;; Or a newline and some comment starter:
+             (: (* (in " \t"))
+                "\n"
+                (* (in " \t"))
+                (* (or (syntax comment-start) (in ";#*-")))
+                (* (in " \t"))))))
+    `(;; GNU GPL
+      ("is free software[:;] you can redistribute it" .
+       ,(rx (or (seq "If not, see " (? "<")
+                     "http" (? "s") "://www.gnu.org/licenses"
+                     (? "/") (? ">") (? " "))
+                (seq "Boston," delim "MA" delim
+                     (or "02111-1307" "02110-1301" "02111-1301")
+                     (? ",") delim
+                     "USA")
+                "675 Mass Ave, Cambridge, MA 02139, USA")
+            (? ".")))
+      ;; FreeBSD license / Modified BSD license (3-clause)
+      (,(rx (or "The Regents of the University of California.  All rights 
reserved."
+                "Redistribution and use in source and binary"))
+       . "POSSIBILITY OF SUCH DAMAGE\\.")
+      ;; X11 and Expat
+      ("Permission is hereby granted, free of charge" .
+       ,(rx (or "authorization from the X Consortium."          ; X11
+                "THE USE OR OTHER DEALINGS IN THE SOFTWARE."))) ; Expat
+      ;; Apache
+      ("Licensed under the Apache License, Version 2.0" .
+       "limitations under the License.")
+      ))
   "Alist of regexps defining start and end of text to elide.
 
 The cars of elements of the list are searched for in order.  Text is
@@ -78,7 +95,7 @@ cdr.
 This affects `elide-head-mode'."
   :type '(alist :key-type  (regexp :tag "Start regexp")
                 :value-type (regexp :tag "End regexp"))
-  :version "29.1")
+  :version "30.1")
 
 (defvar-local elide-head-overlay nil)
 
@@ -147,10 +164,11 @@ mode hooks."
 (defun elide-head (&optional arg)
   "Hide header material in buffer according to `elide-head-headers-to-hide'.
 
-The header is made invisible with an overlay.  With a prefix arg, show
-an elided material again.
+The header is made invisible with an overlay.  With a prefix
+argument ARG, show an elided material again.
 
-This is suitable as an entry on `find-file-hook' or appropriate mode hooks."
+This is suitable as an entry on `find-file-hook' or appropriate
+mode hooks."
   (declare (obsolete elide-head-mode "29.1"))
   (interactive "P")
   (if arg
diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el
index d383650f4e5..080a6d84498 100644
--- a/lisp/emacs-lisp/advice.el
+++ b/lisp/emacs-lisp/advice.el
@@ -1,6 +1,6 @@
 ;;; advice.el --- An overloading mechanism for Emacs Lisp functions  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1993-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2023 Free Software Foundation, Inc.
 
 ;; Author: Hans Chalupsky <hans@cs.buffalo.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/avl-tree.el b/lisp/emacs-lisp/avl-tree.el
index 8886d84b2d8..b42017d28fb 100644
--- a/lisp/emacs-lisp/avl-tree.el
+++ b/lisp/emacs-lisp/avl-tree.el
@@ -1,6 +1,6 @@
 ;;; avl-tree.el --- balanced binary trees, AVL-trees  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1995, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Per Cederqvist <ceder@lysator.liu.se>
 ;;         Inge Wallin <inge@lysator.liu.se>
diff --git a/lisp/emacs-lisp/backquote.el b/lisp/emacs-lisp/backquote.el
index 3aef4a28bb8..84527234207 100644
--- a/lisp/emacs-lisp/backquote.el
+++ b/lisp/emacs-lisp/backquote.el
@@ -1,6 +1,6 @@
 ;;; backquote.el --- implement the ` Lisp construct  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1990, 1992, 1994, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1990, 1992, 1994, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Rick Sladkey <jrs@world.std.com>
diff --git a/lisp/emacs-lisp/backtrace.el b/lisp/emacs-lisp/backtrace.el
index d461698c88e..53e17693933 100644
--- a/lisp/emacs-lisp/backtrace.el
+++ b/lisp/emacs-lisp/backtrace.el
@@ -1,6 +1,6 @@
 ;;; backtrace.el --- generic major mode for Elisp backtraces -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Gemini Lasswell
 ;; Keywords: lisp, tools, maint
diff --git a/lisp/emacs-lisp/benchmark.el b/lisp/emacs-lisp/benchmark.el
index 4bf61abe54c..dc7889c40a0 100644
--- a/lisp/emacs-lisp/benchmark.el
+++ b/lisp/emacs-lisp/benchmark.el
@@ -1,6 +1,6 @@
 ;;; benchmark.el --- support for benchmarking code  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: lisp, extensions
diff --git a/lisp/emacs-lisp/bindat.el b/lisp/emacs-lisp/bindat.el
index 82d3c5309f8..6f2af7f975b 100644
--- a/lisp/emacs-lisp/bindat.el
+++ b/lisp/emacs-lisp/bindat.el
@@ -1,6 +1,6 @@
 ;;; bindat.el --- binary data structure packing and unpacking.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <storm@cua.dk>
 ;; Assignment name: struct.el
diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index 898dfffef63..d7a0d851e01 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -1,6 +1,6 @@
 ;;; byte-opt.el --- the optimization passes of the emacs-lisp byte compiler 
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1991, 1994, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 1994, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski <jwz@lucid.com>
 ;;     Hallvard Furuseth <hbf@ulrik.uio.no>
@@ -410,7 +410,10 @@ for speeding up processing.")
 
       (`(condition-case ,var ,exp . ,clauses)
        `(,fn ,var          ;Not evaluated.
-            ,(byte-optimize-form exp for-effect)
+             ,(byte-optimize-form exp
+                                  (if (assq :success clauses)
+                                      (null var)
+                                    for-effect))
           ,@(mapcar (lambda (clause)
                       (let ((byte-optimize--lexvars
                              (and lexical-binding
diff --git a/lisp/emacs-lisp/byte-run.el b/lisp/emacs-lisp/byte-run.el
index b5e887db836..9345665eea8 100644
--- a/lisp/emacs-lisp/byte-run.el
+++ b/lisp/emacs-lisp/byte-run.el
@@ -1,6 +1,6 @@
 ;;; byte-run.el --- byte-compiler support for inlining  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1992, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski <jwz@lucid.com>
 ;;     Hallvard Furuseth <hbf@ulrik.uio.no>
@@ -262,7 +262,8 @@ This is used by `declare'.")
              (interactive-form nil)
              (warnings nil)
              (warn #'(lambda (msg form)
-                       (push (macroexp-warn-and-return msg nil nil t form)
+                       (push (macroexp-warn-and-return
+                              (format-message msg) nil nil t form)
                              warnings))))
         (while
             (and body
@@ -649,12 +650,11 @@ in `byte-compile-warning-types'; see the variable
 `byte-compile-warnings' for a fuller explanation of the warning
 types.  The types that can be suppressed with this macro are
 `free-vars', `callargs', `redefine', `obsolete',
-`interactive-only', `lexical', `mapcar', `constants' and
-`suspicious'.
+`interactive-only', `lexical', `mapcar', `constants',
+`suspicious' and `empty-body'.
 
 For the `mapcar' case, only the `mapcar' function can be used in
-the symbol list.  For `suspicious', only `set-buffer', `lsh' and `eq'
-can be used."
+the symbol list."
   ;; Note: during compilation, this definition is overridden by the one in
   ;; byte-compile-initial-macro-environment.
   (declare (debug (sexp body)) (indent 1))
@@ -680,11 +680,11 @@ Otherwise, return nil.  For internal use only."
   ;; This is called from lread.c and therefore needs to be preloaded.
   (if lread--unescaped-character-literals
       (let ((sorted (sort lread--unescaped-character-literals #'<)))
-        (format-message "unescaped character literals %s detected, %s 
expected!"
-                        (mapconcat (lambda (char) (format "`?%c'" char))
-                                   sorted ", ")
-                        (mapconcat (lambda (char) (format "`?\\%c'" char))
-                                   sorted ", ")))))
+        (format "unescaped character literals %s detected, %s expected!"
+                (mapconcat (lambda (char) (format-message "`?%c'" char))
+                           sorted ", ")
+                (mapconcat (lambda (char) (format-message "`?\\%c'" char))
+                           sorted ", ")))))
 
 (defun byte-compile-info (string &optional message type)
   "Format STRING in a way that looks pleasing in the compilation output.
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 7571b4d409a..23d02ba92cf 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -1,6 +1,6 @@
 ;;; bytecomp.el --- compilation of Lisp code into byte code -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985-1987, 1992, 1994, 1998, 2000-2022 Free Software
+;; Copyright (C) 1985-1987, 1992, 1994, 1998, 2000-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Jamie Zawinski <jwz@lucid.com>
@@ -295,7 +295,8 @@ The information is logged to `byte-compile-log-buffer'."
   '(redefine callargs free-vars unresolved
              obsolete noruntime interactive-only
              make-local mapcar constants suspicious lexical lexical-dynamic
-             docstrings docstrings-non-ascii-quotes not-unused)
+             docstrings docstrings-non-ascii-quotes not-unused
+             empty-body)
   "The list of warning types used when `byte-compile-warnings' is t.")
 (defcustom byte-compile-warnings t
   "List of warnings that the byte-compiler should issue (t for almost all).
@@ -326,6 +327,7 @@ Elements of the list may be:
   docstrings-non-ascii-quotes docstrings that have non-ASCII quotes.
                               This depends on the `docstrings' warning type.
   suspicious  constructs that usually don't do what the coder wanted.
+  empty-body  body argument to a special form or macro is empty.
 
 If the list begins with `not', then the remaining elements specify warnings to
 suppress.  For example, (not mapcar) will suppress warnings about mapcar.
@@ -541,15 +543,19 @@ Return the compile-time value of FORM."
              ;; Later `internal--with-suppressed-warnings' binds it again, this
              ;; time in order to affect warnings emitted during the
              ;; compilation itself.
-             (let ((byte-compile--suppressed-warnings
-                    (append warnings byte-compile--suppressed-warnings)))
-               ;; This function doesn't exist, but is just a placeholder
-               ;; symbol to hook up with the
-               ;; `byte-hunk-handler'/`byte-defop-compiler-1' machinery.
-               `(internal--with-suppressed-warnings
-                 ',warnings
-                 ,(macroexpand-all `(progn ,@body)
-                                   macroexpand-all-environment))))))
+             (if body
+                 (let ((byte-compile--suppressed-warnings
+                        (append warnings byte-compile--suppressed-warnings)))
+                   ;; This function doesn't exist, but is just a placeholder
+                   ;; symbol to hook up with the
+                   ;; `byte-hunk-handler'/`byte-defop-compiler-1' machinery.
+                   `(internal--with-suppressed-warnings
+                     ',warnings
+                     ,(macroexpand-all `(progn ,@body)
+                                       macroexpand-all-environment)))
+               (macroexp-warn-and-return
+                (format-message "`with-suppressed-warnings' with empty body")
+                nil '(empty-body with-suppressed-warnings) t warnings)))))
   "The default macro-environment passed to macroexpand by the compiler.
 Placing a macro here will cause a macro to have different semantics when
 expanded by the compiler as when expanded by the interpreter.")
@@ -3439,7 +3445,7 @@ lambda-expression."
                                     (t "."))))
         (if (eq (car-safe (symbol-function (car form))) 'macro)
             (byte-compile-report-error
-             (format "`%s' defined after use in %S (missing `require' of a 
library file?)"
+             (format-message "`%s' defined after use in %S (missing `require' 
of a library file?)"
                      (car form) form)))
         (if (and handler
                  ;; Make sure that function exists.
@@ -4835,6 +4841,11 @@ binding slots have been popped."
 
     (dolist (clause (reverse clauses))
       (let ((condition (nth 1 clause)))
+        (when (and (eq (car-safe condition) 'quote)
+                   (cdr condition) (null (cddr condition)))
+          (byte-compile-warn-x
+           condition "`condition-case' condition should not be quoted: %S"
+           condition))
         (unless (consp condition) (setq condition (list condition)))
         (dolist (c condition)
           (unless (and c (symbolp c))
@@ -5513,9 +5524,9 @@ and corresponding effects."
 
 (defun bytecomp--warn-dodgy-eq-arg (form type parenthesis)
   (macroexp-warn-and-return
-   (format "`%s' called with literal %s that may never match (%s)"
-           (car form) type parenthesis)
-   form '(suspicious eq) t))
+   (format-message "`%s' called with literal %s that may never match (%s)"
+                   (car form) type parenthesis)
+   form (list 'suspicious (car form)) t))
 
 (defun bytecomp--check-eq-args (form &optional a b &rest _ignore)
   (let* ((number-ok (eq (car form) 'eql))
diff --git a/lisp/emacs-lisp/cconv.el b/lisp/emacs-lisp/cconv.el
index f3431db4156..e715bd90a00 100644
--- a/lisp/emacs-lisp/cconv.el
+++ b/lisp/emacs-lisp/cconv.el
@@ -1,6 +1,6 @@
 ;;; cconv.el --- Closure conversion for statically scoped Emacs Lisp. -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Igor Kuzmin <kzuminig@iro.umontreal.ca>
 ;; Maintainer: emacs-devel@gnu.org
@@ -236,9 +236,9 @@ Returns a form where all lambdas don't have any free 
variables."
               (not (intern-soft var))
               (eq ?_ (aref (symbol-name var) 0)))
        (let ((suggestions (help-uni-confusable-suggestions (symbol-name var))))
-         (format "Unused lexical %s `%S'%s"
-                 varkind (bare-symbol var)
-                 (if suggestions (concat "\n  " suggestions) "")))))
+         (format-message "Unused lexical %s `%S'%s"
+                         varkind (bare-symbol var)
+                         (if suggestions (concat "\n  " suggestions) "")))))
 
 (define-inline cconv--var-classification (binder form)
   (inline-quote
diff --git a/lisp/emacs-lisp/chart.el b/lisp/emacs-lisp/chart.el
index 16c2c347409..2d4f10123d1 100644
--- a/lisp/emacs-lisp/chart.el
+++ b/lisp/emacs-lisp/chart.el
@@ -1,6 +1,6 @@
 ;;; chart.el --- Draw charts (bar charts, etc)  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Old-Version: 0.2
@@ -517,7 +517,7 @@ cons cells of the form (NAME . NUM).  See `sort' for more 
details."
     (if (eobp) (newline num))
     (if (< x 0) (setq x 0))
     (if (< y 0) (setq y 0))
-    ;; Now, a quicky column moveto/forceto method.
+    ;; Now, a quickie column moveto/forceto method.
     (or (= (move-to-column x) x)
        (let ((p (point)))
          (indent-to x)
diff --git a/lisp/emacs-lisp/check-declare.el b/lisp/emacs-lisp/check-declare.el
index 83187acf71e..c887d95210c 100644
--- a/lisp/emacs-lisp/check-declare.el
+++ b/lisp/emacs-lisp/check-declare.el
@@ -1,6 +1,6 @@
 ;;; check-declare.el --- Check declare-function statements  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Glenn Morris <rgm@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el
index 26d87a3622d..c5e69d5ef56 100644
--- a/lisp/emacs-lisp/checkdoc.el
+++ b/lisp/emacs-lisp/checkdoc.el
@@ -1,6 +1,6 @@
 ;;; checkdoc.el --- check documentation strings for style requirements  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Old-Version: 0.6.2
diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index 60b01051a33..de5eb9c2d92 100644
--- a/lisp/emacs-lisp/cl-extra.el
+++ b/lisp/emacs-lisp/cl-extra.el
@@ -1,6 +1,6 @@
 ;;; cl-extra.el --- Common Lisp features, part 2  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1993, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 ;; Keywords: extensions
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index 7b6d43e572b..b062c280a41 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -1,6 +1,6 @@
 ;;; cl-generic.el --- CLOS-style generic functions for Elisp  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Version: 1.0
diff --git a/lisp/emacs-lisp/cl-indent.el b/lisp/emacs-lisp/cl-indent.el
index fe7e4506d7c..8920579755e 100644
--- a/lisp/emacs-lisp/cl-indent.el
+++ b/lisp/emacs-lisp/cl-indent.el
@@ -1,6 +1,6 @@
 ;;; cl-indent.el --- Enhanced lisp-indent mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1987, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Richard Mlynarik <mly@eddie.mit.edu>
 ;; Created: July 1987
diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el
index b83b44974d3..95a51a4bdde 100644
--- a/lisp/emacs-lisp/cl-lib.el
+++ b/lisp/emacs-lisp/cl-lib.el
@@ -1,6 +1,6 @@
 ;;; cl-lib.el --- Common Lisp extensions for Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 ;; Version: 1.0
@@ -201,7 +201,7 @@ should return.
 Note that Emacs Lisp doesn't really support multiple values, so
 all this function does is return LIST."
   (unless (listp list)
-    (signal 'wrong-type-argument list))
+    (signal 'wrong-type-argument (list list)))
   list)
 
 (defsubst cl-multiple-value-list (expression)
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 95e78ceab6a..36aab087d94 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -1,6 +1,6 @@
 ;;; cl-macs.el --- Common Lisp macros  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 ;; Old-Version: 2.02
@@ -3176,8 +3176,9 @@ To see the documentation for a defined struct type, use
               (when (cl-oddp (length desc))
                 (push
                  (macroexp-warn-and-return
-                  (format "Missing value for option `%S' of slot `%s' in 
struct %s!"
-                          (car (last desc)) slot name)
+                  (format-message
+                   "Missing value for option `%S' of slot `%s' in struct %s!"
+                   (car (last desc)) slot name)
                   nil nil nil (car (last desc)))
                  forms)
                 (when (and (keywordp (car defaults))
@@ -3185,8 +3186,9 @@ To see the documentation for a defined struct type, use
                   (let ((kw (car defaults)))
                     (push
                      (macroexp-warn-and-return
-                      (format "  I'll take `%s' to be an option rather than a 
default value."
-                              kw)
+                      (format-message
+                       "  I'll take `%s' to be an option rather than a default 
value."
+                       kw)
                       nil nil nil kw)
                      forms)
                     (push kw desc)
diff --git a/lisp/emacs-lisp/cl-preloaded.el b/lisp/emacs-lisp/cl-preloaded.el
index dbe20f92028..9445093f143 100644
--- a/lisp/emacs-lisp/cl-preloaded.el
+++ b/lisp/emacs-lisp/cl-preloaded.el
@@ -1,6 +1,6 @@
 ;;; cl-preloaded.el --- Preloaded part of the CL library  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2015-2022  Free Software Foundation, Inc
+;; Copyright (C) 2015-2023  Free Software Foundation, Inc
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Package: emacs
diff --git a/lisp/emacs-lisp/cl-print.el b/lisp/emacs-lisp/cl-print.el
index 30d7e6525a4..61586526ca1 100644
--- a/lisp/emacs-lisp/cl-print.el
+++ b/lisp/emacs-lisp/cl-print.el
@@ -1,6 +1,6 @@
 ;;; cl-print.el --- CL-style generic printing  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
diff --git a/lisp/emacs-lisp/cl-seq.el b/lisp/emacs-lisp/cl-seq.el
index 60e204eaf51..ec481121ae6 100644
--- a/lisp/emacs-lisp/cl-seq.el
+++ b/lisp/emacs-lisp/cl-seq.el
@@ -1,6 +1,6 @@
 ;;; cl-seq.el --- Common Lisp features, part 3  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 ;; Old-Version: 2.02
diff --git a/lisp/emacs-lisp/comp-cstr.el b/lisp/emacs-lisp/comp-cstr.el
index 1338ae6e139..98e50f53b5f 100644
--- a/lisp/emacs-lisp/comp-cstr.el
+++ b/lisp/emacs-lisp/comp-cstr.el
@@ -1,6 +1,6 @@
 ;;; comp-cstr.el --- native compiler constraint library -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Andrea Corallo <akrl@sdf.org>
 ;; Keywords: lisp
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 94cf61f7523..29c00fa2e11 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -1,6 +1,6 @@
 ;;; comp.el --- compilation of Lisp code into native code -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Andrea Corallo <akrl@sdf.org>
 ;; Keywords: lisp
@@ -1230,7 +1230,7 @@ clashes."
 (defun comp-decrypt-arg-list (x function-name)
   "Decrypt argument list X for FUNCTION-NAME."
   (unless (fixnump x)
-    (signal 'native-compiler-error-dyn-func function-name))
+    (signal 'native-compiler-error-dyn-func (list function-name)))
   (let ((rest (not (= (logand x 128) 0)))
         (mandatory (logand x 127))
         (nonrest (ash x -8)))
@@ -1274,7 +1274,7 @@ clashes."
                                                              'pure))))
       (when (byte-code-function-p f)
         (signal 'native-compiler-error
-                "can't native compile an already byte-compiled function"))
+                '("can't native compile an already byte-compiled function")))
       (setf (comp-func-byte-func func)
             (byte-compile (comp-func-name func)))
       (let ((lap (byte-to-native-lambda-lap
@@ -1299,7 +1299,7 @@ clashes."
   "Byte-compile FORM, spilling data from the byte compiler."
   (unless (eq (car-safe form) 'lambda)
     (signal 'native-compiler-error
-            "Cannot native-compile, form is not a lambda"))
+            '("Cannot native-compile, form is not a lambda")))
   (unless (comp-ctxt-output comp-ctxt)
     (setf (comp-ctxt-output comp-ctxt)
           (make-temp-file "comp-lambda-" nil ".eln")))
@@ -1380,7 +1380,7 @@ clashes."
             (alist-get 'no-native-compile byte-native-qualities))
     (throw 'no-native-compile nil))
   (unless byte-to-native-top-level-forms
-    (signal 'native-compiler-error-empty-byte filename))
+    (signal 'native-compiler-error-empty-byte (list filename)))
   (unless (comp-ctxt-output comp-ctxt)
     (setf (comp-ctxt-output comp-ctxt) (comp-el-to-eln-filename
                                         filename
@@ -1751,7 +1751,7 @@ Return value is the fall-through block name."
           do (puthash ff-bb-name ff-bb (comp-func-blocks comp-func))
              (setf (comp-limplify-curr-block comp-pass) ff-bb))))
     (_ (signal 'native-ice
-               "missing previous setimm while creating a switch"))))
+               '("missing previous setimm while creating a switch")))))
 
 (defun comp-emit-set-call-subr (subr-name sp-delta)
     "Emit a call for SUBR-NAME.
@@ -2842,7 +2842,7 @@ blocks."
             (first-processed (l)
               (if-let ((p (cl-find-if (lambda (p) (comp-block-idom p)) l)))
                   p
-                (signal 'native-ice "can't find first preprocessed"))))
+                (signal 'native-ice '("can't find first preprocessed")))))
 
     (when-let ((blocks (comp-func-blocks comp-func))
                (entry (gethash 'entry blocks))
@@ -3736,12 +3736,12 @@ Prepare every function for final compilation and drive 
the C back-end."
               (if (zerop
                    (call-process (expand-file-name invocation-name
                                                    invocation-directory)
-                                nil t t "-no-comp-spawn" "--batch" "-l"
+                                nil t t "-no-comp-spawn" "-Q" "--batch" "-l"
                                  temp-file))
                   (progn
                     (delete-file temp-file)
                     output)
-               (signal 'native-compiler-error (buffer-string)))
+               (signal 'native-compiler-error (list (buffer-string))))
             (comp-log-to-buffer (buffer-string))))))))
 
 
@@ -4029,7 +4029,7 @@ display a message."
                              :command (list
                                        (expand-file-name invocation-name
                                                          invocation-directory)
-                                       "-no-comp-spawn" "--batch"
+                                       "-no-comp-spawn" "-Q" "--batch"
                                        "--eval"
                                        ;; Suppress Abort dialogs on MS-Windows
                                        "(setq w32-disable-abort-dialog t)"
diff --git a/lisp/emacs-lisp/copyright.el b/lisp/emacs-lisp/copyright.el
index e5087672ae7..8295f86c078 100644
--- a/lisp/emacs-lisp/copyright.el
+++ b/lisp/emacs-lisp/copyright.el
@@ -1,6 +1,6 @@
 ;;; copyright.el --- update the copyright notice in current buffer  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1991-1995, 1998, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1991-1995, 1998, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Daniel Pfeiffer <occitan@esperanto.org>
diff --git a/lisp/emacs-lisp/crm.el b/lisp/emacs-lisp/crm.el
index 8e61797315f..920118bb093 100644
--- a/lisp/emacs-lisp/crm.el
+++ b/lisp/emacs-lisp/crm.el
@@ -1,6 +1,6 @@
 ;;; crm.el --- read multiple strings with completion  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1985-1986, 1993-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1993-2023 Free Software Foundation, Inc.
 
 ;; Author: Sen Nagata <sen@eccosys.com>
 ;; Keywords: completion, minibuffer, multiple elements
diff --git a/lisp/emacs-lisp/cursor-sensor.el b/lisp/emacs-lisp/cursor-sensor.el
index a3b40ef8b24..e20365e61e8 100644
--- a/lisp/emacs-lisp/cursor-sensor.el
+++ b/lisp/emacs-lisp/cursor-sensor.el
@@ -1,6 +1,6 @@
 ;;; cursor-sensor.el --- React to cursor movement  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
diff --git a/lisp/emacs-lisp/debug-early.el b/lisp/emacs-lisp/debug-early.el
index a301c73017e..395498f2206 100644
--- a/lisp/emacs-lisp/debug-early.el
+++ b/lisp/emacs-lisp/debug-early.el
@@ -1,6 +1,6 @@
 ;;; debug-early.el --- Dump a Lisp backtrace without frills  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Alan Mackenzie <acm@muc.de>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
index f78d44cf98e..dc23b071f0d 100644
--- a/lisp/emacs-lisp/debug.el
+++ b/lisp/emacs-lisp/debug.el
@@ -1,6 +1,6 @@
 ;;; debug.el --- debuggers and related commands for Emacs  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1994, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1994, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/derived.el b/lisp/emacs-lisp/derived.el
index 260fc3bf470..b35994364a7 100644
--- a/lisp/emacs-lisp/derived.el
+++ b/lisp/emacs-lisp/derived.el
@@ -1,7 +1,7 @@
 ;;; derived.el --- allow inheritance of major modes  -*- lexical-binding: t; 
-*-
 ;; (formerly mode-clone.el)
 
-;; Copyright (C) 1993-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2023 Free Software Foundation, Inc.
 
 ;; Author: David Megginson <dmeggins@aix1.uottawa.ca>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/disass.el b/lisp/emacs-lisp/disass.el
index d6a3636e607..9dd08d00920 100644
--- a/lisp/emacs-lisp/disass.el
+++ b/lisp/emacs-lisp/disass.el
@@ -1,6 +1,6 @@
 ;;; disass.el --- disassembler for compiled Emacs Lisp code  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1986, 1991, 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 1991, 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Doug Cutting <doug@csli.stanford.edu>
 ;;     Jamie Zawinski <jwz@lucid.com>
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index 7d54a84687b..77f4b26d9bb 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -1,6 +1,6 @@
 ;;; easy-mmode.el --- easy definition for major and minor modes  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Georges Brun-Cottan <Georges.Brun-Cottan@inria.fr>
 ;; Maintainer: Stefan Monnier <monnier@gnu.org>
@@ -250,7 +250,8 @@ INIT-VALUE LIGHTER KEYMAP.
          (warnwrap (if (or (null body) (keywordp (car body))) #'identity
                      (lambda (exp)
                        (macroexp-warn-and-return
-                        "Use keywords rather than deprecated positional 
arguments to `define-minor-mode'"
+                        (format-message
+                         "Use keywords rather than deprecated positional 
arguments to `define-minor-mode'")
                         exp))))
         keyw keymap-sym tmp)
 
diff --git a/lisp/emacs-lisp/easymenu.el b/lisp/emacs-lisp/easymenu.el
index 2a45c1ab1cc..21c70fa70e0 100644
--- a/lisp/emacs-lisp/easymenu.el
+++ b/lisp/emacs-lisp/easymenu.el
@@ -1,6 +1,6 @@
 ;;; easymenu.el --- support the easymenu interface for defining a menu  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1994, 1996, 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1996, 1998-2023 Free Software Foundation, Inc.
 
 ;; Keywords: emulations
 ;; Author: Richard Stallman <rms@gnu.org>
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index 67704bdb51c..2f7d03e9d79 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -1,6 +1,6 @@
 ;;; edebug.el --- a source-level debugger for Emacs Lisp  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 1988-1995, 1997, 1999-2022 Free Software Foundation,
+;; Copyright (C) 1988-1995, 1997, 1999-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Daniel LaLiberte <liberte@holonexus.org>
@@ -92,9 +92,9 @@ using, but only when you also use Edebug."
 ;;;###autoload
 (defcustom edebug-all-defs nil
   "If non-nil, evaluating defining forms instruments for Edebug.
-This applies to `eval-defun', `eval-region', `eval-buffer', and
-`eval-current-buffer'.  `eval-region' is also called by
-`eval-last-sexp', and `eval-print-last-sexp'.
+This applies to `eval-defun', `eval-region' and `eval-buffer'.
+`eval-region' is also called by `eval-last-sexp', and
+`eval-print-last-sexp'.
 
 You can use the command `edebug-all-defs' to toggle the value of this
 variable.  You may wish to make it local to each buffer with
diff --git a/lisp/emacs-lisp/eieio-base.el b/lisp/emacs-lisp/eieio-base.el
index ef02216411d..31ca91ad317 100644
--- a/lisp/emacs-lisp/eieio-base.el
+++ b/lisp/emacs-lisp/eieio-base.el
@@ -1,6 +1,6 @@
 ;;; eieio-base.el --- Base classes for EIEIO.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: OO, lisp
diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el
index 65aa6aa6df7..f5ff04ff372 100644
--- a/lisp/emacs-lisp/eieio-core.el
+++ b/lisp/emacs-lisp/eieio-core.el
@@ -1,6 +1,6 @@
 ;;; eieio-core.el --- Core implementation for eieio  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1995-1996, 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Version: 1.4
diff --git a/lisp/emacs-lisp/eieio-custom.el b/lisp/emacs-lisp/eieio-custom.el
index 0bec3bb0d59..1e1b9d721b0 100644
--- a/lisp/emacs-lisp/eieio-custom.el
+++ b/lisp/emacs-lisp/eieio-custom.el
@@ -1,6 +1,6 @@
 ;;; eieio-custom.el --- eieio object customization  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2001, 2005, 2007-2022 Free Software Foundation,
+;; Copyright (C) 1999-2001, 2005, 2007-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/emacs-lisp/eieio-datadebug.el 
b/lisp/emacs-lisp/eieio-datadebug.el
index d10804b36aa..a80d1ae2720 100644
--- a/lisp/emacs-lisp/eieio-datadebug.el
+++ b/lisp/emacs-lisp/eieio-datadebug.el
@@ -1,6 +1,6 @@
 ;;; eieio-datadebug.el --- EIEIO extensions to the data debugger.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: OO, lisp
diff --git a/lisp/emacs-lisp/eieio-opt.el b/lisp/emacs-lisp/eieio-opt.el
index b599aabb7f7..7b054169ca1 100644
--- a/lisp/emacs-lisp/eieio-opt.el
+++ b/lisp/emacs-lisp/eieio-opt.el
@@ -1,6 +1,6 @@
 ;;; eieio-opt.el --- eieio optional functions (debug, printing, speedbar)  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996, 1998-2003, 2005, 2008-2022 Free Software
+;; Copyright (C) 1996, 1998-2003, 2005, 2008-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/emacs-lisp/eieio-speedbar.el 
b/lisp/emacs-lisp/eieio-speedbar.el
index cc201b5d9c3..25626d01ecc 100644
--- a/lisp/emacs-lisp/eieio-speedbar.el
+++ b/lisp/emacs-lisp/eieio-speedbar.el
@@ -1,6 +1,6 @@
 ;;; eieio-speedbar.el --- Classes for managing speedbar displays.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2002, 2005, 2007-2022 Free Software Foundation,
+;; Copyright (C) 1999-2002, 2005, 2007-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el
index 8351d97b13d..9a1f5b9db0f 100644
--- a/lisp/emacs-lisp/eieio.el
+++ b/lisp/emacs-lisp/eieio.el
@@ -1,7 +1,7 @@
 ;;; eieio.el --- Enhanced Implementation of Emacs Interpreted Objects  -*- 
lexical-binding:t -*-
 ;;;              or maybe Eric's Implementation of Emacs Interpreted Objects
 
-;; Copyright (C) 1995-1996, 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Version: 1.4
@@ -184,8 +184,9 @@ and reference them using the function `class-option'."
        (when (and initarg (eq alloc :class))
          (push
            (cons sname
-                 (format "Meaningless :initarg for class allocated slot '%S'"
-                        sname))
+                 (format-message
+                  "Meaningless :initarg for class allocated slot `%S'"
+                 sname))
           warnings))
 
         (let ((init (plist-get soptions :initform)))
diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el
index e1801c45b75..3f5cf0ad0dc 100644
--- a/lisp/emacs-lisp/eldoc.el
+++ b/lisp/emacs-lisp/eldoc.el
@@ -1,6 +1,6 @@
 ;;; eldoc.el --- Show function arglist or variable docstring in echo area  -*- 
lexical-binding:t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Noah Friedman <friedman@splode.com>
 ;; Keywords: extensions
diff --git a/lisp/emacs-lisp/elint.el b/lisp/emacs-lisp/elint.el
index ab141489c44..9812c663ea8 100644
--- a/lisp/emacs-lisp/elint.el
+++ b/lisp/emacs-lisp/elint.el
@@ -1,6 +1,6 @@
 ;;; elint.el --- Lint Emacs Lisp -*- lexical-binding: t -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Peter Liljenberg <petli@lysator.liu.se>
 ;; Created: May 1997
diff --git a/lisp/emacs-lisp/elp.el b/lisp/emacs-lisp/elp.el
index cbf38e7dd88..d50d0e029e9 100644
--- a/lisp/emacs-lisp/elp.el
+++ b/lisp/emacs-lisp/elp.el
@@ -1,6 +1,6 @@
 ;;; elp.el --- Emacs Lisp Profiler  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Barry A. Warsaw
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el
index 49f2a1d6965..83705ca5b89 100644
--- a/lisp/emacs-lisp/ert-x.el
+++ b/lisp/emacs-lisp/ert-x.el
@@ -1,6 +1,6 @@
 ;;; ert-x.el --- Staging area for experimental extensions to ERT  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2008, 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008, 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Lennart Borgman (lennart O borgman A gmail O com)
 ;;         Christian Ohler <ohler@gnu.org>
@@ -102,42 +102,35 @@ the name of the test and the result of NAME-FORM."
            (indent 1))
   `(ert--call-with-test-buffer ,name-form (lambda () ,@body)))
 
-(cl-defmacro ert-with-test-buffer-selected ((&key name)
-                                            &body body)
-  "Create a test buffer, switch to it, and run BODY.
+(cl-defmacro ert-with-buffer-selected (buffer-or-name &body body)
+  "Display a buffer in a temporary selected window and run BODY.
+
+If BUFFER-OR-NAME is nil, the current buffer is used.
 
-This extends `ert-with-test-buffer' by displaying the test
-buffer (whose name is derived from NAME) in a temporary window.
-The temporary window becomes the `selected-window' before BODY is
-evaluated.  The modification hooks `before-change-functions' and
+The buffer is made the current buffer, and the temporary window
+becomes the `selected-window', before BODY is evaluated.  The
+modification hooks `before-change-functions' and
 `after-change-functions' are not inhibited during the evaluation
 of BODY, which makes it easier to use `execute-kbd-macro' to
 simulate user interaction.  The window configuration is restored
 before returning, even if BODY exits nonlocally.  The return
 value is the last form in BODY."
-  (declare (debug ((":name" form) def-body))
-           (indent 1))
-  (let ((ret (make-symbol "ert--with-test-buffer-selected-ret")))
-    `(save-window-excursion
-       (let (,ret)
-         (ert-with-test-buffer (:name ,name)
-           (with-current-buffer-window (current-buffer)
-               `(display-buffer-below-selected
-                 (body-function
-                  . ,(lambda (window)
-                       (select-window window t)
-                       ;; body-function is intended to initialize the
-                       ;; contents of a temporary read-only buffer, so
-                       ;; it is executed with some convenience
-                       ;; changes.  Undo those changes so that the
-                       ;; test buffer behaves more like an ordinary
-                       ;; buffer while the body executes.
-                       (let ((inhibit-modification-hooks nil)
-                             (inhibit-read-only nil)
-                             (buffer-read-only nil))
-                         (setq ,ret (progn ,@body))))))
-             nil))
-         ,ret))))
+  (declare (debug (form body)) (indent 1))
+  `(save-window-excursion
+     (with-current-buffer (or ,buffer-or-name (current-buffer))
+       (with-selected-window (display-buffer (current-buffer))
+         ,@body))))
+
+(cl-defmacro ert-with-test-buffer-selected ((&key name) &body body)
+  "Create a test buffer, switch to it, and run BODY.
+
+This combines `ert-with-test-buffer' and
+`ert-with-buffer-selected'.  The return value is the last form in
+BODY."
+  (declare (debug ((":name" form) body)) (indent 1))
+  `(ert-with-test-buffer (:name ,name)
+     (ert-with-buffer-selected (current-buffer)
+       ,@body)))
 
 ;;;###autoload
 (defun ert-kill-all-test-buffers ()
diff --git a/lisp/emacs-lisp/ert.el b/lisp/emacs-lisp/ert.el
index 67cbe62538c..be9f013ebcf 100644
--- a/lisp/emacs-lisp/ert.el
+++ b/lisp/emacs-lisp/ert.el
@@ -1,6 +1,6 @@
 ;;; ert.el --- Emacs Lisp Regression Testing  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Christian Ohler <ohler@gnu.org>
 ;; Keywords: lisp, tools
diff --git a/lisp/emacs-lisp/ewoc.el b/lisp/emacs-lisp/ewoc.el
index e1acd7e1ba7..56527afcf12 100644
--- a/lisp/emacs-lisp/ewoc.el
+++ b/lisp/emacs-lisp/ewoc.el
@@ -1,6 +1,6 @@
 ;;; ewoc.el --- utility to maintain a view of a list of objects in a buffer  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1991-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2023 Free Software Foundation, Inc.
 
 ;; Author: Per Cederqvist <ceder@lysator.liu.se>
 ;;     Inge Wallin <inge@lysator.liu.se>
diff --git a/lisp/emacs-lisp/faceup.el b/lisp/emacs-lisp/faceup.el
index b44132dcead..f8d6c263cd1 100644
--- a/lisp/emacs-lisp/faceup.el
+++ b/lisp/emacs-lisp/faceup.el
@@ -1,6 +1,6 @@
 ;;; faceup.el --- Markup language for faces and font-lock regression testing  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Anders Lindgren
 ;; Version: 0.0.6
diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el
index 486d5d08614..f9f919afb1b 100644
--- a/lisp/emacs-lisp/find-func.el
+++ b/lisp/emacs-lisp/find-func.el
@@ -1,6 +1,6 @@
 ;;; find-func.el --- find the definition of the Emacs Lisp function near point 
 -*- lexical-binding:t -*-
 
-;; Copyright (C) 1997, 1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Jens Petersen <petersen@kurims.kyoto-u.ac.jp>
 ;; Keywords: emacs-lisp, functions, variables
diff --git a/lisp/emacs-lisp/float-sup.el b/lisp/emacs-lisp/float-sup.el
index d21e96ca78e..84083c65292 100644
--- a/lisp/emacs-lisp/float-sup.el
+++ b/lisp/emacs-lisp/float-sup.el
@@ -1,6 +1,6 @@
 ;;; float-sup.el --- define some constants useful for floating point numbers.  
-*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1987, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1987, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
diff --git a/lisp/emacs-lisp/generate-lisp-file.el 
b/lisp/emacs-lisp/generate-lisp-file.el
index 7b087a4ecbd..b2f67ab848d 100644
--- a/lisp/emacs-lisp/generate-lisp-file.el
+++ b/lisp/emacs-lisp/generate-lisp-file.el
@@ -1,6 +1,6 @@
 ;;; generate-lisp-file.el --- utility functions for generated files  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Keywords: maint
 ;; Package: emacs
diff --git a/lisp/emacs-lisp/generator.el b/lisp/emacs-lisp/generator.el
index 8fbc3b03648..9b0e5ad6352 100644
--- a/lisp/emacs-lisp/generator.el
+++ b/lisp/emacs-lisp/generator.el
@@ -1,6 +1,6 @@
 ;;; generator.el --- generators  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Daniel Colascione <dancol@dancol.org>
 ;; Keywords: extensions, elisp
diff --git a/lisp/emacs-lisp/generic.el b/lisp/emacs-lisp/generic.el
index c6b33b09bad..b734bff1108 100644
--- a/lisp/emacs-lisp/generic.el
+++ b/lisp/emacs-lisp/generic.el
@@ -1,6 +1,6 @@
 ;;; generic.el --- defining simple major modes with comment and font-lock  -*- 
lexical-binding: t; -*-
 ;;
-;; Copyright (C) 1997, 1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Peter Breton <pbreton@cs.umb.edu>
 ;; Created: Fri Sep 27 1996
diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el
index 48bc0269f36..dad91e92a45 100644
--- a/lisp/emacs-lisp/gv.el
+++ b/lisp/emacs-lisp/gv.el
@@ -1,6 +1,6 @@
 ;;; gv.el --- generalized variables  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: extensions
diff --git a/lisp/emacs-lisp/helper.el b/lisp/emacs-lisp/helper.el
index 10bb2973253..5d6fa6a77ea 100644
--- a/lisp/emacs-lisp/helper.el
+++ b/lisp/emacs-lisp/helper.el
@@ -1,6 +1,6 @@
 ;;; helper.el --- utility help package supporting help in electric modes  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/hierarchy.el b/lisp/emacs-lisp/hierarchy.el
index d955019a9db..05509378c82 100644
--- a/lisp/emacs-lisp/hierarchy.el
+++ b/lisp/emacs-lisp/hierarchy.el
@@ -1,6 +1,6 @@
 ;;; hierarchy.el --- Library to create and display hierarchical structures  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Damien Cassou <damien@cassou.me>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/icons.el b/lisp/emacs-lisp/icons.el
index 8ba6d97ea00..cb08c1a6b81 100644
--- a/lisp/emacs-lisp/icons.el
+++ b/lisp/emacs-lisp/icons.el
@@ -1,6 +1,6 @@
 ;;; icons.el --- Handling icons  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: icons buttons
diff --git a/lisp/emacs-lisp/inline.el b/lisp/emacs-lisp/inline.el
index de0112db631..f761fda29a8 100644
--- a/lisp/emacs-lisp/inline.el
+++ b/lisp/emacs-lisp/inline.el
@@ -1,6 +1,6 @@
 ;;; inline.el --- Define functions by their inliner  -*- lexical-binding:t; -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 
diff --git a/lisp/emacs-lisp/let-alist.el b/lisp/emacs-lisp/let-alist.el
index 6a085f0a8c1..d9ad46b2af7 100644
--- a/lisp/emacs-lisp/let-alist.el
+++ b/lisp/emacs-lisp/let-alist.el
@@ -1,6 +1,6 @@
 ;;; let-alist.el --- Easily let-bind values of an assoc-list by their names 
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Artur Malabarba <emacs@endlessparentheses.com>
 ;; Package-Requires: ((emacs "24.1"))
diff --git a/lisp/emacs-lisp/lisp-mnt.el b/lisp/emacs-lisp/lisp-mnt.el
index 7c6f89deb11..1fa1297e787 100644
--- a/lisp/emacs-lisp/lisp-mnt.el
+++ b/lisp/emacs-lisp/lisp-mnt.el
@@ -1,6 +1,6 @@
 ;;; lisp-mnt.el --- utility functions for Emacs Lisp maintainers  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1992, 1994, 1997, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1992, 1994, 1997, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index bf879158188..bacc105a214 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -1,6 +1,6 @@
 ;;; lisp-mode.el --- Lisp mode, and its idiosyncratic commands  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1999-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: lisp, languages
diff --git a/lisp/emacs-lisp/lisp.el b/lisp/emacs-lisp/lisp.el
index c8d05a084bb..e3ed28f097a 100644
--- a/lisp/emacs-lisp/lisp.el
+++ b/lisp/emacs-lisp/lisp.el
@@ -1,6 +1,6 @@
 ;;; lisp.el --- Lisp editing commands for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1994, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1994, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/loaddefs-gen.el b/lisp/emacs-lisp/loaddefs-gen.el
index 2dd04174f54..1007be62dd9 100644
--- a/lisp/emacs-lisp/loaddefs-gen.el
+++ b/lisp/emacs-lisp/loaddefs-gen.el
@@ -1,6 +1,6 @@
 ;;; loaddefs-gen.el --- generate loaddefs.el files  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Keywords: maint
 ;; Package: emacs
@@ -608,7 +608,8 @@ instead of just updating them with the new/changed 
autoloads."
           (write-region (point-min) (point-max) output-file nil 'silent))
       ;; We have some data, so generate the loaddef files.  First
       ;; group per output file.
-      (dolist (fdefs (seq-group-by #'car defs))
+      (dolist (fdefs (seq-group-by (lambda (x) (expand-file-name (car x)))
+                                   defs))
         (let ((loaddefs-file (car fdefs))
               hash)
           (with-temp-buffer
diff --git a/lisp/emacs-lisp/macroexp.el b/lisp/emacs-lisp/macroexp.el
index 8953e5fd019..069adb3edad 100644
--- a/lisp/emacs-lisp/macroexp.el
+++ b/lisp/emacs-lisp/macroexp.el
@@ -1,6 +1,6 @@
 ;;; macroexp.el --- Additional macro-expansion support -*- lexical-binding: t 
-*-
 ;;
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
 ;; Keywords: lisp, compiler, macros
@@ -291,10 +291,11 @@ It should normally be a symbol with position and it 
defaults to FORM."
       (setq arglist (cdr arglist)))
     (if values
         (macroexp-warn-and-return
-         (format (if (eq values 'too-few)
-                     "attempt to open-code `%s' with too few arguments"
-                   "attempt to open-code `%s' with too many arguments")
-                 name)
+         (format-message
+          (if (eq values 'too-few)
+              "attempt to open-code `%s' with too few arguments"
+            "attempt to open-code `%s' with too many arguments")
+          name)
          form nil nil arglist)
 
       ;; The following leads to infinite recursion when loading a
@@ -367,14 +368,14 @@ Assumes the caller has bound 
`macroexpand-all-environment'."
                  (if (null body)
                      (macroexp-unprogn
                       (macroexp-warn-and-return
-                       (format "Empty %s body" fun)
-                       nil nil 'compile-only fun))
+                       (format-message "`%s' with empty body" fun)
+                       nil (list 'empty-body fun) 'compile-only fun))
                    (macroexp--all-forms body))
                  (cdr form))
                 form)))
             (`(while)
              (macroexp-warn-and-return
-              "missing `while' condition"
+              (format-message "missing `while' condition")
               `(signal 'wrong-number-of-arguments '(while 0))
               nil 'compile-only form))
             (`(setq ,(and var (pred symbolp)
@@ -392,7 +393,7 @@ Assumes the caller has bound `macroexpand-all-environment'."
              (let ((nargs (length args)))
                (if (/= (logand nargs 1) 0)
                    (macroexp-warn-and-return
-                    "odd number of arguments in `setq' form"
+                    (format-message "odd number of arguments in `setq' form")
                     `(signal 'wrong-number-of-arguments '(setq ,nargs))
                     nil 'compile-only fn)
                  (let ((assignments nil))
diff --git a/lisp/emacs-lisp/map-ynp.el b/lisp/emacs-lisp/map-ynp.el
index c47025f8846..cb1cc88e78f 100644
--- a/lisp/emacs-lisp/map-ynp.el
+++ b/lisp/emacs-lisp/map-ynp.el
@@ -1,6 +1,6 @@
 ;;; map-ynp.el --- general-purpose boolean question-asker  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1991-1995, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991-1995, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Roland McGrath <roland@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/map.el b/lisp/emacs-lisp/map.el
index 8e3b698d372..7a48ba47434 100644
--- a/lisp/emacs-lisp/map.el
+++ b/lisp/emacs-lisp/map.el
@@ -1,6 +1,6 @@
 ;;; map.el --- Map manipulation functions  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Petton <nicolas@petton.fr>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/memory-report.el b/lisp/emacs-lisp/memory-report.el
index 968a80b59e7..36754277034 100644
--- a/lisp/emacs-lisp/memory-report.el
+++ b/lisp/emacs-lisp/memory-report.el
@@ -1,6 +1,6 @@
 ;;; memory-report.el --- Short function summaries  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Keywords: lisp, help
 
diff --git a/lisp/emacs-lisp/multisession.el b/lisp/emacs-lisp/multisession.el
index 78d4137317d..b09777be407 100644
--- a/lisp/emacs-lisp/multisession.el
+++ b/lisp/emacs-lisp/multisession.el
@@ -1,6 +1,6 @@
 ;;; multisession.el --- Multisession storage for variables  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/emacs-lisp/nadvice.el b/lisp/emacs-lisp/nadvice.el
index 429052bfdf3..85934d9ed0a 100644
--- a/lisp/emacs-lisp/nadvice.el
+++ b/lisp/emacs-lisp/nadvice.el
@@ -1,6 +1,6 @@
 ;;; nadvice.el --- Light-weight advice primitives for Elisp functions  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: extensions, lisp, tools
diff --git a/lisp/emacs-lisp/oclosure.el b/lisp/emacs-lisp/oclosure.el
index 46bb02f5fbf..f5a150ac4ae 100644
--- a/lisp/emacs-lisp/oclosure.el
+++ b/lisp/emacs-lisp/oclosure.el
@@ -1,6 +1,6 @@
 ;;; oclosure.el --- Open Closures       -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022  Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 
diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el
index 8f0eedd2f88..ddcfe57928b 100644
--- a/lisp/emacs-lisp/package-vc.el
+++ b/lisp/emacs-lisp/package-vc.el
@@ -1,6 +1,6 @@
 ;;; package-vc.el --- Manage packages from VC checkouts     -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Philip Kaludercic <philipk@posteo.net>
 ;; Keywords: tools
@@ -131,7 +131,7 @@ the `clone' function."
          ((null spec)
           (package-vc-install name))
          ((stringp spec)
-          (package-vc-install name nil spec))
+          (package-vc-install name spec))
          ((listp spec)
           (package-vc--archives-initialize)
           (package-vc--unpack (cadr pkg-descs) spec)))))))
@@ -306,7 +306,9 @@ asynchronously."
          (directory (file-name-concat
                      (or (package-desc-dir pkg-desc)
                          (expand-file-name name package-user-dir))
-                     (plist-get pkg-spec :lisp-dir)))
+                     (plist-get pkg-spec :lisp-dir)
+                     (and-let* ((extras (package-desc-extras pkg-desc)))
+                       (alist-get :lisp-dir extras))))
          (file (or (plist-get pkg-spec :main-file)
                    (expand-file-name
                     (concat name ".el")
@@ -406,99 +408,156 @@ otherwise it's assumed to be an Info file."
     (when clean-up
       (delete-file file))))
 
+(defun package-vc-install-dependencies (requirements)
+  "Install missing dependencies, and return missing ones.
+The return value will be nil if everything was found, or a list
+of (NAME VERSION) pairs of all packages that couldn't be found.
+
+REQUIREMENTS should be a list of additional requirements; each
+element in this list should have the form (PACKAGE VERSION-LIST),
+where PACKAGE is a package name and VERSION-LIST is the required
+version of that package."
+  (let ((to-install '()) (missing '()))
+    (cl-labels ((search (pkg)
+                  "Attempt to find all dependencies for PKG."
+                  (cond
+                   ((assq (car pkg) to-install)) ;inhibit cycles
+                   ((package-installed-p (car pkg)))
+                   ((let* ((pac package-archive-contents)
+                           (desc (cadr (assoc (car pkg) pac))))
+                      (if desc
+                          (let ((reqs (package-desc-reqs pkg)))
+                            (push pkg to-install)
+                            (mapc #'search reqs))
+                        (push pkg missing))))))
+                (version-order (a b)
+                  "Predicate to sort packages in order."
+                  (version-list-< (cadr b) (cadr a)))
+                (duplicate-p (a b)
+                  "Are A and B the same package?"
+                  (eq (car a) (car b)))
+                (depends-on-p (target package)
+                  "Does PACKAGE depend on TARGET?"
+                  (or (eq target package)
+                      (let* ((pac package-archive-contents)
+                             (desc (cadr (assoc package pac))))
+                        (seq-some
+                         (apply-partially #'depends-on-p target)
+                         (package-desc-reqs desc)))))
+                (dependent-order (a b)
+                  (or (not (depends-on-p (car b) (car a)))
+                      (depends-on-p (car a) (car b)))))
+      (mapc #'search requirements)
+      (cl-callf sort to-install #'version-order)
+      (cl-callf seq-uniq to-install #'duplicate-p)
+      (cl-callf sort to-install #'dependent-order))
+    (mapc #'package-install-from-archive to-install)
+    missing))
+
 (defun package-vc--unpack-1 (pkg-desc pkg-dir)
   "Prepare PKG-DESC that is already checked-out in PKG-DIR.
 This includes downloading missing dependencies, generating
 autoloads, generating a package description file (used to
 identify a package as a VC package later on), building
 documentation and marking the package as installed."
-  ;; Remove any previous instance of PKG-DESC from `package-alist'
-  (let ((pkgs (assq (package-desc-name pkg-desc) package-alist)))
-    (when pkgs
-      (setf (cdr pkgs) (seq-remove #'package-vc-p (cdr pkgs)))))
-
-  ;; In case the package was installed directly from source, the
-  ;; dependency list wasn't know beforehand, and they might have
-  ;; to be installed explicitly.
-  (let ((deps '()))
-    (dolist (file (directory-files pkg-dir t "\\.el\\'" t))
-      (with-temp-buffer
-        (insert-file-contents file)
-        (when-let* ((require-lines (lm-header-multiline "package-requires")))
-          (thread-last
-            (mapconcat #'identity require-lines " ")
-            package-read-from-string
-            package--prepare-dependencies
-            (nconc deps)
-            (setq deps)))))
-    (dolist (dep deps)
-      (cl-callf version-to-list (cadr dep)))
-    (package-download-transaction
-     (package-compute-transaction nil (delete-dups deps))))
-
-  (let ((default-directory (file-name-as-directory pkg-dir))
-        (pkg-file (expand-file-name (package--description-file pkg-dir) 
pkg-dir)))
-    ;; Generate autoloads
-    (let* ((name (package-desc-name pkg-desc))
-           (auto-name (format "%s-autoloads.el" name))
-           (extras (package-desc-extras pkg-desc))
-           (lisp-dir (alist-get :lisp-dir extras)))
-      (package-generate-autoloads
-       name (file-name-concat pkg-dir lisp-dir))
-      (when lisp-dir
-        (write-region
-         (with-temp-buffer
-           (insert ";; Autoload indirection for package-vc\n\n")
-           (prin1 `(load (expand-file-name
-                          ,(file-name-concat lisp-dir auto-name)
-                          (or (and load-file-name
-                                   (file-name-directory load-file-name))
-                              (car load-path))))
-                  (current-buffer))
-           (buffer-string))
-         nil (expand-file-name auto-name pkg-dir))))
-
-    ;; Generate package file
-    (package-vc--generate-description-file pkg-desc pkg-file)
-
-    ;; Detect a manual
-    (when-let ((pkg-spec (package-vc--desc->spec pkg-desc))
-               ((executable-find "install-info")))
-      (dolist (doc-file (ensure-list (plist-get pkg-spec :doc)))
-        (package-vc--build-documentation pkg-desc doc-file))))
-
-  ;; Update package-alist.
-  (let ((new-desc (package-load-descriptor pkg-dir)))
-    ;; Activation has to be done before compilation, so that if we're
-    ;; upgrading and macros have changed we load the new definitions
-    ;; before compiling.
-    (when (package-activate-1 new-desc :reload :deps)
-      ;; FIXME: Compilation should be done as a separate, optional, step.
-      ;; E.g. for multi-package installs, we should first install all packages
-      ;; and then compile them.
-      (package--compile new-desc)
-      (when package-native-compile
-        (package--native-compile-async new-desc))
-      ;; After compilation, load again any files loaded by
-      ;; `activate-1', so that we use the byte-compiled definitions.
-      (package--reload-previously-loaded new-desc)))
-
-  ;; Mark package as selected
-  (package--save-selected-packages
-   (cons (package-desc-name pkg-desc)
-         package-selected-packages))
-  (package--quickstart-maybe-refresh)
-
-  ;; Confirm that the installation was successful
-  (let ((main-file (package-vc--main-file pkg-desc)))
-    (message "VC package `%s' installed (Version %s, Revision %S)."
-             (package-desc-name pkg-desc)
-             (lm-with-file main-file
-               (package-strip-rcs-id
-                (or (lm-header "package-version")
-                    (lm-header "version"))))
-             (vc-working-revision main-file)))
-  t)
+  (let (missing)
+    ;; Remove any previous instance of PKG-DESC from `package-alist'
+    (let ((pkgs (assq (package-desc-name pkg-desc) package-alist)))
+      (when pkgs
+        (setf (cdr pkgs) (seq-remove #'package-vc-p (cdr pkgs)))))
+
+    ;; In case the package was installed directly from source, the
+    ;; dependency list wasn't know beforehand, and they might have
+    ;; to be installed explicitly.
+    (let ((deps '()))
+      (dolist (file (directory-files pkg-dir t "\\.el\\'" t))
+        (with-temp-buffer
+          (insert-file-contents file)
+          (when-let* ((require-lines (lm-header-multiline "package-requires")))
+            (thread-last
+              (mapconcat #'identity require-lines " ")
+              package-read-from-string
+              package--prepare-dependencies
+              (nconc deps)
+              (setq deps)))))
+      (dolist (dep deps)
+        (cl-callf version-to-list (cadr dep)))
+      (setf missing (package-vc-install-dependencies (delete-dups deps)))
+      (setf missing (delq (assq (package-desc-name pkg-desc)
+                                missing)
+                          missing)))
+
+    (let ((default-directory (file-name-as-directory pkg-dir))
+          (pkg-file (expand-file-name (package--description-file pkg-dir) 
pkg-dir)))
+      ;; Generate autoloads
+      (let* ((name (package-desc-name pkg-desc))
+             (auto-name (format "%s-autoloads.el" name))
+             (extras (package-desc-extras pkg-desc))
+             (lisp-dir (alist-get :lisp-dir extras)))
+        (package-generate-autoloads
+         name (file-name-concat pkg-dir lisp-dir))
+        (when lisp-dir
+          (write-region
+           (with-temp-buffer
+             (insert ";; Autoload indirection for package-vc\n\n")
+             (prin1 `(load (expand-file-name
+                            ,(file-name-concat lisp-dir auto-name)
+                            (or (and load-file-name
+                                     (file-name-directory load-file-name))
+                                (car load-path))))
+                    (current-buffer))
+             (buffer-string))
+           nil (expand-file-name auto-name pkg-dir))))
+
+      ;; Generate package file
+      (package-vc--generate-description-file pkg-desc pkg-file)
+
+      ;; Detect a manual
+      (when-let ((pkg-spec (package-vc--desc->spec pkg-desc))
+                 ((executable-find "install-info")))
+        (dolist (doc-file (ensure-list (plist-get pkg-spec :doc)))
+          (package-vc--build-documentation pkg-desc doc-file))))
+
+    ;; Update package-alist.
+    (let ((new-desc (package-load-descriptor pkg-dir)))
+      ;; Activation has to be done before compilation, so that if we're
+      ;; upgrading and macros have changed we load the new definitions
+      ;; before compiling.
+      (when (package-activate-1 new-desc :reload :deps)
+        ;; FIXME: Compilation should be done as a separate, optional, step.
+        ;; E.g. for multi-package installs, we should first install all 
packages
+        ;; and then compile them.
+        (package--compile new-desc)
+        (when package-native-compile
+          (package--native-compile-async new-desc))
+        ;; After compilation, load again any files loaded by
+        ;; `activate-1', so that we use the byte-compiled definitions.
+        (package--reload-previously-loaded new-desc)))
+
+    ;; Mark package as selected
+    (package--save-selected-packages
+     (cons (package-desc-name pkg-desc)
+           package-selected-packages))
+    (package--quickstart-maybe-refresh)
+
+    ;; Confirm that the installation was successful
+    (let ((main-file (package-vc--main-file pkg-desc)))
+      (message "VC package `%s' installed (Version %s, Revision %S).%s"
+               (package-desc-name pkg-desc)
+               (lm-with-file main-file
+                 (package-strip-rcs-id
+                  (or (lm-header "package-version")
+                      (lm-header "version"))))
+               (vc-working-revision main-file)
+               (if missing
+                    (format
+                     " Failed to install the following dependencies: %s"
+                     (mapconcat
+                      (lambda (p)
+                        (format "%s (%s)" (car p) (cadr p)))
+                      missing ", "))
+                 "")))
+    t))
 
 (defun package-vc--guess-backend (url)
   "Guess the VC backend for URL.
@@ -552,6 +611,23 @@ checkout.  This overrides the `:branch' attribute in 
PKG-SPEC."
         (error "There already exists a checkout for %s" name)))
     (package-vc--clone pkg-desc pkg-spec pkg-dir rev)
 
+    ;; When nothing is specified about a `lisp-dir', then should
+    ;; heuristically check if there is a sub-directory with lisp
+    ;; files.  These are conventionally just called "lisp" or "src".
+    ;; If this directory exists and contains non-zero number of lisp
+    ;; files, we will use that instead of `pkg-dir'.
+    (catch 'done
+      (dolist (name '("lisp" "src"))
+        (when-let* (((null lisp-dir))
+                    (dir (expand-file-name name pkg-dir))
+                    ((file-directory-p dir))
+                    ((directory-files dir nil "\\`[^.].+\\.el\\'" t 1)))
+          ;; We won't use `dir', since dir is an absolute path and we
+          ;; don't want `lisp-dir' to depend on the current location of
+          ;; the package installation, ie. to break if moved around the
+          ;; file system or between installations.
+          (throw 'done (setq lisp-dir name)))))
+
     (when lisp-dir
       (push (cons :lisp-dir lisp-dir)
             (package-desc-extras pkg-desc)))
@@ -661,7 +737,7 @@ If no such revision can be found, return nil."
                              (line-number-at-pos nil t))))))))
 
 ;;;###autoload
-(defun package-vc-install (package &optional name rev backend)
+(defun package-vc-install (package &optional rev backend name)
   "Fetch a PACKAGE and set it up for using with Emacs.
 
 If PACKAGE is a string containing an URL, download the package
@@ -685,7 +761,9 @@ the package's repository; this is only possible if 
NAME-OR-URL is a URL,
 a string.  If BACKEND is omitted or nil, the function
 uses `package-vc-heuristic-alist' to guess the backend.
 Note that by default, a VC package will be prioritized over a
-regular package, but it will not remove a VC package."
+regular package, but it will not remove a VC package.
+
+\(fn PACKAGE &optional REV BACKEND)"
   (interactive
    (progn
      ;; Initialize the package system to get the list of package
@@ -694,8 +772,10 @@ regular package, but it will not remove a VC package."
      (let* ((name-or-url (package-vc--read-package-name
                           "Fetch and install package: " t))
             (name (file-name-base name-or-url)))
-       (list name-or-url (intern (string-remove-prefix "emacs-" name))
-             (and current-prefix-arg :last-release)))))
+       (list name-or-url
+             (and current-prefix-arg :last-release)
+             nil
+             (intern (string-remove-prefix "emacs-" name))))))
   (package-vc--archives-initialize)
   (cond
    ((null package)
diff --git a/lisp/emacs-lisp/package-x.el b/lisp/emacs-lisp/package-x.el
index 78f2d36c6f0..6c4e2a578b2 100644
--- a/lisp/emacs-lisp/package-x.el
+++ b/lisp/emacs-lisp/package-x.el
@@ -1,6 +1,6 @@
 ;;; package-x.el --- Package extras  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <tromey@redhat.com>
 ;; Created: 10 Mar 2007
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 1cc978923e0..09917cd29b1 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -1,6 +1,6 @@
 ;;; package.el --- Simple package system for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <tromey@redhat.com>
 ;;         Daniel Hackney <dan@haxney.org>
@@ -2094,7 +2094,7 @@ if all the in-between dependencies are also in 
PACKAGE-LIST."
 (defun package-install-from-archive (pkg-desc)
   "Download and install a package defined by PKG-DESC."
   ;; This won't happen, unless the archive is doing something wrong.
-  (when (package-vc-p pkg-desc)
+  (when (eq (package-desc-kind pkg-desc) 'dir)
     (error "Can't install directory package from archive"))
   (let* ((location (package-archive-base pkg-desc))
          (file (concat (package-desc-full-name pkg-desc)
diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el
index 762cc8eb4f9..1c5ce5169ab 100644
--- a/lisp/emacs-lisp/pcase.el
+++ b/lisp/emacs-lisp/pcase.el
@@ -1,6 +1,6 @@
 ;;; pcase.el --- ML-style pattern-matching macro for Elisp -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: extensions
@@ -947,7 +947,7 @@ Otherwise, it defers to REST which is a list of branches of 
the form
         (let ((code (pcase--u1 matches code vars rest)))
           (if (eq upat '_) code
             (macroexp-warn-and-return
-             "Pattern t is deprecated.  Use `_' instead"
+             (format-message "Pattern t is deprecated.  Use `_' instead")
              code nil nil upat))))
        ((eq upat 'pcase--dontcare) :pcase--dontcare)
        ((memq (car-safe upat) '(guard pred))
diff --git a/lisp/emacs-lisp/pp.el b/lisp/emacs-lisp/pp.el
index a3ff2ecbaa6..ebda37419f7 100644
--- a/lisp/emacs-lisp/pp.el
+++ b/lisp/emacs-lisp/pp.el
@@ -1,6 +1,6 @@
 ;;; pp.el --- pretty printer for Emacs Lisp  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1989, 1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Randal Schwartz <merlyn@stonehenge.com>
 ;; Keywords: lisp
diff --git a/lisp/emacs-lisp/radix-tree.el b/lisp/emacs-lisp/radix-tree.el
index dbf8558d2f6..9b80b6c4614 100644
--- a/lisp/emacs-lisp/radix-tree.el
+++ b/lisp/emacs-lisp/radix-tree.el
@@ -1,6 +1,6 @@
 ;;; radix-tree.el --- A simple library of radix trees  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
diff --git a/lisp/emacs-lisp/range.el b/lisp/emacs-lisp/range.el
index 38c2866cd4c..1165fcbbd7d 100644
--- a/lisp/emacs-lisp/range.el
+++ b/lisp/emacs-lisp/range.el
@@ -1,6 +1,6 @@
 ;;; ranges.el --- range functions  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 
diff --git a/lisp/emacs-lisp/re-builder.el b/lisp/emacs-lisp/re-builder.el
index 0f9b60730f3..0b2b9cde795 100644
--- a/lisp/emacs-lisp/re-builder.el
+++ b/lisp/emacs-lisp/re-builder.el
@@ -1,6 +1,6 @@
 ;;; re-builder.el --- building Regexps with visual feedback -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Detlev Zundel <dzu@gnu.org>
 ;; Keywords: matching, lisp, tools
diff --git a/lisp/emacs-lisp/regexp-opt.el b/lisp/emacs-lisp/regexp-opt.el
index 4d5a39458d2..e64a3dcea1e 100644
--- a/lisp/emacs-lisp/regexp-opt.el
+++ b/lisp/emacs-lisp/regexp-opt.el
@@ -1,6 +1,6 @@
 ;;; regexp-opt.el --- generate efficient regexps to match strings -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Marshall <simon@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/regi.el b/lisp/emacs-lisp/regi.el
index a7d61ed51ca..cac617c9637 100644
--- a/lisp/emacs-lisp/regi.el
+++ b/lisp/emacs-lisp/regi.el
@@ -1,6 +1,6 @@
 ;;; regi.el --- REGular expression Interpreting engine  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: 1993 Barry A. Warsaw, Century Computing, Inc. <bwarsaw@cen.com>
 ;; Created:       24-Feb-1993
diff --git a/lisp/emacs-lisp/ring.el b/lisp/emacs-lisp/ring.el
index e8b92a532fa..d0d96721121 100644
--- a/lisp/emacs-lisp/ring.el
+++ b/lisp/emacs-lisp/ring.el
@@ -1,6 +1,6 @@
 ;;; ring.el --- handle rings of items   -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1992, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: extensions
diff --git a/lisp/emacs-lisp/rmc.el b/lisp/emacs-lisp/rmc.el
index 1083a6868ba..542c96512f5 100644
--- a/lisp/emacs-lisp/rmc.el
+++ b/lisp/emacs-lisp/rmc.el
@@ -1,6 +1,6 @@
 ;;; rmc.el --- read from a multiple choice question -*- lexical-binding: t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index f2a0dc54832..46f61c26bc4 100644
--- a/lisp/emacs-lisp/rx.el
+++ b/lisp/emacs-lisp/rx.el
@@ -1,6 +1,6 @@
 ;;; rx.el --- S-exp notation for regexps           --*- lexical-binding: t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index 1645da2eb0b..6917c541f2e 100644
--- a/lisp/emacs-lisp/seq.el
+++ b/lisp/emacs-lisp/seq.el
@@ -1,6 +1,6 @@
 ;;; seq.el --- Sequence manipulation functions  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Petton <nicolas@petton.fr>
 ;; Keywords: sequences
diff --git a/lisp/emacs-lisp/shadow.el b/lisp/emacs-lisp/shadow.el
index da32e4564f6..12c3ffde2c1 100644
--- a/lisp/emacs-lisp/shadow.el
+++ b/lisp/emacs-lisp/shadow.el
@@ -1,6 +1,6 @@
 ;;; shadow.el --- locate Emacs Lisp file shadowings  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Terry Jones <terry@santafe.edu>
 ;; Keywords: lisp
diff --git a/lisp/emacs-lisp/shortdoc.el b/lisp/emacs-lisp/shortdoc.el
index 6704db3cc57..ed4e205d204 100644
--- a/lisp/emacs-lisp/shortdoc.el
+++ b/lisp/emacs-lisp/shortdoc.el
@@ -1,6 +1,6 @@
 ;;; shortdoc.el --- Short function summaries  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Keywords: lisp, help
 ;; Package: emacs
@@ -263,6 +263,12 @@ A FUNC form can have any number of `:no-eval' (or 
`:no-value'),
    :eval (stringp "a")
    :eval (stringp 'a)
    :eval "(stringp ?a)")
+  (string-or-null-p
+   :eval (string-or-null-p "a")
+   :eval (string-or-null-p nil))
+  (char-or-string-p
+   :eval "(char-or-string-p ?a)"
+   :eval (char-or-string-p "a"))
   (string-empty-p
    :no-manual t
    :eval (string-empty-p ""))
@@ -300,6 +306,9 @@ A FUNC form can have any number of `:no-eval' (or 
`:no-value'),
    :eval (string-to-number "2.5e+03"))
   (number-to-string
    :eval (number-to-string 42))
+  (char-uppercase-p
+   :eval "(char-uppercase-p ?A)"
+   :eval "(char-uppercase-p ?a)")
   "Data About Strings"
   (length
    :eval (length "foo")
@@ -412,8 +421,8 @@ A FUNC form can have any number of `:no-eval' (or 
`:no-value'),
   (file-readable-p
    :no-eval (file-readable-p "/tmp/foo")
    :eg-result t)
-  (file-writeable-p
-   :no-eval (file-writeable-p "/tmp/foo")
+  (file-writable-p
+   :no-eval (file-writable-p "/tmp/foo")
    :eg-result t)
   (file-accessible-directory-p
    :no-eval (file-accessible-directory-p "/tmp")
@@ -643,8 +652,8 @@ A FUNC form can have any number of `:no-eval' (or 
`:no-value'),
    :eval (mapcan #'list '(1 2 3)))
   (mapc
    :eval (mapc #'insert '("1" "2" "3")))
-  (reduce
-   :eval (reduce #'+ '(1 2 3)))
+  (seq-reduce
+   :eval (seq-reduce #'+ '(1 2 3) 0))
   (mapconcat
    :eval (mapconcat #'identity '("foo" "bar") "|"))
   "Predicates"
diff --git a/lisp/emacs-lisp/shorthands.el b/lisp/emacs-lisp/shorthands.el
index ffd3856db6c..bb18ac33497 100644
--- a/lisp/emacs-lisp/shorthands.el
+++ b/lisp/emacs-lisp/shorthands.el
@@ -1,6 +1,6 @@
 ;;; shorthands.el --- Read code considering Elisp shorthands  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: João Távora <joaotavora@gmail.com>
 ;; Keywords: lisp
diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el
index b86070deeff..19a0c22027a 100644
--- a/lisp/emacs-lisp/smie.el
+++ b/lisp/emacs-lisp/smie.el
@@ -1,6 +1,6 @@
 ;;; smie.el --- Simple Minded Indentation Engine -*- lexical-binding: t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: languages, lisp, internal, parsing, indentation
diff --git a/lisp/emacs-lisp/subr-x.el b/lisp/emacs-lisp/subr-x.el
index 4896f4c2937..8cdbdf1ef6a 100644
--- a/lisp/emacs-lisp/subr-x.el
+++ b/lisp/emacs-lisp/subr-x.el
@@ -1,6 +1,6 @@
 ;;; subr-x.el --- extra Lisp functions  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: convenience
@@ -333,7 +333,10 @@ as the new values of the bound variables in the recursive 
invocation."
 ;;;###autoload
 (defun string-glyph-split (string)
   "Split STRING into a list of strings representing separate glyphs.
-This takes into account combining characters and grapheme clusters."
+This takes into account combining characters and grapheme clusters:
+if compositions are enabled, each sequence of characters composed
+on display into a single grapheme cluster is treated as a single
+indivisible unit."
   (let ((result nil)
         (start 0)
         comp)
diff --git a/lisp/emacs-lisp/syntax.el b/lisp/emacs-lisp/syntax.el
index e1be3015838..e35992298a6 100644
--- a/lisp/emacs-lisp/syntax.el
+++ b/lisp/emacs-lisp/syntax.el
@@ -1,6 +1,6 @@
 ;;; syntax.el --- helper functions to find syntactic context  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
diff --git a/lisp/emacs-lisp/tabulated-list.el 
b/lisp/emacs-lisp/tabulated-list.el
index 595dc9b29db..ddac6ed1746 100644
--- a/lisp/emacs-lisp/tabulated-list.el
+++ b/lisp/emacs-lisp/tabulated-list.el
@@ -1,6 +1,6 @@
 ;;; tabulated-list.el --- generic major mode for tabulated lists -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <cyd@stupidchicken.com>
 ;; Keywords: extensions, lisp
diff --git a/lisp/emacs-lisp/tcover-ses.el b/lisp/emacs-lisp/tcover-ses.el
index 645b1a328f0..75df1ed0db8 100644
--- a/lisp/emacs-lisp/tcover-ses.el
+++ b/lisp/emacs-lisp/tcover-ses.el
@@ -1,6 +1,6 @@
 ;;; tcover-ses.el --- Example use of `testcover' to test "SES"  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Jonathan Yavner <jyavner@member.fsf.org>
 ;; Keywords: spreadsheet lisp utility
diff --git a/lisp/emacs-lisp/testcover.el b/lisp/emacs-lisp/testcover.el
index 760063d1f9d..ed31b90ca32 100644
--- a/lisp/emacs-lisp/testcover.el
+++ b/lisp/emacs-lisp/testcover.el
@@ -1,6 +1,6 @@
 ;;; testcover.el --- Visual code-coverage tool  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Jonathan Yavner <jyavner@member.fsf.org>
 ;; Keywords: lisp utility
diff --git a/lisp/emacs-lisp/text-property-search.el 
b/lisp/emacs-lisp/text-property-search.el
index d41222bdbf1..920278b903a 100644
--- a/lisp/emacs-lisp/text-property-search.el
+++ b/lisp/emacs-lisp/text-property-search.el
@@ -1,6 +1,6 @@
 ;;; text-property-search.el --- search for text properties  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: convenience
diff --git a/lisp/emacs-lisp/thunk.el b/lisp/emacs-lisp/thunk.el
index 2d1efadb7fd..45d69c6e164 100644
--- a/lisp/emacs-lisp/thunk.el
+++ b/lisp/emacs-lisp/thunk.el
@@ -1,6 +1,6 @@
 ;;; thunk.el --- Lazy form evaluation  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Petton <nicolas@petton.fr>
 ;; Keywords: sequences
diff --git a/lisp/emacs-lisp/timer-list.el b/lisp/emacs-lisp/timer-list.el
index d48698234fc..b9a171adc07 100644
--- a/lisp/emacs-lisp/timer-list.el
+++ b/lisp/emacs-lisp/timer-list.el
@@ -1,6 +1,6 @@
 ;;; timer-list.el --- list active timers in a buffer  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Package: emacs
diff --git a/lisp/emacs-lisp/timer.el b/lisp/emacs-lisp/timer.el
index b25a040a96c..7544279d8aa 100644
--- a/lisp/emacs-lisp/timer.el
+++ b/lisp/emacs-lisp/timer.el
@@ -1,6 +1,6 @@
 ;;; timer.el --- run a function with args at some time in future -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Package: emacs
diff --git a/lisp/emacs-lisp/tq.el b/lisp/emacs-lisp/tq.el
index d28f6bbf067..700e7c45e1e 100644
--- a/lisp/emacs-lisp/tq.el
+++ b/lisp/emacs-lisp/tq.el
@@ -1,6 +1,6 @@
 ;;; tq.el --- utility to maintain a transaction queue  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1985-1987, 1992, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1985-1987, 1992, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Scott Draves <spot@cs.cmu.edu>
diff --git a/lisp/emacs-lisp/trace.el b/lisp/emacs-lisp/trace.el
index aea12f146da..d802648d8ab 100644
--- a/lisp/emacs-lisp/trace.el
+++ b/lisp/emacs-lisp/trace.el
@@ -1,6 +1,6 @@
 ;;; trace.el --- tracing facility for Emacs Lisp functions  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1993-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2023 Free Software Foundation, Inc.
 
 ;; Author: Hans Chalupsky <hans@cs.buffalo.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/unsafep.el b/lisp/emacs-lisp/unsafep.el
index 88900dd565f..1d3cde69392 100644
--- a/lisp/emacs-lisp/unsafep.el
+++ b/lisp/emacs-lisp/unsafep.el
@@ -1,6 +1,6 @@
 ;;; unsafep.el --- Determine whether a Lisp form is safe to evaluate  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Jonathan Yavner <jyavner@member.fsf.org>
 ;; Keywords: safety lisp utility
diff --git a/lisp/emacs-lisp/vtable.el b/lisp/emacs-lisp/vtable.el
index de8503a1cb1..0551053df8e 100644
--- a/lisp/emacs-lisp/vtable.el
+++ b/lisp/emacs-lisp/vtable.el
@@ -1,6 +1,6 @@
 ;;; vtable.el --- Displaying data in tables  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/emacs-lisp/warnings.el b/lisp/emacs-lisp/warnings.el
index 3a966957ec5..9505c935816 100644
--- a/lisp/emacs-lisp/warnings.el
+++ b/lisp/emacs-lisp/warnings.el
@@ -1,6 +1,6 @@
 ;;; warnings.el --- log and display warnings  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
diff --git a/lisp/emacs-lock.el b/lisp/emacs-lock.el
index 3c8b81e94da..a7ea4896129 100644
--- a/lisp/emacs-lock.el
+++ b/lisp/emacs-lock.el
@@ -1,6 +1,6 @@
 ;;; emacs-lock.el --- protect buffers against killing or exiting -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Juanma Barranquero <lekktu@gmail.com>
 ;; Inspired by emacs-lock.el by Tom Wurgler <twurgler@goodyear.com>
diff --git a/lisp/emulation/cua-base.el b/lisp/emulation/cua-base.el
index 297f7aba646..a6d6f47ead5 100644
--- a/lisp/emulation/cua-base.el
+++ b/lisp/emulation/cua-base.el
@@ -1,6 +1,6 @@
 ;;; cua-base.el --- emulate CUA key bindings  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <storm@cua.dk>
 ;; Keywords: keyboard emulations convenience cua
diff --git a/lisp/emulation/cua-gmrk.el b/lisp/emulation/cua-gmrk.el
index 1e7cc45c885..ccf1c96eb01 100644
--- a/lisp/emulation/cua-gmrk.el
+++ b/lisp/emulation/cua-gmrk.el
@@ -1,6 +1,6 @@
 ;;; cua-gmrk.el --- CUA unified global mark support  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <storm@cua.dk>
 ;; Keywords: keyboard emulations convenience cua mark
diff --git a/lisp/emulation/cua-rect.el b/lisp/emulation/cua-rect.el
index a7f3d5fe14c..4e52abbb2c9 100644
--- a/lisp/emulation/cua-rect.el
+++ b/lisp/emulation/cua-rect.el
@@ -1,6 +1,6 @@
 ;;; cua-rect.el --- CUA unified rectangle support  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <storm@cua.dk>
 ;; Keywords: keyboard emulations convenience CUA
diff --git a/lisp/emulation/edt-lk201.el b/lisp/emulation/edt-lk201.el
index 208cfda4400..a0696737482 100644
--- a/lisp/emulation/edt-lk201.el
+++ b/lisp/emulation/edt-lk201.el
@@ -1,6 +1,6 @@
 ;;; edt-lk201.el --- enhanced EDT keypad mode emulation for LK-201 keyboards  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1986, 1992-1993, 1995, 2001-2022 Free Software
+;; Copyright (C) 1986, 1992-1993, 1995, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Kevin Gallagher <kevin.gal@verizon.net>
diff --git a/lisp/emulation/edt-mapper.el b/lisp/emulation/edt-mapper.el
index ed76d7108ff..af2b02eb74e 100644
--- a/lisp/emulation/edt-mapper.el
+++ b/lisp/emulation/edt-mapper.el
@@ -1,6 +1,6 @@
 ;;; edt-mapper.el --- create an EDT LK-201 map file for X-Windows Emacs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1994-1995, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Kevin Gallagher <kevin.gal@verizon.net>
 ;; Keywords: emulations
diff --git a/lisp/emulation/edt-pc.el b/lisp/emulation/edt-pc.el
index 13804d11f56..5e42db7b45b 100644
--- a/lisp/emulation/edt-pc.el
+++ b/lisp/emulation/edt-pc.el
@@ -1,6 +1,6 @@
 ;;; edt-pc.el --- enhanced EDT keypad mode emulation for PC 101 keyboards  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1986, 1994-1995, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1986, 1994-1995, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Kevin Gallagher <kevin.gal@verizon.net>
diff --git a/lisp/emulation/edt-vt100.el b/lisp/emulation/edt-vt100.el
index e1ad70393c1..d0dcebb2670 100644
--- a/lisp/emulation/edt-vt100.el
+++ b/lisp/emulation/edt-vt100.el
@@ -1,6 +1,6 @@
 ;;; edt-vt100.el --- enhanced EDT keypad mode emulation for VT series 
terminals  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1986, 1992-1993, 1995, 2002-2022 Free Software
+;; Copyright (C) 1986, 1992-1993, 1995, 2002-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Kevin Gallagher <kevin.gal@verizon.net>
diff --git a/lisp/emulation/edt.el b/lisp/emulation/edt.el
index cd0e8d60cca..ca353d6dfd2 100644
--- a/lisp/emulation/edt.el
+++ b/lisp/emulation/edt.el
@@ -1,6 +1,6 @@
 ;;; edt.el --- enhanced EDT keypad mode emulation for GNU Emacs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1986, 1992-1995, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1986, 1992-1995, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Kevin Gallagher <kevin.gal@verizon.net>
diff --git a/lisp/emulation/keypad.el b/lisp/emulation/keypad.el
index da26e81df52..ba133ae27a8 100644
--- a/lisp/emulation/keypad.el
+++ b/lisp/emulation/keypad.el
@@ -1,6 +1,6 @@
 ;;; keypad.el --- simplified keypad bindings  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <storm@cua.dk>
 ;; Keywords: keyboard convenience
diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el
index 3b3caaf3e3c..0eb58565b37 100644
--- a/lisp/emulation/viper-cmd.el
+++ b/lisp/emulation/viper-cmd.el
@@ -1,6 +1,6 @@
 ;;; viper-cmd.el --- Vi command support for Viper  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: viper
diff --git a/lisp/emulation/viper-ex.el b/lisp/emulation/viper-ex.el
index ec7b1e4cac3..783c01058e2 100644
--- a/lisp/emulation/viper-ex.el
+++ b/lisp/emulation/viper-ex.el
@@ -1,6 +1,6 @@
 ;;; viper-ex.el --- functions implementing the Ex commands for Viper  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1994-1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: viper
diff --git a/lisp/emulation/viper-init.el b/lisp/emulation/viper-init.el
index 7296041ae8f..986d1fe6bc6 100644
--- a/lisp/emulation/viper-init.el
+++ b/lisp/emulation/viper-init.el
@@ -1,6 +1,6 @@
 ;;; viper-init.el --- some common definitions for Viper  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: viper
diff --git a/lisp/emulation/viper-keym.el b/lisp/emulation/viper-keym.el
index ed978805596..9bf13bbea41 100644
--- a/lisp/emulation/viper-keym.el
+++ b/lisp/emulation/viper-keym.el
@@ -1,6 +1,6 @@
 ;;; viper-keym.el --- Viper keymaps  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1994-1997, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: viper
diff --git a/lisp/emulation/viper-macs.el b/lisp/emulation/viper-macs.el
index 9c2aae1fe9f..a983e8ed130 100644
--- a/lisp/emulation/viper-macs.el
+++ b/lisp/emulation/viper-macs.el
@@ -1,6 +1,6 @@
 ;;; viper-macs.el --- functions implementing keyboard macros for Viper  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1994-1997, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: viper
diff --git a/lisp/emulation/viper-mous.el b/lisp/emulation/viper-mous.el
index 1a90cab7674..65e2d0968dd 100644
--- a/lisp/emulation/viper-mous.el
+++ b/lisp/emulation/viper-mous.el
@@ -1,6 +1,6 @@
 ;;; viper-mous.el --- mouse support for Viper  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1994-1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: viper
diff --git a/lisp/emulation/viper-util.el b/lisp/emulation/viper-util.el
index 46dbd7f24d5..4a38e6640d7 100644
--- a/lisp/emulation/viper-util.el
+++ b/lisp/emulation/viper-util.el
@@ -1,6 +1,6 @@
 ;;; viper-util.el --- Utilities used by viper.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: viper
diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el
index d1c8b5ff2dd..96da914275b 100644
--- a/lisp/emulation/viper.el
+++ b/lisp/emulation/viper.el
@@ -3,7 +3,7 @@
 ;;              and a venomous VI PERil.
 ;;              Viper Is also a Package for Emacs Rebels.
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Keywords: emulations
diff --git a/lisp/env.el b/lisp/env.el
index 5cdedbfb99a..33c02f6f920 100644
--- a/lisp/env.el
+++ b/lisp/env.el
@@ -1,6 +1,6 @@
 ;;; env.el --- functions to manipulate environment variables  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1991-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: processes, unix
diff --git a/lisp/epa-dired.el b/lisp/epa-dired.el
index f4dee5f58f0..309d4358883 100644
--- a/lisp/epa-dired.el
+++ b/lisp/epa-dired.el
@@ -1,6 +1,6 @@
 ;;; epa-dired.el --- the EasyPG Assistant, dired extension -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/epa-file.el b/lisp/epa-file.el
index be22b320a27..4d8ca11e809 100644
--- a/lisp/epa-file.el
+++ b/lisp/epa-file.el
@@ -1,6 +1,6 @@
 ;;; epa-file.el --- the EasyPG Assistant, transparent file encryption -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/epa-hook.el b/lisp/epa-hook.el
index 386bd739640..00df6732e52 100644
--- a/lisp/epa-hook.el
+++ b/lisp/epa-hook.el
@@ -1,6 +1,6 @@
 ;;; epa-hook.el --- preloaded code to enable epa-file.el -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/epa-ks.el b/lisp/epa-ks.el
index bb64b61b8fa..77d896fa438 100644
--- a/lisp/epa-ks.el
+++ b/lisp/epa-ks.el
@@ -1,6 +1,6 @@
 ;;; epa-ks.el --- EasyPG Key Server Client -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Philip K. <philipk@posteo.net>
 ;; Keywords: PGP, GnuPG
@@ -135,9 +135,9 @@ Keys are marked using `epa-ks-mark-key-to-fetch'."
                 keys))
         (forward-line))
       (when (yes-or-no-p (format "Proceed with fetching all %d key(s)? "
-                                 (length keys))))
-      (dolist (id keys)
-        (epa-ks--fetch-key id))))
+                                 (length keys)))
+        (dolist (id keys)
+          (epa-ks--fetch-key id)))))
   (tabulated-list-clear-all-tags))
 
 (defun epa-ks--query-url (query exact)
diff --git a/lisp/epa-mail.el b/lisp/epa-mail.el
index bb34ca72d6b..749d4471a39 100644
--- a/lisp/epa-mail.el
+++ b/lisp/epa-mail.el
@@ -1,6 +1,6 @@
 ;;; epa-mail.el --- the EasyPG Assistant, minor-mode for mail composer -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Keywords: PGP, GnuPG, mail, message
diff --git a/lisp/epa.el b/lisp/epa.el
index cb87d808857..8126584e4fb 100644
--- a/lisp/epa.el
+++ b/lisp/epa.el
@@ -1,6 +1,6 @@
 ;;; epa.el --- the EasyPG Assistant -*- lexical-binding: t -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/epg-config.el b/lisp/epg-config.el
index 6501434e030..6797e159ba7 100644
--- a/lisp/epg-config.el
+++ b/lisp/epg-config.el
@@ -1,6 +1,6 @@
 ;;; epg-config.el --- configuration of the EasyPG Library  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/epg.el b/lisp/epg.el
index 527ebfcc2b9..9da5a36ba3d 100644
--- a/lisp/epg.el
+++ b/lisp/epg.el
@@ -1,6 +1,6 @@
 ;;; epg.el --- the EasyPG Library -*- lexical-binding: t -*-
 
-;; Copyright (C) 1999-2000, 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/erc/ChangeLog.1 b/lisp/erc/ChangeLog.1
index 64231f365e2..8a569ebfdb3 100644
--- a/lisp/erc/ChangeLog.1
+++ b/lisp/erc/ChangeLog.1
@@ -11703,7 +11703,7 @@
 
        * erc-speak.el, erc.el: New file.
 
-  Copyright (C) 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/erc/ChangeLog.2 b/lisp/erc/ChangeLog.2
index 86b6e5534c9..ebef621064b 100644
--- a/lisp/erc/ChangeLog.2
+++ b/lisp/erc/ChangeLog.2
@@ -757,7 +757,7 @@
 
 See ChangeLog.1 for earlier changes.
 
-  Copyright (C) 2009-2022 Free Software Foundation, Inc.
+  Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/erc/erc-autoaway.el b/lisp/erc/erc-autoaway.el
index 8d970bd6b96..b586d4523b4 100644
--- a/lisp/erc/erc-autoaway.el
+++ b/lisp/erc/erc-autoaway.el
@@ -1,6 +1,6 @@
 ;;; erc-autoaway.el --- Provides autoaway for ERC  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Jorgen Schaefer <forcer@forcix.cx>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index 43c5faad638..1da701aebc4 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -1,6 +1,6 @@
 ;;; erc-backend.el --- Backend network communication for ERC  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Filename: erc-backend.el
 ;; Author: Lawrence Mitchell <wence@gmx.li>
@@ -320,6 +320,15 @@ session when reconnecting.  Once `erc-reuse-buffers' is 
retired
 and fully removed, modules can switch to leveraging the
 `permanent-local' property instead.")
 
+(defvar erc--server-post-connect-hook '(erc-networks--warn-on-connect)
+  "Functions to run when a network connection is successfully opened.
+Though internal, this complements `erc-connect-pre-hook' in that
+it bookends the process rather than the logical connection, which
+is the domain of `erc-before-connect' and `erc-after-connect'.
+Note that unlike `erc-connect-pre-hook', this only runs in server
+buffers, and it does so immediately before the first protocol
+exchange.")
+
 (defvar-local erc-server-timed-out nil
   "Non-nil if the IRC server failed to respond to a ping.")
 
@@ -646,6 +655,7 @@ The current buffer is given by BUFFER."
 
 (cl-defmethod erc--register-connection ()
   "Perform opening IRC protocol exchange with server."
+  (run-hooks 'erc--server-post-connect-hook)
   (erc-login))
 
 (defvar erc--server-connect-dumb-ipv6-regexp
diff --git a/lisp/erc/erc-button.el b/lisp/erc/erc-button.el
index 445595e2dad..1be47c3e665 100644
--- a/lisp/erc/erc-button.el
+++ b/lisp/erc/erc-button.el
@@ -1,6 +1,6 @@
 ;;; erc-button.el --- A way of buttonizing certain things in ERC buffers  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1996-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-capab.el b/lisp/erc/erc-capab.el
index 8759282a2ae..650c5fa84ac 100644
--- a/lisp/erc/erc-capab.el
+++ b/lisp/erc/erc-capab.el
@@ -1,6 +1,6 @@
 ;;; erc-capab.el --- support for dancer-ircd and hyperion's CAPAB  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
 
diff --git a/lisp/erc/erc-common.el b/lisp/erc/erc-common.el
index da75d50d613..9eb4f1a9000 100644
--- a/lisp/erc/erc-common.el
+++ b/lisp/erc/erc-common.el
@@ -1,6 +1,6 @@
 ;;; erc-common.el --- Macros and types for ERC  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 ;;
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
 ;; Keywords: comm, IRC, chat, client, internet
diff --git a/lisp/erc/erc-compat.el b/lisp/erc/erc-compat.el
index 77625398abd..73ce612a33d 100644
--- a/lisp/erc/erc-compat.el
+++ b/lisp/erc/erc-compat.el
@@ -1,6 +1,6 @@
 ;;; erc-compat.el --- ERC compatibility code for older Emacsen  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
@@ -261,7 +261,7 @@ If START or END is negative, it counts from the end."
             (when-let* ((s (plist-get e :secret))
                         (v (auth-source--obfuscate s)))
               (setf (plist-get e :secret)
-                    (byte-compile (lambda () (auth-source--deobfuscate v)))))
+                    (apply-partially #'auth-source--deobfuscate v)))
             (push e out)))
       rv)))
 
@@ -391,11 +391,11 @@ If START or END is negative, it counts from the end."
 
 (cond ((fboundp 'browse-url-irc)) ; 29
       ((boundp 'browse-url-default-handlers) ; 28
-       (setf (alist-get "\\`irc6?s?://" browse-url-default-handlers
-                        nil nil (lambda (a _)
-                                  (and (stringp a)
-                                       (string-match-p a "irc://localhost"))))
-             #'erc-compat--29-browse-url-irc))
+       (add-to-list 'browse-url-default-handlers
+                    '("\\`irc6?s?://" . erc-compat--29-browse-url-irc)
+                    nil (lambda (_ a)
+                          (and (stringp (car-safe a))
+                               (string-match-p (car a) "irc://localhost")))))
       ((boundp 'browse-url-browser-function) ; 27
        (require 'browse-url)
        (let ((existing browse-url-browser-function))
diff --git a/lisp/erc/erc-dcc.el b/lisp/erc/erc-dcc.el
index ebeab921fb9..4c557e0e0f9 100644
--- a/lisp/erc/erc-dcc.el
+++ b/lisp/erc/erc-dcc.el
@@ -1,6 +1,6 @@
 ;;; erc-dcc.el --- CTCP DCC module for ERC  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1993-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2023 Free Software Foundation, Inc.
 
 ;; Author: Ben A. Mesander <ben@gnu.ai.mit.edu>
 ;;         Noah Friedman <friedman@prep.ai.mit.edu>
diff --git a/lisp/erc/erc-desktop-notifications.el 
b/lisp/erc/erc-desktop-notifications.el
index 1897f53dc16..5721bc0204a 100644
--- a/lisp/erc/erc-desktop-notifications.el
+++ b/lisp/erc/erc-desktop-notifications.el
@@ -1,6 +1,6 @@
 ;;; erc-desktop-notifications.el --- Send notification on PRIVMSG or mentions 
-*- lexical-binding:t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <julien@danjou.info>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-ezbounce.el b/lisp/erc/erc-ezbounce.el
index 958783f2394..38ac4de5ac7 100644
--- a/lisp/erc/erc-ezbounce.el
+++ b/lisp/erc/erc-ezbounce.el
@@ -1,6 +1,6 @@
 ;;; erc-ezbounce.el ---  Handle EZBounce bouncer commands  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002, 2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <asf@void.at>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-fill.el b/lisp/erc/erc-fill.el
index 140e7fdfc61..e10b7d790f6 100644
--- a/lisp/erc/erc-fill.el
+++ b/lisp/erc/erc-fill.el
@@ -1,6 +1,6 @@
 ;;; erc-fill.el --- Filling IRC messages in various ways  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2001-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <asf@void.at>
 ;;         Mario Lang <mlang@delysid.org>
diff --git a/lisp/erc/erc-goodies.el b/lisp/erc/erc-goodies.el
index 1af83b58ba7..05a21019042 100644
--- a/lisp/erc/erc-goodies.el
+++ b/lisp/erc/erc-goodies.el
@@ -1,6 +1,6 @@
 ;;; erc-goodies.el --- Collection of ERC modules  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Jorgen Schaefer <forcer@forcix.cx>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-ibuffer.el b/lisp/erc/erc-ibuffer.el
index 417c0b898a7..6699afe36a0 100644
--- a/lisp/erc/erc-ibuffer.el
+++ b/lisp/erc/erc-ibuffer.el
@@ -1,6 +1,6 @@
 ;;; erc-ibuffer.el --- ibuffer integration with ERC  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2002, 2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-identd.el b/lisp/erc/erc-identd.el
index 5c0a2c1a481..5fdac58716c 100644
--- a/lisp/erc/erc-identd.el
+++ b/lisp/erc/erc-identd.el
@@ -1,6 +1,6 @@
 ;;; erc-identd.el --- RFC1413 (identd authentication protocol) server  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2003, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-imenu.el b/lisp/erc/erc-imenu.el
index 64a8f82b2a9..6223cd3d06f 100644
--- a/lisp/erc/erc-imenu.el
+++ b/lisp/erc/erc-imenu.el
@@ -1,6 +1,6 @@
 ;;; erc-imenu.el --- Imenu support for ERC  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-join.el b/lisp/erc/erc-join.el
index b4044548e84..17104da1a8b 100644
--- a/lisp/erc/erc-join.el
+++ b/lisp/erc/erc-join.el
@@ -1,6 +1,6 @@
 ;;; erc-join.el --- autojoin channels on connect and reconnects  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-lang.el b/lisp/erc/erc-lang.el
index d059caf5a32..9261d659c72 100644
--- a/lisp/erc/erc-lang.el
+++ b/lisp/erc/erc-lang.el
@@ -1,6 +1,6 @@
 ;;; erc-lang.el --- provide the LANG command to ERC  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2002, 2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-list.el b/lisp/erc/erc-list.el
index 5266b680c38..099096771ac 100644
--- a/lisp/erc/erc-list.el
+++ b/lisp/erc/erc-list.el
@@ -1,6 +1,6 @@
 ;;; erc-list.el --- /list support for ERC  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <tromey@redhat.com>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-log.el b/lisp/erc/erc-log.el
index 57093d3fc6c..2cb9031640d 100644
--- a/lisp/erc/erc-log.el
+++ b/lisp/erc/erc-log.el
@@ -1,6 +1,6 @@
 ;;; erc-log.el --- Logging facilities for ERC.  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Lawrence Mitchell <wence@gmx.li>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-match.el b/lisp/erc/erc-match.el
index 6b9aa47d86d..499bcaf5724 100644
--- a/lisp/erc/erc-match.el
+++ b/lisp/erc/erc-match.el
@@ -1,6 +1,6 @@
 ;;; erc-match.el --- Highlight messages matching certain regexps  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <asf@void.at>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-menu.el b/lisp/erc/erc-menu.el
index 455a7c3cd2f..7f877a34c0a 100644
--- a/lisp/erc/erc-menu.el
+++ b/lisp/erc/erc-menu.el
@@ -1,6 +1,6 @@
 ;;; erc-menu.el --- Menu-bar definitions for ERC  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2002, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2002, 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-netsplit.el b/lisp/erc/erc-netsplit.el
index 17ed881b12b..f3572014f27 100644
--- a/lisp/erc/erc-netsplit.el
+++ b/lisp/erc/erc-netsplit.el
@@ -1,6 +1,6 @@
 ;;; erc-netsplit.el --- Reduce JOIN/QUIT messages on netsplits  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-networks.el b/lisp/erc/erc-networks.el
index 2e2d0930118..4044be08f92 100644
--- a/lisp/erc/erc-networks.el
+++ b/lisp/erc/erc-networks.el
@@ -1,6 +1,6 @@
 ;;; erc-networks.el --- IRC networks  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2002, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@lexx.delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
@@ -1472,14 +1472,16 @@ to be a false alarm.  If `erc-reuse-buffers' is nil, let
           (t (rename-buffer (generate-new-buffer-name name)))))
   nil)
 
-;; Soju v0.4.0 only sends ISUPPORT on upstream reconnect, so this
-;; doesn't apply.  ZNC 1.8.2, however, still sends the entire burst.
-(defconst erc-networks--bouncer-targets '(*status bouncerserv)
-  "Case-mapped symbols matching known bouncer service-bot targets.")
+;; Soju v0.4.0 sends ISUPPORT and nothing else on upstream reconnect,
+;; so this actually doesn't apply.  ZNC 1.8.2, however, still sends
+;; the entire burst.
+(defvar erc-networks--bouncer-targets '(*status bouncerserv)
+  "Symbols matching proxy-bot targets.")
 
 (defun erc-networks-on-MOTD-end (proc parsed)
-  "Call on-connect functions with server PROC and PARSED message.
-This must run before `erc-server-connected' is set."
+  "Call on-connect functions with server PROC and PARSED message."
+  ;; This should normally run before `erc-server-connected' is set.
+  ;; However, bouncers and other proxies may interfere with that.
   (when erc-server-connected
     (unless (erc-buffer-filter (lambda ()
                                  (and erc--target
@@ -1502,6 +1504,18 @@ This must run before `erc-server-connected' is set."
   ((remove-hook 'erc-server-376-functions #'erc-networks-on-MOTD-end)
    (remove-hook 'erc-server-422-functions #'erc-networks-on-MOTD-end)))
 
+(defun erc-networks--warn-on-connect ()
+  "Emit warning when the `networks' module hasn't been loaded.
+Ideally, do so upon opening the network process."
+  (unless (or erc--target erc-networks-mode)
+    (require 'info nil t)
+    (let ((m (concat "Required module `networks' not loaded.  If this "
+                     " was unexpected, please add it to `erc-modules'.")))
+      ;; Assume the server buffer has been marked as active.
+      (erc-display-error-notice
+       nil (concat m "  See Info:\"(erc) Required Modules\" for more."))
+      (lwarn 'erc :warning m))))
+
 (defun erc-ports-list (ports)
   "Return a list of PORTS.
 
diff --git a/lisp/erc/erc-notify.el b/lisp/erc/erc-notify.el
index 911a574b17e..55be8976ada 100644
--- a/lisp/erc/erc-notify.el
+++ b/lisp/erc/erc-notify.el
@@ -1,6 +1,6 @@
 ;;; erc-notify.el --- Online status change notification  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@lexx.delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-page.el b/lisp/erc/erc-page.el
index 087e5a67d07..308b3784ca5 100644
--- a/lisp/erc/erc-page.el
+++ b/lisp/erc/erc-page.el
@@ -1,6 +1,6 @@
 ;;; erc-page.el --- CTCP PAGE support for ERC  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2002, 2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
 
diff --git a/lisp/erc/erc-pcomplete.el b/lisp/erc/erc-pcomplete.el
index 3ba18e835bd..0bce856018c 100644
--- a/lisp/erc/erc-pcomplete.el
+++ b/lisp/erc/erc-pcomplete.el
@@ -1,6 +1,6 @@
 ;;; erc-pcomplete.el --- Provides programmable completion for ERC  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Sacha Chua <sacha@free.net.ph>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-replace.el b/lisp/erc/erc-replace.el
index e46862d6a64..8c1c35b46d7 100644
--- a/lisp/erc/erc-replace.el
+++ b/lisp/erc/erc-replace.el
@@ -1,6 +1,6 @@
 ;;; erc-replace.el --- wash and massage messages inserted into the buffer  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <asf@void.at>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-ring.el b/lisp/erc/erc-ring.el
index 9dd1fab6403..2451ac56f6f 100644
--- a/lisp/erc/erc-ring.el
+++ b/lisp/erc/erc-ring.el
@@ -1,6 +1,6 @@
 ;;; erc-ring.el --- Command history handling for erc using ring.el  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-sasl.el b/lisp/erc/erc-sasl.el
index 78d02a46381..a0b36d07613 100644
--- a/lisp/erc/erc-sasl.el
+++ b/lisp/erc/erc-sasl.el
@@ -1,6 +1,6 @@
 ;;; erc-sasl.el --- SASL for ERC -*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -435,7 +435,7 @@ Otherwise, expect it to disappear in subsequent versions.")
                (if (eq :user (alist-get 'user erc-sasl--options))
                    (erc-current-nick)
                  erc-session-username)))
-          (erc-login))
+          (cl-call-next-method))
         (when erc-sasl--send-cap-ls
           (erc-server-send "CAP REQ :sasl"))
         (erc-server-send (format "AUTHENTICATE %s" m)))
diff --git a/lisp/erc/erc-services.el b/lisp/erc/erc-services.el
index c2d91ca9d65..1c2fc2fcdc8 100644
--- a/lisp/erc/erc-services.el
+++ b/lisp/erc/erc-services.el
@@ -1,6 +1,6 @@
 ;;; erc-services.el --- Identify to NickServ  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
 ;; URL: https://www.emacswiki.org/emacs/ErcNickserv
diff --git a/lisp/erc/erc-sound.el b/lisp/erc/erc-sound.el
index 5cae64572f0..0abdbfd959c 100644
--- a/lisp/erc/erc-sound.el
+++ b/lisp/erc/erc-sound.el
@@ -1,6 +1,6 @@
 ;;; erc-sound.el --- CTCP SOUND support for ERC  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2002-2003, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2006-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
 ;; URL: https://www.emacswiki.org/emacs/ErcSound
diff --git a/lisp/erc/erc-speedbar.el b/lisp/erc/erc-speedbar.el
index 0c32f1e51f0..5fca14e2365 100644
--- a/lisp/erc/erc-speedbar.el
+++ b/lisp/erc/erc-speedbar.el
@@ -1,6 +1,6 @@
 ;;; erc-speedbar.el --- Speedbar support for ERC  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Contributor: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/erc/erc-spelling.el b/lisp/erc/erc-spelling.el
index 91e6777b7c0..8fce2508ceb 100644
--- a/lisp/erc/erc-spelling.el
+++ b/lisp/erc/erc-spelling.el
@@ -1,6 +1,6 @@
 ;;; erc-spelling.el --- use flyspell in ERC  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Jorgen Schaefer <forcer@forcix.cx>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-stamp.el b/lisp/erc/erc-stamp.el
index c167cd23930..0aa1590f801 100644
--- a/lisp/erc/erc-stamp.el
+++ b/lisp/erc/erc-stamp.el
@@ -1,6 +1,6 @@
 ;;; erc-stamp.el --- Timestamping for ERC messages  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-status-sidebar.el b/lisp/erc/erc-status-sidebar.el
index 8997be00ae0..f11faa3db10 100644
--- a/lisp/erc/erc-status-sidebar.el
+++ b/lisp/erc/erc-status-sidebar.el
@@ -1,6 +1,6 @@
 ;;; erc-status-sidebar.el --- HexChat-like activity overview for ERC  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2017, 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017, 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Andrew Barbarello
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el
index ef9a8c243e9..61c0c66abfb 100644
--- a/lisp/erc/erc-track.el
+++ b/lisp/erc/erc-track.el
@@ -1,6 +1,6 @@
 ;;; erc-track.el --- Track modified channel buffers  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-truncate.el b/lisp/erc/erc-truncate.el
index d998718a8fc..b8fd4ae2e14 100644
--- a/lisp/erc/erc-truncate.el
+++ b/lisp/erc/erc-truncate.el
@@ -1,6 +1,6 @@
 ;;; erc-truncate.el --- Functions for truncating ERC buffers  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2003-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <asf@void.at>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc-xdcc.el b/lisp/erc/erc-xdcc.el
index ca8ff6c080b..3dc08de4d10 100644
--- a/lisp/erc/erc-xdcc.el
+++ b/lisp/erc/erc-xdcc.el
@@ -1,6 +1,6 @@
 ;;; erc-xdcc.el --- XDCC file-server support for ERC  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2003-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index 6cfc39c4bda..6315d5aa482 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -1,6 +1,6 @@
 ;;; erc.el --- An Emacs Internet Relay Chat client  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Alexander L. Belikoff <alexander@belikoff.net>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>, F. Jason Park <jp@neverwas.me>
@@ -1607,7 +1607,8 @@ same manner."
   (when target ; compat
     (setq tgt-info (erc--target-from-string target)))
   (if tgt-info
-      (let* ((esid (erc-networks--id-symbol erc-networks--id))
+      (let* ((esid (and erc-networks--id
+                        (erc-networks--id-symbol erc-networks--id)))
              (name (if esid
                        (erc-networks--reconcile-buffer-names tgt-info
                                                              erc-networks--id)
@@ -1765,8 +1766,7 @@ all channel buffers on all servers."
 ;; to, it was never realized.
 ;;
 ;; New library code should use the `erc--target' struct instead.
-;; Third-party code can continue to use this until a getter for
-;; `erc--target' (or whatever replaces it) is exported.
+;; Third-party code can continue to use this and `erc-default-target'.
 (defvar-local erc-default-recipients nil
   "List of default recipients of the current buffer.")
 
@@ -2161,6 +2161,23 @@ parameters SERVER and NICK."
     (setq input (concat "irc://" input)))
   input)
 
+;; A temporary means of addressing the problem of ERC's namesake entry
+;; point defaulting to a non-TLS connection with its default server
+;; (bug#60428).
+(defun erc--warn-unencrypted ()
+  ;; Remove unconditionally to avoid wrong context due to races from
+  ;; simultaneous dialing or aborting (e.g., via `keybaord-quit').
+  (remove-hook 'erc--server-post-connect-hook #'erc--warn-unencrypted)
+  (when (and (process-contact erc-server-process :nowait)
+             (equal erc-session-server erc-default-server)
+             (eql erc-session-port erc-default-port))
+    ;; FIXME use the autoloaded `info' instead of `Info-goto-node' in
+    ;; `erc-button-alist'.
+    (require 'info nil t)
+    (erc-display-error-notice
+     nil (concat "This connection is unencrypted.  Please use `erc-tls'"
+                 " from now on.  See Info:\"(erc) connecting\" for more."))))
+
 ;;;###autoload
 (defun erc-select-read-args ()
   "Prompt the user for values of nick, server, port, and password."
@@ -2171,10 +2188,7 @@ parameters SERVER and NICK."
          ;; For legacy reasons, also accept a URL without a scheme.
          (url (url-generic-parse-url (erc--ensure-url input)))
          (server (url-host url))
-         (sp (and (or (string-suffix-p "s" (url-type url))
-                      (and (equal server erc-default-server)
-                           (not (string-prefix-p "irc://" input))))
-                  'ircs-u))
+         (sp (and (string-suffix-p "s" (url-type url)) erc-default-port-tls))
          (port (or (url-portspec url)
                    (erc-compute-port
                     (let ((d (erc-compute-port sp))) ; may be a string
@@ -2187,13 +2201,19 @@ parameters SERVER and NICK."
                    (let ((d (erc-compute-nick)))
                      (read-string (format "Nickname (default is %S): " d)
                                   nil 'erc-nick-history-list d))))
-         (passwd (or (url-password url)
-                     (if erc-prompt-for-password
-                         (read-passwd "Server password (optional): ")
-                       (with-suppressed-warnings ((obsolete erc-password))
-                         erc-password)))))
+         (passwd (let* ((p (with-suppressed-warnings ((obsolete erc-password))
+                             (or (url-password url) erc-password)))
+                        (m (if p
+                               (format "Server password (default is %S): " p)
+                             "Server password (optional): ")))
+                   (if erc-prompt-for-password (read-passwd m nil p) p))))
     (when (and passwd (string= "" passwd))
       (setq passwd nil))
+    (when (and (equal server erc-default-server)
+               (eql port erc-default-port)
+               (not (eql port erc-default-port-tls)) ; not `erc-tls'
+               (not (string-prefix-p "irc://" input))) ; not yanked URL
+      (add-hook 'erc--server-post-connect-hook #'erc--warn-unencrypted))
     (list :server server :port port :nick nick :password passwd)))
 
 ;;;###autoload
@@ -6012,13 +6032,14 @@ See also `erc-downcase'."
 ;; While `erc-default-target' happens to return nil in channel buffers
 ;; you've parted or from which you've been kicked, using it to detect
 ;; whether a channel is currently joined may become unreliable in the
-;; future.  For now, new code should consider using
+;; future.  For now, third-party code can use
 ;;
 ;;   (erc-get-channel-user (erc-current-nick))
 ;;
-;; and expect a nicer option eventually.  For retrieving a target
-;; regardless of subscription or connection status, use replacements
-;; based on `erc--target' instead.  See also `erc--default-target'.
+;; A predicate may be provided eventually.  For retrieving a target's
+;; name regardless of subscription or connection status, new library
+;; code should use `erc--default-target'.  Third-party code should
+;; continue to use `erc-default-target'.
 
 (defun erc-default-target ()
   "Return the current default target (as a character string) or nil if none."
@@ -6760,7 +6781,8 @@ This should be a string with substitution variables 
recognized by
 If the name of the network is not available, then use the
 shortened server name instead."
   (if-let ((erc--target)
-           (name (if-let ((esid (erc-networks--id-symbol erc-networks--id)))
+           (name (if-let ((erc-networks--id)
+                          (esid (erc-networks--id-symbol erc-networks--id)))
                      (symbol-name esid)
                    (erc-shorten-server-name (or erc-server-announced-name
                                                 erc-session-server)))))
diff --git a/lisp/eshell/em-alias.el b/lisp/eshell/em-alias.el
index 9b75c7a1237..841982c3425 100644
--- a/lisp/eshell/em-alias.el
+++ b/lisp/eshell/em-alias.el
@@ -1,6 +1,6 @@
 ;;; em-alias.el --- creation and management of command aliases  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-banner.el b/lisp/eshell/em-banner.el
index a2f8a58220c..8bc497bdeb3 100644
--- a/lisp/eshell/em-banner.el
+++ b/lisp/eshell/em-banner.el
@@ -1,6 +1,6 @@
 ;;; em-banner.el --- sample module that displays a login banner  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-basic.el b/lisp/eshell/em-basic.el
index 448b6787ee7..dfbe4db0896 100644
--- a/lisp/eshell/em-basic.el
+++ b/lisp/eshell/em-basic.el
@@ -1,6 +1,6 @@
 ;;; em-basic.el --- basic shell builtin commands  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-cmpl.el b/lisp/eshell/em-cmpl.el
index 2c721eb9e31..94ec5e8f1db 100644
--- a/lisp/eshell/em-cmpl.el
+++ b/lisp/eshell/em-cmpl.el
@@ -1,6 +1,6 @@
 ;;; em-cmpl.el --- completion using the TAB key  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-dirs.el b/lisp/eshell/em-dirs.el
index 00880b9f281..0d02b64b084 100644
--- a/lisp/eshell/em-dirs.el
+++ b/lisp/eshell/em-dirs.el
@@ -1,6 +1,6 @@
 ;;; em-dirs.el --- directory navigation commands  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-elecslash.el b/lisp/eshell/em-elecslash.el
index 091acb9a861..80bc0f031ef 100644
--- a/lisp/eshell/em-elecslash.el
+++ b/lisp/eshell/em-elecslash.el
@@ -1,6 +1,6 @@
 ;;; em-elecslash.el --- electric forward slashes  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Sean Whitton <spwhitton@spwhitton.name>
 
@@ -74,8 +74,9 @@ insertion."
           (command (save-excursion
                      (eshell-bol)
                      (skip-syntax-forward " ")
-                     (thing-at-point 'sexp))))
-      (if (and (file-remote-p default-directory)
+                     (thing-at-point 'sexp)))
+          (prefix (file-remote-p default-directory)))
+      (if (and prefix
                ;; We can't formally parse the input.  But if there is
                ;; one of these operators behind us, then looking at
                ;; the first command would not be sensible.  So be
@@ -93,14 +94,9 @@ insertion."
                                 (or eshell-prefer-lisp-functions
                                     (not (eshell-search-path command))))))))
          (let ((map (make-sparse-keymap))
-               (start (if tilde-before (1- (point)) (point)))
-                (localname
-                 (tramp-file-name-localname
-                  (tramp-dissect-file-name default-directory))))
+               (start (if tilde-before (1- (point)) (point))))
            (when tilde-before (delete-char -1))
-           (insert
-             (substring default-directory 0
-                        (string-search localname default-directory)))
+           (insert prefix)
            (unless tilde-before (insert "/"))
            ;; Typing a second slash undoes the insertion, for when
            ;; you really do want to type a local absolute file name.
diff --git a/lisp/eshell/em-extpipe.el b/lisp/eshell/em-extpipe.el
index 7d81f27a18f..9078c44ed9f 100644
--- a/lisp/eshell/em-extpipe.el
+++ b/lisp/eshell/em-extpipe.el
@@ -1,6 +1,6 @@
 ;;; em-extpipe.el --- external shell pipelines  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Sean Whitton <spwhitton@spwhitton.name>
 
diff --git a/lisp/eshell/em-glob.el b/lisp/eshell/em-glob.el
index 9722aeae18e..716f5c32b87 100644
--- a/lisp/eshell/em-glob.el
+++ b/lisp/eshell/em-glob.el
@@ -1,6 +1,6 @@
 ;;; em-glob.el --- extended file name globbing  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-hist.el b/lisp/eshell/em-hist.el
index 1db239b9f72..05e9598f530 100644
--- a/lisp/eshell/em-hist.el
+++ b/lisp/eshell/em-hist.el
@@ -1,6 +1,6 @@
 ;;; em-hist.el --- history list management  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-ls.el b/lisp/eshell/em-ls.el
index bebb0d81b5b..7e2a7578ef9 100644
--- a/lisp/eshell/em-ls.el
+++ b/lisp/eshell/em-ls.el
@@ -1,6 +1,6 @@
 ;;; em-ls.el --- implementation of ls in Lisp  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-pred.el b/lisp/eshell/em-pred.el
index b4ef154f8c3..14fa27aba06 100644
--- a/lisp/eshell/em-pred.el
+++ b/lisp/eshell/em-pred.el
@@ -1,6 +1,6 @@
 ;;; em-pred.el --- argument predicates and modifiers (ala zsh)  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-prompt.el b/lisp/eshell/em-prompt.el
index a8744de1dba..575b5a595f1 100644
--- a/lisp/eshell/em-prompt.el
+++ b/lisp/eshell/em-prompt.el
@@ -1,6 +1,6 @@
 ;;; em-prompt.el --- command prompts  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -102,12 +102,10 @@ arriving, or after."
 
 (defvar-keymap eshell-prompt-repeat-map
   :doc "Keymap to repeat eshell-prompt key sequences.  Used in `repeat-mode'."
+  :repeat t
   "C-n" #'eshell-next-prompt
   "C-p" #'eshell-previous-prompt)
 
-(put #'eshell-next-prompt 'repeat-map 'eshell-prompt-repeat-map)
-(put #'eshell-previous-prompt 'repeat-map 'eshell-prompt-repeat-map)
-
 ;;; Functions:
 
 (define-minor-mode eshell-prompt-mode
diff --git a/lisp/eshell/em-rebind.el b/lisp/eshell/em-rebind.el
index 2b56c9e8444..2c95d4fdffb 100644
--- a/lisp/eshell/em-rebind.el
+++ b/lisp/eshell/em-rebind.el
@@ -1,6 +1,6 @@
 ;;; em-rebind.el --- rebind keys when point is at current input  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-script.el b/lisp/eshell/em-script.el
index 06ddda1424f..55a05076342 100644
--- a/lisp/eshell/em-script.el
+++ b/lisp/eshell/em-script.el
@@ -1,6 +1,6 @@
 ;;; em-script.el --- Eshell script files  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-smart.el b/lisp/eshell/em-smart.el
index c52ce318997..ca04c429785 100644
--- a/lisp/eshell/em-smart.el
+++ b/lisp/eshell/em-smart.el
@@ -1,6 +1,6 @@
 ;;; em-smart.el --- smart display of output  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-term.el b/lisp/eshell/em-term.el
index 6811e703137..a4d777e4a0d 100644
--- a/lisp/eshell/em-term.el
+++ b/lisp/eshell/em-term.el
@@ -1,6 +1,6 @@
 ;;; em-term.el --- running visual commands  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-tramp.el b/lisp/eshell/em-tramp.el
index 499deaa7fc5..13dd62e1617 100644
--- a/lisp/eshell/em-tramp.el
+++ b/lisp/eshell/em-tramp.el
@@ -1,6 +1,6 @@
 ;;; em-tramp.el --- Eshell features that require Tramp  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Aidan Gauland <aidalgol@no8wireless.co.nz>
 
@@ -30,8 +30,9 @@
 
 (eval-when-compile
   (require 'esh-mode)
-  (require 'eshell)
-  (require 'tramp))
+  (require 'eshell))
+
+(require 'tramp)
 
 ;; There are no items in this custom group, but eshell modules (ab)use
 ;; custom groups.
diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el
index 3f7ec618a33..d550910f4f0 100644
--- a/lisp/eshell/em-unix.el
+++ b/lisp/eshell/em-unix.el
@@ -1,6 +1,6 @@
 ;;; em-unix.el --- UNIX command aliases  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-xtra.el b/lisp/eshell/em-xtra.el
index 2583738d55b..defaa7b2887 100644
--- a/lisp/eshell/em-xtra.el
+++ b/lisp/eshell/em-xtra.el
@@ -1,6 +1,6 @@
 ;;; em-xtra.el --- extra alias functions  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/esh-arg.el b/lisp/eshell/esh-arg.el
index 87121196715..c17a8fb8c4f 100644
--- a/lisp/eshell/esh-arg.el
+++ b/lisp/eshell/esh-arg.el
@@ -1,6 +1,6 @@
 ;;; esh-arg.el --- argument processing  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el
index 1fb84991120..99c3d7f627d 100644
--- a/lisp/eshell/esh-cmd.el
+++ b/lisp/eshell/esh-cmd.el
@@ -1,6 +1,6 @@
 ;;; esh-cmd.el --- command invocation  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -418,8 +418,11 @@ hooks should be run before and after the command."
           (eshell-separate-commands terms "[&;]" nil 'eshell--sep-terms))))
     (let ((cmd commands))
       (while cmd
-       (if (cdr cmd)
-           (setcar cmd `(eshell-commands ,(car cmd))))
+        ;; Copy I/O handles so each full statement can manipulate them
+        ;; if they like.  Steal the handles for the last command in
+        ;; the list; we won't use the originals again anyway.
+        (setcar cmd `(eshell-with-copied-handles
+                      ,(car cmd) ,(not (cdr cmd))))
        (setq cmd (cdr cmd))))
     (if toplevel
        `(eshell-commands (progn
@@ -788,16 +791,17 @@ this grossness will be made to disappear by using 
`call/cc'..."
 (defvar eshell-output-handle)           ;Defined in esh-io.el.
 (defvar eshell-error-handle)            ;Defined in esh-io.el.
 
-(defmacro eshell-copy-handles (object)
-  "Duplicate current I/O handles, so OBJECT works with its own copy."
+(defmacro eshell-with-copied-handles (object &optional steal-p)
+  "Duplicate current I/O handles, so OBJECT works with its own copy.
+If STEAL-P is non-nil, these new handles will be stolen from the
+current ones (see `eshell-duplicate-handles')."
   `(let ((eshell-current-handles
-         (eshell-create-handles
-          (car (aref eshell-current-handles
-                     eshell-output-handle)) nil
-          (car (aref eshell-current-handles
-                     eshell-error-handle)) nil)))
+          (eshell-duplicate-handles eshell-current-handles ,steal-p)))
      ,object))
 
+(define-obsolete-function-alias 'eshell-copy-handles
+  #'eshell-with-copied-handles "30.1")
+
 (defmacro eshell-protect (object)
   "Protect I/O handles, so they aren't get closed after eval'ing OBJECT."
   `(progn
@@ -808,7 +812,7 @@ this grossness will be made to disappear by using 
`call/cc'..."
   "Execute the commands in PIPELINE, connecting each to one another.
 This macro calls itself recursively, with NOTFIRST non-nil."
   (when (setq pipeline (cadr pipeline))
-    `(eshell-copy-handles
+    `(eshell-with-copied-handles
       (progn
        ,(when (cdr pipeline)
           `(let ((nextproc
@@ -833,7 +837,9 @@ This macro calls itself recursively, with NOTFIRST non-nil."
           (let ((proc ,(car pipeline)))
             (set headproc (or proc (symbol-value headproc)))
             (set tailproc (or (symbol-value tailproc) proc))
-            proc))))))
+            proc)))
+      ;; Steal handles if this is the last item in the pipeline.
+      ,(null (cdr pipeline)))))
 
 (defmacro eshell-do-pipelines-synchronously (pipeline)
   "Execute the commands in PIPELINE in sequence synchronously.
@@ -880,11 +886,8 @@ This is used on systems where async subprocesses are not 
supported."
      (progn
        ,(if (fboundp 'make-process)
            `(eshell-do-pipelines ,pipeline)
-         `(let ((tail-handles (eshell-create-handles
-                               (car (aref eshell-current-handles
-                                          ,eshell-output-handle)) nil
-                               (car (aref eshell-current-handles
-                                          ,eshell-error-handle)) nil)))
+          `(let ((tail-handles (eshell-duplicate-handles
+                                eshell-current-handles)))
             (eshell-do-pipelines-synchronously ,pipeline)))
        (eshell-process-identity (cons (symbol-value headproc)
                                       (symbol-value tailproc))))))
@@ -1024,7 +1027,9 @@ produced by `eshell-parse-command'."
       ;; We can just stick the new command at the end of the current
       ;; one, and everything will happen as it should.
       (setcdr (last (cdr eshell-current-command))
-              (list `(let ((here (and (eobp) (point))))
+              (list `(let ((here (and (eobp) (point)))
+                           (eshell-command-body '(nil))
+                           (eshell-test-body '(nil)))
                        ,(and input
                              `(insert-and-inherit ,(concat input "\n")))
                        (if here
diff --git a/lisp/eshell/esh-ext.el b/lisp/eshell/esh-ext.el
index d513d750d9d..f350622e78c 100644
--- a/lisp/eshell/esh-ext.el
+++ b/lisp/eshell/esh-ext.el
@@ -1,6 +1,6 @@
 ;;; esh-ext.el --- commands external to Eshell  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/esh-io.el b/lisp/eshell/esh-io.el
index 4620565f857..4dad4c7429a 100644
--- a/lisp/eshell/esh-io.el
+++ b/lisp/eshell/esh-io.el
@@ -1,6 +1,6 @@
 ;;; esh-io.el --- I/O management  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -116,16 +116,22 @@ from executing while Emacs is redisplaying."
   :group 'eshell-io)
 
 (defcustom eshell-virtual-targets
-  '(("/dev/eshell" eshell-interactive-print nil)
+  '(;; The literal string "/dev/null" is intentional here.  It just
+    ;; provides compatibility so that users can redirect to
+    ;; "/dev/null" no matter the actual value of `null-device'.
+    ("/dev/null" (lambda (_mode) (throw 'eshell-null-device t)) t)
+    ("/dev/eshell" eshell-interactive-print nil)
     ("/dev/kill" (lambda (mode)
-                  (if (eq mode 'overwrite)
-                      (kill-new ""))
-                  'eshell-kill-append) t)
+                   (when (eq mode 'overwrite)
+                     (kill-new ""))
+                   #'eshell-kill-append)
+     t)
     ("/dev/clip" (lambda (mode)
-                  (if (eq mode 'overwrite)
-                      (let ((select-enable-clipboard t))
-                        (kill-new "")))
-                  'eshell-clipboard-append) t))
+                   (when (eq mode 'overwrite)
+                     (let ((select-enable-clipboard t))
+                       (kill-new "")))
+                   #'eshell-clipboard-append)
+     t))
   "Map virtual devices name to Emacs Lisp functions.
 If the user specifies any of the filenames above as a redirection
 target, the function in the second element will be called.
@@ -138,10 +144,8 @@ function.
 
 The output function is then called repeatedly with single strings,
 which represents successive pieces of the output of the command, until nil
-is passed, meaning EOF.
-
-NOTE: /dev/null is handled specially as a virtual target, and should
-not be added to this variable."
+is passed, meaning EOF."
+  :version "30.1"
   :type '(repeat
          (list (string :tag "Target")
                function
@@ -291,25 +295,58 @@ describing the mode, e.g. for using with 
`eshell-get-target'.")
 (defun eshell-create-handles
   (stdout output-mode &optional stderr error-mode)
   "Create a new set of file handles for a command.
-The default location for standard output and standard error will go to
-STDOUT and STDERR, respectively.
-OUTPUT-MODE and ERROR-MODE are either `overwrite', `append' or `insert';
-a nil value of mode defaults to `insert'."
+The default target for standard output and standard error will
+go to STDOUT and STDERR, respectively.  OUTPUT-MODE and
+ERROR-MODE are either `overwrite', `append' or `insert'; a nil
+value of mode defaults to `insert'.
+
+The result is a vector of file handles.  Each handle is of the form:
+
+  ((TARGETS . REF-COUNT) DEFAULT)
+
+TARGETS is a list of destinations for output.  REF-COUNT is the
+number of references to this handle (initially 1); see
+`eshell-protect-handles' and `eshell-close-handles'.  DEFAULT is
+non-nil if handle has its initial default value (always t after
+calling this function)."
   (let* ((handles (make-vector eshell-number-of-handles nil))
-         (output-target (eshell-get-target stdout output-mode))
-         (error-target (if stderr
-                           (eshell-get-target stderr error-mode)
-                         output-target)))
-    (aset handles eshell-output-handle (cons output-target 1))
-    (aset handles eshell-error-handle (cons error-target 1))
+         (output-target
+          (let ((target (eshell-get-target stdout output-mode)))
+            (cons (when target (list target)) 1)))
+         (error-target
+          (if stderr
+              (let ((target (eshell-get-target stderr error-mode)))
+                (cons (when target (list target)) 1))
+            (cl-incf (cdr output-target))
+            output-target)))
+    (aset handles eshell-output-handle (list output-target t))
+    (aset handles eshell-error-handle (list error-target t))
     handles))
 
+(defun eshell-duplicate-handles (handles &optional steal-p)
+  "Create a duplicate of the file handles in HANDLES.
+This uses the targets of each handle in HANDLES, incrementing its
+reference count by one (unless STEAL-P is non-nil).  These
+targets are shared between the original set of handles and the
+new one, so the targets are only closed when the reference count
+drops to 0 (see `eshell-close-handles').
+
+This function also sets the DEFAULT field for each handle to
+t (see `eshell-create-handles').  Unlike the targets, this value
+is not shared with the original handles."
+  (let ((dup-handles (make-vector eshell-number-of-handles nil)))
+    (dotimes (idx eshell-number-of-handles)
+      (when-let ((handle (aref handles idx)))
+        (unless steal-p
+          (cl-incf (cdar handle)))
+        (aset dup-handles idx (list (car handle) t))))
+    dup-handles))
+
 (defun eshell-protect-handles (handles)
   "Protect the handles in HANDLES from a being closed."
   (dotimes (idx eshell-number-of-handles)
-    (when (aref handles idx)
-      (setcdr (aref handles idx)
-              (1+ (cdr (aref handles idx))))))
+    (when-let ((handle (aref handles idx)))
+      (cl-incf (cdar handle))))
   handles)
 
 (defun eshell-close-handles (&optional exit-code result handles)
@@ -327,42 +364,56 @@ the value already set in `eshell-last-command-result'."
   (when result
     (cl-assert (eq (car result) 'quote))
     (setq eshell-last-command-result (cadr result)))
-  (let ((handles (or handles eshell-current-handles)))
+  (let ((handles (or handles eshell-current-handles))
+        (succeeded (= eshell-last-command-status 0)))
     (dotimes (idx eshell-number-of-handles)
-      (when-let ((handle (aref handles idx)))
-        (setcdr handle (1- (cdr handle)))
-       (when (= (cdr handle) 0)
-          (dolist (target (ensure-list (car (aref handles idx))))
-            (eshell-close-target target (= eshell-last-command-status 0)))
-          (setcar handle nil))))))
+      (eshell-close-handle (aref handles idx) succeeded))))
+
+(defun eshell-close-handle (handle status)
+  "Close a single HANDLE, taking refcounts into account.
+This will pass STATUS to each target for the handle, which should
+be a non-nil value on successful termination."
+  (when handle
+    (cl-assert (> (cdar handle) 0)
+               "Attempted to close a handle with 0 references")
+    (when (and (> (cdar handle) 0)
+               (= (cl-decf (cdar handle)) 0))
+      (dolist (target (caar handle))
+        (eshell-close-target target status))
+      (setcar (car handle) nil))))
 
 (defun eshell-set-output-handle (index mode &optional target handles)
   "Set handle INDEX for the current HANDLES to point to TARGET using MODE.
-If HANDLES is nil, use `eshell-current-handles'."
+If HANDLES is nil, use `eshell-current-handles'.
+
+If the handle is currently set to its default value (see
+`eshell-create-handles'), this will overwrite the targets with
+the new target.  Otherwise, it will append the new target to the
+current list of targets."
   (when target
-    (let ((handles (or handles eshell-current-handles)))
-      (if (and (stringp target)
-               (string= target (null-device)))
-          (aset handles index nil)
-        (let ((where (eshell-get-target target mode))
-              (current (car (aref handles index))))
-          (if (listp current)
-              (unless (member where current)
-                (setq current (append current (list where))))
-            (setq current (list where)))
-          (if (not (aref handles index))
-              (aset handles index (cons nil 1)))
-          (setcar (aref handles index) current))))))
+    (let* ((handles (or handles eshell-current-handles))
+           (handle (or (aref handles index)
+                       (aset handles index (list (cons nil 1) nil))))
+           (defaultp (cadr handle)))
+      (when defaultp
+        (cl-decf (cdar handle))
+        (setcar handle (cons nil 1)))
+      (catch 'eshell-null-device
+        (let ((current (caar handle))
+              (where (eshell-get-target target mode)))
+          (unless (member where current)
+            (setcar (car handle) (append current (list where))))))
+      (setcar (cdr handle) nil))))
 
 (defun eshell-copy-output-handle (index index-to-copy &optional handles)
   "Copy the handle INDEX-TO-COPY to INDEX for the current HANDLES.
 If HANDLES is nil, use `eshell-current-handles'."
   (let* ((handles (or handles eshell-current-handles))
          (handle-to-copy (car (aref handles index-to-copy))))
-    (setcar (aref handles index)
-            (if (listp handle-to-copy)
-                (copy-sequence handle-to-copy)
-              handle-to-copy))))
+    (when handle-to-copy
+      (cl-incf (cdr handle-to-copy)))
+    (eshell-close-handle (aref handles index) nil)
+    (setcar (aref handles index) handle-to-copy)))
 
 (defun eshell-set-all-output-handles (mode &optional target handles)
   "Set output and error HANDLES to point to TARGET using MODE.
@@ -493,9 +544,9 @@ INDEX is the handle index to check.  If nil, check
   (let ((handles (or handles eshell-current-handles))
         (index (or index eshell-output-handle)))
     (if (eq index 'all)
-        (and (eq (car (aref handles eshell-output-handle)) t)
-             (eq (car (aref handles eshell-error-handle)) t))
-      (eq (car (aref handles index)) t))))
+        (and (equal (caar (aref handles eshell-output-handle)) '(t))
+             (equal (caar (aref handles eshell-error-handle)) '(t)))
+      (equal (caar (aref handles index)) '(t)))))
 
 (defvar eshell-print-queue nil)
 (defvar eshell-print-queue-count -1)
@@ -602,15 +653,10 @@ Returns what was actually sent, or nil if nothing was 
sent."
 If HANDLE-INDEX is nil, output to `eshell-output-handle'.
 HANDLES is the set of file handles to use; if nil, use
 `eshell-current-handles'."
-  (let ((target (car (aref (or handles eshell-current-handles)
-                          (or handle-index eshell-output-handle)))))
-    (if (listp target)
-        (while target
-         (eshell-output-object-to-target object (car target))
-         (setq target (cdr target)))
-      (eshell-output-object-to-target object target)
-      ;; Explicitly return nil to match the list case above.
-      nil)))
+  (let ((targets (caar (aref (or handles eshell-current-handles)
+                             (or handle-index eshell-output-handle)))))
+    (dolist (target targets)
+      (eshell-output-object-to-target object target))))
 
 (provide 'esh-io)
 ;;; esh-io.el ends here
diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el
index 4357a0e29a0..d80f1d1f390 100644
--- a/lisp/eshell/esh-mode.el
+++ b/lisp/eshell/esh-mode.el
@@ -1,6 +1,6 @@
 ;;; esh-mode.el --- user interface  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -282,12 +282,10 @@ This is used by `eshell-watch-for-password-prompt'."
 
 (defvar-keymap eshell-command-repeat-map
   :doc "Keymap to repeat eshell-command key sequences.  Used in `repeat-mode'."
+  :repeat t
   "C-f" #'eshell-forward-argument
   "C-b" #'eshell-backward-argument)
 
-(put #'eshell-forward-argument 'repeat-map 'eshell-command-repeat-map)
-(put #'eshell-backward-argument 'repeat-map 'eshell-command-repeat-map)
-
 ;;; User Functions:
 
 (defun eshell-kill-buffer-function ()
diff --git a/lisp/eshell/esh-module.el b/lisp/eshell/esh-module.el
index 14e91912d11..651e793ad98 100644
--- a/lisp/eshell/esh-module.el
+++ b/lisp/eshell/esh-module.el
@@ -1,6 +1,6 @@
 ;;; esh-module.el --- Eshell modules  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2000, 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Keywords: processes
diff --git a/lisp/eshell/esh-opt.el b/lisp/eshell/esh-opt.el
index 551317d8339..9253f9a4a7d 100644
--- a/lisp/eshell/esh-opt.el
+++ b/lisp/eshell/esh-opt.el
@@ -1,6 +1,6 @@
 ;;; esh-opt.el --- command options processing  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/esh-proc.el b/lisp/eshell/esh-proc.el
index 950922ea7f8..8a803c67e46 100644
--- a/lisp/eshell/esh-proc.el
+++ b/lisp/eshell/esh-proc.el
@@ -1,6 +1,6 @@
 ;;; esh-proc.el --- process management  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -467,7 +467,7 @@ PROC is the process that's exiting.  STRING is the exit 
message."
                           (if (process-get proc :eshell-busy)
                               (run-at-time 0 nil finish-io)
                             (when data
-                              (ignore-error 'eshell-pipe-broken
+                              (ignore-error eshell-pipe-broken
                                 (eshell-output-object
                                  data index handles)))
                             (eshell-close-handles
diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el
index aceca28befb..544a8a74039 100644
--- a/lisp/eshell/esh-util.el
+++ b/lisp/eshell/esh-util.el
@@ -1,6 +1,6 @@
 ;;; esh-util.el --- general utilities  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el
index 61e9af01a4d..811bb9957cf 100644
--- a/lisp/eshell/esh-var.el
+++ b/lisp/eshell/esh-var.el
@@ -1,6 +1,6 @@
 ;;; esh-var.el --- handling of variables  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -216,7 +216,7 @@ nil.  If SIMPLE-FUNCTION is non-nil, call the function with 
no
 arguments and then pass its return value to `eshell-apply-indices'.
 
 When VALUE is a function, it's read-only by default.  To make it
-writeable, use the (GET . SET) form described above.  If SET is a
+writable, use the (GET . SET) form described above.  If SET is a
 function, it takes two arguments: a list of indices (currently
 always nil, but reserved for future enhancement), and the new
 value to set.
diff --git a/lisp/eshell/eshell.el b/lisp/eshell/eshell.el
index e0c927cad41..7a7ece5cb7c 100644
--- a/lisp/eshell/eshell.el
+++ b/lisp/eshell/eshell.el
@@ -1,6 +1,6 @@
 ;;; eshell.el --- the Emacs command shell  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Version: 2.4.2
diff --git a/lisp/expand.el b/lisp/expand.el
index 44f41c5e1ec..7e0b0b56010 100644
--- a/lisp/expand.el
+++ b/lisp/expand.el
@@ -1,6 +1,6 @@
 ;;; expand.el --- make abbreviations more usable  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1995-1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Frederic Lepied <Frederic.Lepied@sugix.frmug.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/external-completion.el b/lisp/external-completion.el
index e1c3d763142..3f80be1c0a4 100644
--- a/lisp/external-completion.el
+++ b/lisp/external-completion.el
@@ -1,6 +1,6 @@
 ;;; external-completion.el --- Let external tools control completion style  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Version: 0.1
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
diff --git a/lisp/ezimage.el b/lisp/ezimage.el
index ad98c453368..ba3e5b1d369 100644
--- a/lisp/ezimage.el
+++ b/lisp/ezimage.el
@@ -1,6 +1,6 @@
 ;;; ezimage.el --- Generalized Image management  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: file, tags, tools
diff --git a/lisp/face-remap.el b/lisp/face-remap.el
index a6920150941..3ec271b67a4 100644
--- a/lisp/face-remap.el
+++ b/lisp/face-remap.el
@@ -1,6 +1,6 @@
 ;;; face-remap.el --- Functions for managing `face-remapping-alist'  -*- 
lexical-binding: t -*-
 ;;
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
 ;; Keywords: faces, face remapping, display, user commands
diff --git a/lisp/facemenu.el b/lisp/facemenu.el
index b3e01696325..5066bf25c9d 100644
--- a/lisp/facemenu.el
+++ b/lisp/facemenu.el
@@ -1,6 +1,6 @@
 ;;; facemenu.el --- create a face menu for interactively adding fonts to text  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1994-1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <boris@gnu.org>
 ;; Keywords: faces
diff --git a/lisp/faces.el b/lisp/faces.el
index c69339e2fdc..3323eab205a 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -1,6 +1,6 @@
 ;;; faces.el --- Lisp faces -*- lexical-binding: t -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
@@ -47,7 +47,8 @@ the terminal-initialization file to be loaded."
     ("vt400" . "vt200")
     ("vt420" . "vt200")
     ("alacritty" . "xterm")
-    ("foot" . "xterm"))
+    ("foot" . "xterm")
+    ("contour" . "xterm"))
   "Alist of terminal type aliases.
 Entries are of the form (TYPE . ALIAS), where both elements are strings.
 This means to treat a terminal of type TYPE as if it were of type ALIAS."
@@ -689,6 +690,10 @@ be reset to `unspecified' when creating new frames, 
disregarding
 what the FACE's face spec says, call this function with FRAME set to
 t and the ATTRIBUTE's value set to `unspecified'.
 
+Note that the ATTRIBUTE VALUE pairs are evaluated in the order
+they are specified, except that the `:family' and `:foundry'
+attributes are evaluated first.
+
 The following attributes are recognized:
 
 `:family'
diff --git a/lisp/ffap.el b/lisp/ffap.el
index 482ac3764a2..57f5271708b 100644
--- a/lisp/ffap.el
+++ b/lisp/ffap.el
@@ -1,6 +1,6 @@
 ;;; ffap.el --- find file (or url) at point  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Michelangelo Grigni <mic@mathcs.emory.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/filecache.el b/lisp/filecache.el
index 8232357982a..c211a02b2d2 100644
--- a/lisp/filecache.el
+++ b/lisp/filecache.el
@@ -1,6 +1,6 @@
 ;;; filecache.el --- find files using a pre-loaded cache  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1996, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Peter Breton <pbreton@cs.umb.edu>
 ;; Created: Sun Nov 10 1996
diff --git a/lisp/fileloop.el b/lisp/fileloop.el
index b4f6179a939..f58d00d9aa9 100644
--- a/lisp/fileloop.el
+++ b/lisp/fileloop.el
@@ -1,6 +1,6 @@
 ;;; fileloop.el --- Operations on multiple files  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 
diff --git a/lisp/filenotify.el b/lisp/filenotify.el
index 6b13ed0b725..e9f8d4e515d 100644
--- a/lisp/filenotify.el
+++ b/lisp/filenotify.el
@@ -1,6 +1,6 @@
 ;;; filenotify.el --- watch files for changes on disk  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
diff --git a/lisp/files-x.el b/lisp/files-x.el
index 7199db3e444..5fa0129e9d0 100644
--- a/lisp/files-x.el
+++ b/lisp/files-x.el
@@ -1,6 +1,6 @@
 ;;; files-x.el --- extended file handling commands  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <juri@jurta.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/files.el b/lisp/files.el
index f352d3a9a7e..53a8a15a494 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1,6 +1,6 @@
 ;;; files.el --- file input and output commands for Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1985-1987, 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1987, 1992-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Package: emacs
@@ -2850,7 +2850,7 @@ since only a single case-insensitive search through the 
alist is made."
      ("\\.emacs-places\\'" . lisp-data-mode)
      ("\\.el\\'" . emacs-lisp-mode)
      ("Project\\.ede\\'" . emacs-lisp-mode)
-     ("\\.\\(scm\\|stk\\|ss\\|sch\\)\\'" . scheme-mode)
+     ("\\.\\(scm\\|sls\\|sld\\|stk\\|ss\\|sch\\)\\'" . scheme-mode)
      ("\\.l\\'" . lisp-mode)
      ("\\.li?sp\\'" . lisp-mode)
      ("\\.[fF]\\'" . fortran-mode)
@@ -6193,11 +6193,11 @@ instance of such commands."
       (rename-buffer (generate-new-buffer-name base-name))
       (force-mode-line-update))))
 
-(defun files--ensure-directory (mkdir dir)
-  "Use function MKDIR to make directory DIR if it is not already a directory.
+(defun files--ensure-directory (dir)
+  "Make directory DIR if it is not already a directory.
 Return non-nil if DIR is already a directory."
   (condition-case err
-      (funcall mkdir dir)
+      (make-directory-internal dir)
     (error
      (or (file-directory-p dir)
         (signal (car err) (cdr err))))))
@@ -6223,32 +6223,27 @@ Signal an error if unsuccessful."
   ;; If default-directory is a remote directory,
   ;; make sure we find its make-directory handler.
   (setq dir (expand-file-name dir))
-  (let ((mkdir (if-let ((handler (find-file-name-handler dir 'make-directory)))
-                  #'(lambda (dir)
-                      ;; Use 'ignore' since the handler might be designed for
-                      ;; Emacs 28-, so it might return an (undocumented)
-                      ;; non-nil value, whereas the Emacs 29+ convention is
-                      ;; to return nil here.
-                      (ignore (funcall handler 'make-directory dir)))
-                 #'make-directory-internal)))
-    (if (not parents)
-        (funcall mkdir dir)
-      (let ((dir (directory-file-name (expand-file-name dir)))
-            already-dir create-list parent)
-        (while (progn
-                 (setq parent (directory-file-name
-                               (file-name-directory dir)))
-                 (condition-case ()
-                     (ignore (setq already-dir
-                                   (files--ensure-directory mkdir dir)))
-                   (error
-                    ;; Do not loop if root does not exist (Bug#2309).
-                    (not (string= dir parent)))))
-          (setq create-list (cons dir create-list)
-                dir parent))
-        (dolist (dir create-list)
-          (setq already-dir (files--ensure-directory mkdir dir)))
-        already-dir))))
+  (let ((handler (find-file-name-handler dir 'make-directory)))
+    (if handler
+       (funcall handler 'make-directory dir parents)
+      (if (not parents)
+         (make-directory-internal dir)
+       (let ((dir (directory-file-name (expand-file-name dir)))
+             already-dir create-list parent)
+         (while (progn
+                  (setq parent (directory-file-name
+                                (file-name-directory dir)))
+                  (condition-case ()
+                      (ignore (setq already-dir
+                                    (files--ensure-directory dir)))
+                    (error
+                     ;; Do not loop if root does not exist (Bug#2309).
+                     (not (string= dir parent)))))
+           (setq create-list (cons dir create-list)
+                 dir parent))
+         (dolist (dir create-list)
+           (setq already-dir (files--ensure-directory dir)))
+         already-dir)))))
 
 (defun make-empty-file (filename &optional parents)
   "Create an empty file FILENAME.
diff --git a/lisp/filesets.el b/lisp/filesets.el
index 9f07072e787..1b7e6ffa81f 100644
--- a/lisp/filesets.el
+++ b/lisp/filesets.el
@@ -1,6 +1,6 @@
 ;;; filesets.el --- handle group of files  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Thomas Link <sanobast-emacs@yahoo.de>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/find-cmd.el b/lisp/find-cmd.el
index e33a4ee61b7..6e18113f69f 100644
--- a/lisp/find-cmd.el
+++ b/lisp/find-cmd.el
@@ -1,6 +1,6 @@
 ;;; find-cmd.el --- Build a valid find(1) command with sexps  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Philip Jackson <phil@shellarchive.co.uk>
 ;; Version: 0.6
diff --git a/lisp/find-dired.el b/lisp/find-dired.el
index be3d106912a..83bdaba5352 100644
--- a/lisp/find-dired.el
+++ b/lisp/find-dired.el
@@ -1,6 +1,6 @@
 ;;; find-dired.el --- run a `find' command and dired the output  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: Roland McGrath <roland@gnu.org>,
 ;;        Sebastian Kremer <sk@thp.uni-koeln.de>
diff --git a/lisp/find-file.el b/lisp/find-file.el
index 646779fc919..e98ea621d6a 100644
--- a/lisp/find-file.el
+++ b/lisp/find-file.el
@@ -4,7 +4,7 @@
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: c, matching, tools
 
-;; Copyright (C) 1994-1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/find-lisp.el b/lisp/find-lisp.el
index 62b4ef625db..dd91d963c3a 100644
--- a/lisp/find-lisp.el
+++ b/lisp/find-lisp.el
@@ -4,7 +4,7 @@
 ;; Created: Fri Mar 26 1999
 ;; Keywords: unix
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/finder.el b/lisp/finder.el
index 08d20963b46..5aec0149b89 100644
--- a/lisp/finder.el
+++ b/lisp/finder.el
@@ -1,6 +1,6 @@
 ;;; finder.el --- topic & keyword-based code finder  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
 ;; Created: 16 Jun 1992
diff --git a/lisp/flow-ctrl.el b/lisp/flow-ctrl.el
index 3ee33c0d140..31209e48acf 100644
--- a/lisp/flow-ctrl.el
+++ b/lisp/flow-ctrl.el
@@ -1,6 +1,6 @@
 ;;; flow-ctrl.el --- help for lusers on cu(1) or ttys with wired-in ^S/^Q flow 
control  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1990-1991, 1994, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1990-1991, 1994, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Kevin Gallagher
diff --git a/lisp/foldout.el b/lisp/foldout.el
index e00fb40e3ca..5a3afc9508a 100644
--- a/lisp/foldout.el
+++ b/lisp/foldout.el
@@ -1,6 +1,6 @@
 ;;; foldout.el --- folding extensions for outline-mode and outline-minor-mode  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Kevin Broadey <KevinB@bartley.demon.co.uk>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/follow.el b/lisp/follow.el
index c26949985e7..7d64161ca33 100644
--- a/lisp/follow.el
+++ b/lisp/follow.el
@@ -1,6 +1,6 @@
 ;;; follow.el --- synchronize windows showing the same buffer  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1995-1997, 1999, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1995-1997, 1999, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Anders Lindgren
diff --git a/lisp/font-core.el b/lisp/font-core.el
index f70c42bb03f..4056fbdc954 100644
--- a/lisp/font-core.el
+++ b/lisp/font-core.el
@@ -1,6 +1,6 @@
 ;;; font-core.el --- Core interface to font-lock  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: languages, faces
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index bf9a179d6ae..74881a14ccf 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -1,6 +1,6 @@
 ;;; font-lock.el --- Electric font lock mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski
 ;;     Richard Stallman
@@ -2110,7 +2110,7 @@ For example, the declaration and use of fields in a 
struct."
 
 (defface font-lock-punctuation-face
   '((t nil))
-  "Font Lock mode face used to highlight punctuation."
+  "Font Lock mode face used to highlight punctuation characters."
   :group 'font-lock-faces
   :version "29.1")
 
@@ -2122,7 +2122,9 @@ For example, the declaration and use of fields in a 
struct."
 
 (defface font-lock-delimiter-face
   '((t :inherit font-lock-punctuation-face))
-  "Font Lock mode face used to highlight delimiters."
+  "Font Lock mode face used to highlight delimiters.
+What exactly is a delimiter depends on the major mode, but usually
+these are characters like comma, colon, and semi-colon."
   :group 'font-lock-faces
   :version "29.1")
 
@@ -2361,6 +2363,7 @@ in which C preprocessor directives are used, e.g. 
`asm-mode' and
 
 (define-obsolete-function-alias 'font-lock-after-fontify-buffer #'ignore 
"29.1")
 (define-obsolete-function-alias 'font-lock-after-unfontify-buffer #'ignore 
"29.1")
+(define-obsolete-function-alias 'font-lock-fontify-syntactically-region 
#'font-lock-default-fontify-syntactically "29.1")
 
 
 (provide 'font-lock)
diff --git a/lisp/format-spec.el b/lisp/format-spec.el
index 60ff9f90864..2e76ecc0f8f 100644
--- a/lisp/format-spec.el
+++ b/lisp/format-spec.el
@@ -1,6 +1,6 @@
 ;;; format-spec.el --- format arbitrary formatting strings -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: tools
diff --git a/lisp/format.el b/lisp/format.el
index 5cd2d4bfb49..b2dba16659b 100644
--- a/lisp/format.el
+++ b/lisp/format.el
@@ -1,6 +1,6 @@
 ;;; format.el --- read and save files in multiple formats  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1994-1995, 1997, 1999, 2001-2022 Free Software
+;; Copyright (C) 1994-1995, 1997, 1999, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Boris Goldowsky <boris@gnu.org>
diff --git a/lisp/forms.el b/lisp/forms.el
index 97c7cb79d3a..73b95989e5c 100644
--- a/lisp/forms.el
+++ b/lisp/forms.el
@@ -1,6 +1,6 @@
 ;;; forms.el --- Forms mode: edit a file as a form to fill in  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1991-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2023 Free Software Foundation, Inc.
 
 ;; Author: Johan Vromans <jvromans@squirrel.nl>
 
diff --git a/lisp/frame.el b/lisp/frame.el
index e4cd2cd8ae2..322a6f9aa59 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -1,6 +1,6 @@
 ;;; frame.el --- multi-frame management independent of window systems  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1993-1994, 1996-1997, 2000-2022 Free Software
+;; Copyright (C) 1993-1994, 1996-1997, 2000-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/frameset.el b/lisp/frameset.el
index a589f7b5d96..224746bbfe3 100644
--- a/lisp/frameset.el
+++ b/lisp/frameset.el
@@ -1,6 +1,6 @@
 ;;; frameset.el --- save and restore frame and window setup -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Juanma Barranquero <lekktu@gmail.com>
 ;; Keywords: convenience
diff --git a/lisp/fringe.el b/lisp/fringe.el
index 0c88501298f..b5ab4f9f605 100644
--- a/lisp/fringe.el
+++ b/lisp/fringe.el
@@ -1,6 +1,6 @@
 ;;; fringe.el --- fringe setup and control  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/generic-x.el b/lisp/generic-x.el
index bbc90493afe..7e5ae90ff9a 100644
--- a/lisp/generic-x.el
+++ b/lisp/generic-x.el
@@ -1,6 +1,6 @@
 ;;; generic-x.el --- A collection of generic modes  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Peter Breton <pbreton@cs.umb.edu>
 ;; Created: Tue Oct 08 1996
diff --git a/lisp/gnus/ChangeLog.1 b/lisp/gnus/ChangeLog.1
index 002b7bcfff6..2ce954cca99 100644
--- a/lisp/gnus/ChangeLog.1
+++ b/lisp/gnus/ChangeLog.1
@@ -3702,7 +3702,7 @@
        * gnus.el: Quassia Gnus v0.1 is released.
 
 
-  Copyright (C) 1997-2022 Free Software Foundation, Inc.
+  Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/gnus/ChangeLog.2 b/lisp/gnus/ChangeLog.2
index 4ac69b575f5..2d7aeabd8cf 100644
--- a/lisp/gnus/ChangeLog.2
+++ b/lisp/gnus/ChangeLog.2
@@ -8859,7 +8859,7 @@
        signencrypt.
        * mml-sec.el (mml-secure-message-encrypt-pgpmime): Ditto.
        * mml.el (mml-generate-mime-1): Change logic so a part which is
-       both signed & encryped is processed in one operation (rather than
+       both signed & encrypted is processed in one operation (rather than
        two separate ops: sign, then encrypt).
        * mml2015.el (mml2015-gpg-extract-signature-details): Give some
        indication if a message is signed by an expired key.
@@ -18538,7 +18538,7 @@
 
 See ChangeLog.1 for earlier changes.
 
-  Copyright (C) 2000-2002, 2004-2022 Free Software Foundation, Inc.
+  Copyright (C) 2000-2002, 2004-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/gnus/ChangeLog.3 b/lisp/gnus/ChangeLog.3
index 8c1073dc8db..d0b195e5f13 100644
--- a/lisp/gnus/ChangeLog.3
+++ b/lisp/gnus/ChangeLog.3
@@ -11763,7 +11763,7 @@
 2010-08-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus-start.el (gnus-dribble-read-file): Ensure that the directory
-       where the dribbel file lives exists.
+       where the dribble file lives exists.
 
        * message.el (message-send-mail-partially-limit): Change the default to
        nil, since most people don't want this.
@@ -17348,7 +17348,7 @@
        * rfc2047.el (rfc2047-quote-special-characters-in-quoted-strings):
        New function.
        (rfc2047-encode-message-header, rfc2047-encode-region): Use it.
-       (rfc2047-strip-backslashes-in-quoted-strings): New fnction.
+       (rfc2047-strip-backslashes-in-quoted-strings): New function.
        (rfc2047-decode-region): Use it; add optional argument `address-mime'.
        (rfc2047-decode-string): Ditto.
        (rfc2047-decode-address-region): New function.
@@ -26326,7 +26326,7 @@
 
 See ChangeLog.2 for earlier changes.
 
-  Copyright (C) 2004-2022 Free Software Foundation, Inc.
+  Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/gnus/canlock.el b/lisp/gnus/canlock.el
index 71ed015e2ca..2eb5e13df9a 100644
--- a/lisp/gnus/canlock.el
+++ b/lisp/gnus/canlock.el
@@ -1,6 +1,6 @@
 ;;; canlock.el --- functions for Cancel-Lock feature  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1998-1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Katsumi Yamaoka <yamaoka@jpl.org>
 ;; Keywords: news, cancel-lock, hmac, sha1, rfc2104
diff --git a/lisp/gnus/deuglify.el b/lisp/gnus/deuglify.el
index 41fc2d83ac3..2c75d5b7873 100644
--- a/lisp/gnus/deuglify.el
+++ b/lisp/gnus/deuglify.el
@@ -1,6 +1,6 @@
 ;;; deuglify.el --- deuglify broken Outlook (Express) articles  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Raymond Scholz <rscholz@zonix.de>
 ;;         Thomas Steffen
diff --git a/lisp/gnus/gmm-utils.el b/lisp/gnus/gmm-utils.el
index fc18d8a1c51..2fc89681ba5 100644
--- a/lisp/gnus/gmm-utils.el
+++ b/lisp/gnus/gmm-utils.el
@@ -1,6 +1,6 @@
 ;;; gmm-utils.el --- Utility functions for Gnus, Message and MML  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Reiner Steib <reiner.steib@gmx.de>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el
index e1c7bcb467d..db205c5b657 100644
--- a/lisp/gnus/gnus-agent.el
+++ b/lisp/gnus/gnus-agent.el
@@ -1,6 +1,6 @@
 ;;; gnus-agent.el --- unplugged support for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index 75ea34e1352..ce7a4488a7f 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -1,6 +1,6 @@
 ;;; gnus-art.el --- article mode commands for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-async.el b/lisp/gnus/gnus-async.el
index a1dc2b46e6b..14295f09be9 100644
--- a/lisp/gnus/gnus-async.el
+++ b/lisp/gnus/gnus-async.el
@@ -1,6 +1,6 @@
 ;;; gnus-async.el --- asynchronous support for Gnus  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-bcklg.el b/lisp/gnus/gnus-bcklg.el
index 173d2f0633a..2c338ccd145 100644
--- a/lisp/gnus/gnus-bcklg.el
+++ b/lisp/gnus/gnus-bcklg.el
@@ -1,6 +1,6 @@
 ;;; gnus-bcklg.el --- backlog functions for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-bookmark.el b/lisp/gnus/gnus-bookmark.el
index 29d963984b2..1a926619e14 100644
--- a/lisp/gnus/gnus-bookmark.el
+++ b/lisp/gnus/gnus-bookmark.el
@@ -1,6 +1,6 @@
 ;;; gnus-bookmark.el --- Bookmarks in Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Bastien Guerry <bzg AT altern DOT org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-cache.el b/lisp/gnus/gnus-cache.el
index 13c9c0130e0..13be21630ec 100644
--- a/lisp/gnus/gnus-cache.el
+++ b/lisp/gnus/gnus-cache.el
@@ -1,6 +1,6 @@
 ;;; gnus-cache.el --- cache interface for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-cite.el b/lisp/gnus/gnus-cite.el
index e344b071bfd..d9071491ed4 100644
--- a/lisp/gnus/gnus-cite.el
+++ b/lisp/gnus/gnus-cite.el
@@ -1,6 +1,6 @@
 ;;; gnus-cite.el --- parse citations in articles for Gnus  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 
diff --git a/lisp/gnus/gnus-cloud.el b/lisp/gnus/gnus-cloud.el
index 0e38fc0680f..ae4c4cc0d71 100644
--- a/lisp/gnus/gnus-cloud.el
+++ b/lisp/gnus/gnus-cloud.el
@@ -1,6 +1,6 @@
 ;;; gnus-cloud.el --- storing and retrieving data via IMAP  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: mail
diff --git a/lisp/gnus/gnus-cus.el b/lisp/gnus/gnus-cus.el
index 5a0cf77a32a..9225f15b7e1 100644
--- a/lisp/gnus/gnus-cus.el
+++ b/lisp/gnus/gnus-cus.el
@@ -1,6 +1,6 @@
 ;;; gnus-cus.el --- customization commands for Gnus  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1996, 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-dbus.el b/lisp/gnus/gnus-dbus.el
index 15d0e6e191b..f6ad48f9069 100644
--- a/lisp/gnus/gnus-dbus.el
+++ b/lisp/gnus/gnus-dbus.el
@@ -1,6 +1,6 @@
 ;;; gnus-dbus.el --- DBUS integration for Gnus       -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Abrahamsen <eric@ericabrahamsen.net>
 
diff --git a/lisp/gnus/gnus-delay.el b/lisp/gnus/gnus-delay.el
index 1b54344e12b..07bed67ae0e 100644
--- a/lisp/gnus/gnus-delay.el
+++ b/lisp/gnus/gnus-delay.el
@@ -1,6 +1,6 @@
 ;;; gnus-delay.el --- Delayed posting of articles  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
 ;; Keywords: mail, news, extensions
diff --git a/lisp/gnus/gnus-demon.el b/lisp/gnus/gnus-demon.el
index f6cfd727f78..de6c167a1fc 100644
--- a/lisp/gnus/gnus-demon.el
+++ b/lisp/gnus/gnus-demon.el
@@ -1,6 +1,6 @@
 ;;; gnus-demon.el --- daemonic Gnus behavior  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-diary.el b/lisp/gnus/gnus-diary.el
index 3c57d7b1124..4cb1182117d 100644
--- a/lisp/gnus/gnus-diary.el
+++ b/lisp/gnus/gnus-diary.el
@@ -1,6 +1,6 @@
 ;;; gnus-diary.el --- Wrapper around the NNDiary Gnus back end  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author:        Didier Verna <didier@didierverna.net>
 ;; Created:       Tue Jul 20 10:42:55 1999
diff --git a/lisp/gnus/gnus-dired.el b/lisp/gnus/gnus-dired.el
index 3d8882b1a55..b146b51430a 100644
--- a/lisp/gnus/gnus-dired.el
+++ b/lisp/gnus/gnus-dired.el
@@ -1,6 +1,6 @@
 ;;; gnus-dired.el --- utility functions where gnus and dired meet  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Authors: Benjamin Rutt <brutt@bloomington.in.us>,
 ;;          Shenghuo Zhu <zsh@cs.rochester.edu>
diff --git a/lisp/gnus/gnus-draft.el b/lisp/gnus/gnus-draft.el
index e38deefe2aa..76aa5647a3d 100644
--- a/lisp/gnus/gnus-draft.el
+++ b/lisp/gnus/gnus-draft.el
@@ -1,6 +1,6 @@
 ;;; gnus-draft.el --- draft message support for Gnus  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-dup.el b/lisp/gnus/gnus-dup.el
index 4bd2a4640a6..8e31a1762b0 100644
--- a/lisp/gnus/gnus-dup.el
+++ b/lisp/gnus/gnus-dup.el
@@ -1,6 +1,6 @@
 ;;; gnus-dup.el --- suppression of duplicate articles in Gnus  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-eform.el b/lisp/gnus/gnus-eform.el
index 96f515119dc..958d819048f 100644
--- a/lisp/gnus/gnus-eform.el
+++ b/lisp/gnus/gnus-eform.el
@@ -1,6 +1,6 @@
 ;;; gnus-eform.el --- a mode for editing forms for Gnus  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-fun.el b/lisp/gnus/gnus-fun.el
index 04028371871..fc934ab142e 100644
--- a/lisp/gnus/gnus-fun.el
+++ b/lisp/gnus/gnus-fun.el
@@ -1,6 +1,6 @@
 ;;; gnus-fun.el --- various frivolous extension functions to Gnus  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-gravatar.el b/lisp/gnus/gnus-gravatar.el
index 93b18f95555..cdfd85e9831 100644
--- a/lisp/gnus/gnus-gravatar.el
+++ b/lisp/gnus/gnus-gravatar.el
@@ -1,6 +1,6 @@
 ;;; gnus-gravatar.el --- Gnus Gravatar support -*- lexical-binding: t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <julien@danjou.info>
 ;; Keywords: multimedia, news
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index c7ec65da79a..070d1223e2c 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -1,6 +1,6 @@
 ;;; gnus-group.el --- group mode commands for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-html.el b/lisp/gnus/gnus-html.el
index 87f3ee63623..829e4cf0099 100644
--- a/lisp/gnus/gnus-html.el
+++ b/lisp/gnus/gnus-html.el
@@ -1,6 +1,6 @@
 ;;; gnus-html.el --- Render HTML in a buffer.  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: html, web
diff --git a/lisp/gnus/gnus-icalendar.el b/lisp/gnus/gnus-icalendar.el
index f3665c3f1a4..0d776cd1bca 100644
--- a/lisp/gnus/gnus-icalendar.el
+++ b/lisp/gnus/gnus-icalendar.el
@@ -1,6 +1,6 @@
 ;;; gnus-icalendar.el --- reply to iCalendar meeting requests  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Jan Tatarik <Jan.Tatarik@gmail.com>
 ;; Keywords: mail, icalendar, org
diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el
index a85510ba91e..49238e62bea 100644
--- a/lisp/gnus/gnus-int.el
+++ b/lisp/gnus/gnus-int.el
@@ -1,6 +1,6 @@
 ;;; gnus-int.el --- backend interface functions for Gnus  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-kill.el b/lisp/gnus/gnus-kill.el
index bc49f8385ea..5f96f002a77 100644
--- a/lisp/gnus/gnus-kill.el
+++ b/lisp/gnus/gnus-kill.el
@@ -1,6 +1,6 @@
 ;;; gnus-kill.el --- kill commands for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
diff --git a/lisp/gnus/gnus-logic.el b/lisp/gnus/gnus-logic.el
index c1b559ba6f4..628d2bd0958 100644
--- a/lisp/gnus/gnus-logic.el
+++ b/lisp/gnus/gnus-logic.el
@@ -1,6 +1,6 @@
 ;;; gnus-logic.el --- advanced scoring code for Gnus  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-mh.el b/lisp/gnus/gnus-mh.el
index bfe22be45fd..59e8947928f 100644
--- a/lisp/gnus/gnus-mh.el
+++ b/lisp/gnus/gnus-mh.el
@@ -1,6 +1,6 @@
 ;;; gnus-mh.el --- mh-e interface for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
diff --git a/lisp/gnus/gnus-ml.el b/lisp/gnus/gnus-ml.el
index 211980aa9e3..59c3e60c6e3 100644
--- a/lisp/gnus/gnus-ml.el
+++ b/lisp/gnus/gnus-ml.el
@@ -1,6 +1,6 @@
 ;;; gnus-ml.el --- Mailing list minor mode for Gnus  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Julien Gilles <jgilles@free.fr>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/gnus-mlspl.el b/lisp/gnus/gnus-mlspl.el
index 1223e381044..9fc065fe756 100644
--- a/lisp/gnus/gnus-mlspl.el
+++ b/lisp/gnus/gnus-mlspl.el
@@ -1,6 +1,6 @@
 ;;; gnus-mlspl.el --- a group params-based mail splitting mechanism  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Alexandre Oliva <oliva@lsd.ic.unicamp.br>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el
index 3fc5ce2408a..0439bf0d59b 100644
--- a/lisp/gnus/gnus-msg.el
+++ b/lisp/gnus/gnus-msg.el
@@ -1,6 +1,6 @@
 ;;; gnus-msg.el --- mail and post interface for Gnus  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
diff --git a/lisp/gnus/gnus-notifications.el b/lisp/gnus/gnus-notifications.el
index ec3892c991c..5e5b4a31e9e 100644
--- a/lisp/gnus/gnus-notifications.el
+++ b/lisp/gnus/gnus-notifications.el
@@ -1,6 +1,6 @@
 ;;; gnus-notifications.el --- Send notification on new message in Gnus  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <julien@danjou.info>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-picon.el b/lisp/gnus/gnus-picon.el
index 012ac9d556f..562c2b7423f 100644
--- a/lisp/gnus/gnus-picon.el
+++ b/lisp/gnus/gnus-picon.el
@@ -1,6 +1,6 @@
 ;;; gnus-picon.el --- displaying pretty icons in Gnus  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news xpm annotation glyph faces
diff --git a/lisp/gnus/gnus-range.el b/lisp/gnus/gnus-range.el
index 2b9d7fac1db..285018bc642 100644
--- a/lisp/gnus/gnus-range.el
+++ b/lisp/gnus/gnus-range.el
@@ -1,6 +1,6 @@
 ;;; gnus-range.el --- range and sequence functions for Gnus  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index cf5ca628cff..d9834031b80 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -1,6 +1,6 @@
 ;;; gnus-registry.el --- article registry for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <tzz@lifelogs.com>
 ;; Keywords: news registry
@@ -394,7 +394,7 @@ This is not required after changing 
`gnus-registry-cache-file'."
             (with-no-warnings
               (eieio-persistent-read file 'registry-db))
           ;; Older EIEIO versions do not check the class name.
-          ('wrong-number-of-arguments
+          (wrong-number-of-arguments
            (eieio-persistent-read file)))))
   (gnus-message 5 "Reading Gnus registry from %s...done" file))
 
diff --git a/lisp/gnus/gnus-rfc1843.el b/lisp/gnus/gnus-rfc1843.el
index da1afb672ae..e50f735dcb7 100644
--- a/lisp/gnus/gnus-rfc1843.el
+++ b/lisp/gnus/gnus-rfc1843.el
@@ -1,6 +1,6 @@
 ;;; gnus-rfc1843.el --- HZ (rfc1843) decoding interface functions for Gnus  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: news HZ HZ+ mail i18n
diff --git a/lisp/gnus/gnus-rmail.el b/lisp/gnus/gnus-rmail.el
index 15ead1add41..55706e80565 100644
--- a/lisp/gnus/gnus-rmail.el
+++ b/lisp/gnus/gnus-rmail.el
@@ -1,6 +1,6 @@
 ;;; gnus-rmail.el --- Saving to rmail/babyl files  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/gnus/gnus-salt.el b/lisp/gnus/gnus-salt.el
index 6b7958dcb91..853c3f6d8ac 100644
--- a/lisp/gnus/gnus-salt.el
+++ b/lisp/gnus/gnus-salt.el
@@ -1,6 +1,6 @@
 ;;; gnus-salt.el --- alternate summary mode interfaces for Gnus  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-score.el b/lisp/gnus/gnus-score.el
index 5f49c280072..05459ffae88 100644
--- a/lisp/gnus/gnus-score.el
+++ b/lisp/gnus/gnus-score.el
@@ -1,6 +1,6 @@
 ;;; gnus-score.el --- scoring code for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <amanda@iesd.auc.dk>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
diff --git a/lisp/gnus/gnus-search.el b/lisp/gnus/gnus-search.el
index 142070e4665..27c71fa6c6a 100644
--- a/lisp/gnus/gnus-search.el
+++ b/lisp/gnus/gnus-search.el
@@ -1,6 +1,6 @@
 ;;; gnus-search.el --- Search facilities for Gnus    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Abrahamsen <eric@ericabrahamsen.net>
 
diff --git a/lisp/gnus/gnus-sieve.el b/lisp/gnus/gnus-sieve.el
index 2d8552d42d6..c7182859282 100644
--- a/lisp/gnus/gnus-sieve.el
+++ b/lisp/gnus/gnus-sieve.el
@@ -1,6 +1,6 @@
 ;;; gnus-sieve.el --- Utilities to manage sieve scripts for Gnus  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: NAGY Andras <nagya@inf.elte.hu>,
 ;;     Simon Josefsson <simon@josefsson.org>
diff --git a/lisp/gnus/gnus-spec.el b/lisp/gnus/gnus-spec.el
index 984774dc6a3..a58ad1fc128 100644
--- a/lisp/gnus/gnus-spec.el
+++ b/lisp/gnus/gnus-spec.el
@@ -1,6 +1,6 @@
 ;;; gnus-spec.el --- format spec functions for Gnus  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el
index 315381a6dd8..7dd237bce4d 100644
--- a/lisp/gnus/gnus-srvr.el
+++ b/lisp/gnus/gnus-srvr.el
@@ -1,6 +1,6 @@
 ;;; gnus-srvr.el --- virtual server support for Gnus  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index a4962f9d5f0..d59b5b58ceb 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -1,6 +1,6 @@
 ;;; gnus-start.el --- startup functions for Gnus -*- lexical-binding:t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 18ba55a4391..0e81f95cd15 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -1,6 +1,6 @@
 ;;; gnus-sum.el --- summary mode commands for Gnus  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-topic.el b/lisp/gnus/gnus-topic.el
index 1acbe0bc938..f41c457ecbc 100644
--- a/lisp/gnus/gnus-topic.el
+++ b/lisp/gnus/gnus-topic.el
@@ -1,6 +1,6 @@
 ;;; gnus-topic.el --- a folding minor mode for Gnus group buffers  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Ilja Weis <kult@uni-paderborn.de>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
diff --git a/lisp/gnus/gnus-undo.el b/lisp/gnus/gnus-undo.el
index 8c2be7b07e4..e19a7b78363 100644
--- a/lisp/gnus/gnus-undo.el
+++ b/lisp/gnus/gnus-undo.el
@@ -1,6 +1,6 @@
 ;;; gnus-undo.el --- minor mode for undoing in Gnus  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el
index 95c9539593c..4b5bc69894b 100644
--- a/lisp/gnus/gnus-util.el
+++ b/lisp/gnus/gnus-util.el
@@ -1,6 +1,6 @@
 ;;; gnus-util.el --- utility functions for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus-uu.el b/lisp/gnus/gnus-uu.el
index 654cc1cc51a..1846f05af2d 100644
--- a/lisp/gnus/gnus-uu.el
+++ b/lisp/gnus/gnus-uu.el
@@ -1,6 +1,6 @@
 ;;; gnus-uu.el --- extract (uu)encoded files in Gnus  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1985-1987, 1993-1998, 2000-2022 Free Software
+;; Copyright (C) 1985-1987, 1993-1998, 2000-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
diff --git a/lisp/gnus/gnus-vm.el b/lisp/gnus/gnus-vm.el
index 5641442ed20..9d83b974719 100644
--- a/lisp/gnus/gnus-vm.el
+++ b/lisp/gnus/gnus-vm.el
@@ -1,6 +1,6 @@
 ;;; gnus-vm.el --- vm interface for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Per Persson <pp@gnu.ai.mit.edu>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/gnus-win.el b/lisp/gnus/gnus-win.el
index 88d24cf0f3c..9d8b34aef29 100644
--- a/lisp/gnus/gnus-win.el
+++ b/lisp/gnus/gnus-win.el
@@ -1,6 +1,6 @@
 ;;; gnus-win.el --- window configuration functions for Gnus  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index 778a46dab37..efab58437e9 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -1,6 +1,6 @@
 ;;; gnus.el --- a newsreader for GNU Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1987-1990, 1993-1998, 2000-2022 Free Software
+;; Copyright (C) 1987-1990, 1993-1998, 2000-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
diff --git a/lisp/gnus/gssapi.el b/lisp/gnus/gssapi.el
index 6ace5f12ca0..beb9ba41e11 100644
--- a/lisp/gnus/gssapi.el
+++ b/lisp/gnus/gssapi.el
@@ -1,6 +1,6 @@
 ;;; gssapi.el --- GSSAPI/Kerberos 5 interface for Emacs  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;;         Lars Magne Ingebrigtsen <larsi@gnus.org>
diff --git a/lisp/gnus/legacy-gnus-agent.el b/lisp/gnus/legacy-gnus-agent.el
index 7866543564f..bd95c5137f5 100644
--- a/lisp/gnus/legacy-gnus-agent.el
+++ b/lisp/gnus/legacy-gnus-agent.el
@@ -1,6 +1,6 @@
 ;;; legacy-gnus-agent.el --- Legacy unplugged support for Gnus  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Kevin Greiner <kgreiner@xpediantsolutions.com>
 ;; Keywords: news
diff --git a/lisp/gnus/mail-source.el b/lisp/gnus/mail-source.el
index 320bc9c3b0e..639a29582b3 100644
--- a/lisp/gnus/mail-source.el
+++ b/lisp/gnus/mail-source.el
@@ -1,6 +1,6 @@
 ;;; mail-source.el --- functions for fetching mail  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index e7d11b597b3..c697b8d7a7f 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -1,6 +1,6 @@
 ;;; message.el --- composing mail and news messages -*- lexical-binding: t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: mail, news
@@ -2822,7 +2822,7 @@ systematically send encrypted emails when possible."
 
 The value must be a list of three elements, all strings:
 - Key ID, in hexadecimal form;
-- Key URL or ASCII armoured key; and
+- Key URL or ASCII armored key; and
 - Protection preference, one of: \"unprotected\", \"sign\",
   \"encrypt\" or \"signencrypt\".
 
@@ -3191,7 +3191,6 @@ Like `text-mode', but with these additional commands:
     (mail-abbrevs-setup))
    ((message-mail-alias-type-p 'ecomplete)
     (ecomplete-setup)))
-  (add-hook 'completion-at-point-functions #'eudc-capf-complete -1 t)
   (add-hook 'completion-at-point-functions #'message-completion-function nil t)
   (unless buffer-file-name
     (message-set-auto-save-file-name))
diff --git a/lisp/gnus/mm-archive.el b/lisp/gnus/mm-archive.el
index e73daf2db7a..50f6012148e 100644
--- a/lisp/gnus/mm-archive.el
+++ b/lisp/gnus/mm-archive.el
@@ -1,6 +1,6 @@
 ;;; mm-archive.el --- Functions for parsing archive files as MIME  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/gnus/mm-bodies.el b/lisp/gnus/mm-bodies.el
index 44ce1c9485d..2290b667abe 100644
--- a/lisp/gnus/mm-bodies.el
+++ b/lisp/gnus/mm-bodies.el
@@ -1,6 +1,6 @@
 ;;; mm-bodies.el --- Functions for decoding MIME things  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index 5268f192c61..b9beedf6c5c 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -1,6 +1,6 @@
 ;;; mm-decode.el --- Functions for decoding MIME things  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
diff --git a/lisp/gnus/mm-encode.el b/lisp/gnus/mm-encode.el
index 39b1ad1f3b9..14b7da299b8 100644
--- a/lisp/gnus/mm-encode.el
+++ b/lisp/gnus/mm-encode.el
@@ -1,6 +1,6 @@
 ;;; mm-encode.el --- Functions for encoding MIME things  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
diff --git a/lisp/gnus/mm-extern.el b/lisp/gnus/mm-extern.el
index abcd0b604ca..1d628c3d6b5 100644
--- a/lisp/gnus/mm-extern.el
+++ b/lisp/gnus/mm-extern.el
@@ -1,6 +1,6 @@
 ;;; mm-extern.el --- showing message/external-body  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: message external-body
diff --git a/lisp/gnus/mm-partial.el b/lisp/gnus/mm-partial.el
index a66fafe194a..35b1ff197f8 100644
--- a/lisp/gnus/mm-partial.el
+++ b/lisp/gnus/mm-partial.el
@@ -1,6 +1,6 @@
 ;;; mm-partial.el --- showing message/partial  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: message partial
diff --git a/lisp/gnus/mm-url.el b/lisp/gnus/mm-url.el
index e4d686ac837..11847a79f17 100644
--- a/lisp/gnus/mm-url.el
+++ b/lisp/gnus/mm-url.el
@@ -1,6 +1,6 @@
 ;;; mm-url.el --- a wrapper of url functions/commands for Gnus  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 
diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el
index 48cca45cb9b..2065747b859 100644
--- a/lisp/gnus/mm-util.el
+++ b/lisp/gnus/mm-util.el
@@ -1,6 +1,6 @@
 ;;; mm-util.el --- Utility functions for Mule and low level things  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
diff --git a/lisp/gnus/mm-uu.el b/lisp/gnus/mm-uu.el
index 8d314706340..72c39aae83c 100644
--- a/lisp/gnus/mm-uu.el
+++ b/lisp/gnus/mm-uu.el
@@ -1,6 +1,6 @@
 ;;; mm-uu.el --- Return uu stuff as mm handles  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: postscript uudecode binhex shar forward gnatsweb pgp
diff --git a/lisp/gnus/mm-view.el b/lisp/gnus/mm-view.el
index 5cfde5a8647..8dfb0deb418 100644
--- a/lisp/gnus/mm-view.el
+++ b/lisp/gnus/mm-view.el
@@ -1,6 +1,6 @@
 ;;; mm-view.el --- functions for viewing MIME objects  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/gnus/mml-sec.el b/lisp/gnus/mml-sec.el
index 2ebc44d6323..44ffaf9f229 100644
--- a/lisp/gnus/mml-sec.el
+++ b/lisp/gnus/mml-sec.el
@@ -1,6 +1,6 @@
 ;;; mml-sec.el --- A package with security functions for MML documents  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 
diff --git a/lisp/gnus/mml-smime.el b/lisp/gnus/mml-smime.el
index 6c43ded24f7..896c95f8d3e 100644
--- a/lisp/gnus/mml-smime.el
+++ b/lisp/gnus/mml-smime.el
@@ -1,6 +1,6 @@
 ;;; mml-smime.el --- S/MIME support for MML  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;; Keywords: Gnus, MIME, S/MIME, MML
diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el
index dc86fe6db96..6025ca7e72a 100644
--- a/lisp/gnus/mml.el
+++ b/lisp/gnus/mml.el
@@ -1,6 +1,6 @@
 ;;; mml.el --- A package for parsing and validating MML documents  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/gnus/mml1991.el b/lisp/gnus/mml1991.el
index 9bbe6432064..33b1f3a4c78 100644
--- a/lisp/gnus/mml1991.el
+++ b/lisp/gnus/mml1991.el
@@ -1,6 +1,6 @@
 ;;; mml1991.el --- Old PGP message format (RFC 1991) support for MML  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Sascha Lüdecke <sascha@meta-x.de>,
 ;;     Simon Josefsson <simon@josefsson.org> (Mailcrypt interface, Gnus glue)
diff --git a/lisp/gnus/mml2015.el b/lisp/gnus/mml2015.el
index bf9e975f749..b8dd61de3b9 100644
--- a/lisp/gnus/mml2015.el
+++ b/lisp/gnus/mml2015.el
@@ -1,6 +1,6 @@
 ;;; mml2015.el --- MIME Security with Pretty Good Privacy (PGP)  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: PGP MIME MML
diff --git a/lisp/gnus/nnagent.el b/lisp/gnus/nnagent.el
index d7e32e45809..61ec66155e4 100644
--- a/lisp/gnus/nnagent.el
+++ b/lisp/gnus/nnagent.el
@@ -1,6 +1,6 @@
 ;;; nnagent.el --- offline backend for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/nnbabyl.el b/lisp/gnus/nnbabyl.el
index 1a699d0e705..4ad994b12f1 100644
--- a/lisp/gnus/nnbabyl.el
+++ b/lisp/gnus/nnbabyl.el
@@ -1,6 +1,6 @@
 ;;; nnbabyl.el --- rmail mbox access for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
diff --git a/lisp/gnus/nndiary.el b/lisp/gnus/nndiary.el
index ab9c6dd74f9..be2bdc9bb15 100644
--- a/lisp/gnus/nndiary.el
+++ b/lisp/gnus/nndiary.el
@@ -1,6 +1,6 @@
 ;;; nndiary.el --- A diary back end for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author:        Didier Verna <didier@didierverna.net>
 ;; Created:       Fri Jul 16 18:55:42 1999
@@ -339,8 +339,15 @@ all.  This may very well take some time.")
   ;; for this header) or one list (specifying all the possible values for this
   ;; header). In the latter case, the list does NOT include the unspecified
   ;; spec (*).
+
   ;; For time zone values, we have symbolic time zone names associated with
   ;; the (relative) number of seconds ahead GMT.
+  ;; The list of time zone values is obsolescent, and new code should
+  ;; not rely on it.  Many of the time zone abbreviations are wrong;
+  ;; in particular, all single-letter abbreviations other than "Z" have
+  ;; been wrong since Internet RFC 2822 (2001).  However, the
+  ;; abbreviations have not been changed due to backward compatibility
+  ;; concerns.
   )
 
 (defsubst nndiary-schedule ()
diff --git a/lisp/gnus/nndir.el b/lisp/gnus/nndir.el
index 75a6ace107a..3b21a933409 100644
--- a/lisp/gnus/nndir.el
+++ b/lisp/gnus/nndir.el
@@ -1,6 +1,6 @@
 ;;; nndir.el --- single directory newsgroup access for Gnus  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/nndoc.el b/lisp/gnus/nndoc.el
index 378ada62475..0d499a15c3d 100644
--- a/lisp/gnus/nndoc.el
+++ b/lisp/gnus/nndoc.el
@@ -1,6 +1,6 @@
 ;;; nndoc.el --- single file access for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
diff --git a/lisp/gnus/nndraft.el b/lisp/gnus/nndraft.el
index f21e4faf559..bf90cfaa207 100644
--- a/lisp/gnus/nndraft.el
+++ b/lisp/gnus/nndraft.el
@@ -1,6 +1,6 @@
 ;;; nndraft.el --- draft article access for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/nneething.el b/lisp/gnus/nneething.el
index ff72842a2ee..a6b5870ca98 100644
--- a/lisp/gnus/nneething.el
+++ b/lisp/gnus/nneething.el
@@ -1,6 +1,6 @@
 ;;; nneething.el --- arbitrary file access for Gnus  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
diff --git a/lisp/gnus/nnfolder.el b/lisp/gnus/nnfolder.el
index c47a398c4c2..3516a75e927 100644
--- a/lisp/gnus/nnfolder.el
+++ b/lisp/gnus/nnfolder.el
@@ -1,6 +1,6 @@
 ;;; nnfolder.el --- mail folder access for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;;      ShengHuo Zhu <zsh@cs.rochester.edu> (adding NOV)
diff --git a/lisp/gnus/nngateway.el b/lisp/gnus/nngateway.el
index 8b6904aa366..152ef08f0f7 100644
--- a/lisp/gnus/nngateway.el
+++ b/lisp/gnus/nngateway.el
@@ -1,6 +1,6 @@
 ;;; nngateway.el --- posting news via mail gateways  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/nnheader.el b/lisp/gnus/nnheader.el
index b91798b8a0c..cdba6e663bf 100644
--- a/lisp/gnus/nnheader.el
+++ b/lisp/gnus/nnheader.el
@@ -1,6 +1,6 @@
 ;;; nnheader.el --- header access macros for Gnus and its backends  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1987-1990, 1993-1998, 2000-2022 Free Software
+;; Copyright (C) 1987-1990, 1993-1998, 2000-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index 8392eb601ff..de942993586 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -1,6 +1,6 @@
 ;;; nnimap.el --- IMAP interface for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;         Simon Josefsson <simon@josefsson.org>
diff --git a/lisp/gnus/nnmail.el b/lisp/gnus/nnmail.el
index afa14448fc7..e8f157392d4 100644
--- a/lisp/gnus/nnmail.el
+++ b/lisp/gnus/nnmail.el
@@ -1,6 +1,6 @@
 ;;; nnmail.el --- mail support functions for the Gnus mail backends  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/nnmairix.el b/lisp/gnus/nnmairix.el
index b1eee2d5308..72833d7bc33 100644
--- a/lisp/gnus/nnmairix.el
+++ b/lisp/gnus/nnmairix.el
@@ -1,6 +1,6 @@
 ;;; nnmairix.el --- Mairix back end for Gnus, the Emacs newsreader  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: David Engster <deng@randomsample.de>
 ;; Keywords: mail searching
diff --git a/lisp/gnus/nnmbox.el b/lisp/gnus/nnmbox.el
index 5735c97805e..c1a064c27f3 100644
--- a/lisp/gnus/nnmbox.el
+++ b/lisp/gnus/nnmbox.el
@@ -1,6 +1,6 @@
 ;;; nnmbox.el --- mail mbox access for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
diff --git a/lisp/gnus/nnmh.el b/lisp/gnus/nnmh.el
index bced527d03f..bb5ea3fa1bb 100644
--- a/lisp/gnus/nnmh.el
+++ b/lisp/gnus/nnmh.el
@@ -1,6 +1,6 @@
 ;;; nnmh.el --- mhspool access for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
diff --git a/lisp/gnus/nnml.el b/lisp/gnus/nnml.el
index 40e4b9ea828..d969716f020 100644
--- a/lisp/gnus/nnml.el
+++ b/lisp/gnus/nnml.el
@@ -1,6 +1,6 @@
 ;;; nnml.el --- mail spool access for Gnus  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Authors: Didier Verna <didier@didierverna.net> (adding compaction)
 ;;     Simon Josefsson <simon@josefsson.org>
@@ -776,17 +776,22 @@ article number.  This function is called narrowed to an 
article."
        (nnml--encode-headers headers)
        headers))))
 
+;; RFC2047-encode Subject and From, but leave invalid headers unencoded.
 (defun nnml--encode-headers (headers)
   (let ((subject (mail-header-subject headers))
        (rfc2047-encoding-type 'mime))
     (unless (string-match "\\`[[:ascii:]]*\\'" subject)
-      (setf (mail-header-subject headers)
-           (mail-encode-encoded-word-string subject t))))
+      (let ((encoded-subject
+             (ignore-errors (mail-encode-encoded-word-string subject t))))
+        (if encoded-subject
+            (setf (mail-header-subject headers) encoded-subject)))))
   (let ((from (mail-header-from headers))
        (rfc2047-encoding-type 'address-mime))
     (unless (string-match "\\`[[:ascii:]]*\\'" from)
-      (setf (mail-header-from headers)
-           (rfc2047-encode-string from t)))))
+      (let ((encoded-from
+             (ignore-errors (rfc2047-encode-string from t))))
+        (if encoded-from
+            (setf (mail-header-from headers) encoded-from))))))
 
 (defun nnml-get-nov-buffer (group &optional incrementalp)
   (let ((buffer (gnus-get-buffer-create
diff --git a/lisp/gnus/nnoo.el b/lisp/gnus/nnoo.el
index a93759721ac..4392a464f7b 100644
--- a/lisp/gnus/nnoo.el
+++ b/lisp/gnus/nnoo.el
@@ -1,6 +1,6 @@
 ;;; nnoo.el --- OO Gnus Backends  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/nnregistry.el b/lisp/gnus/nnregistry.el
index 4a799acad98..0702418a91a 100644
--- a/lisp/gnus/nnregistry.el
+++ b/lisp/gnus/nnregistry.el
@@ -1,6 +1,6 @@
 ;;; nnregistry.el --- access to articles via Gnus' message-id registry  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Ludovic Courtès <ludo@gnu.org>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/nnrss.el b/lisp/gnus/nnrss.el
index 66cee528659..c5f2cb672d7 100644
--- a/lisp/gnus/nnrss.el
+++ b/lisp/gnus/nnrss.el
@@ -1,6 +1,6 @@
 ;;; nnrss.el --- interfacing with RSS  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: RSS
diff --git a/lisp/gnus/nnselect.el b/lisp/gnus/nnselect.el
index 9b8333a7c6c..87cb1275313 100644
--- a/lisp/gnus/nnselect.el
+++ b/lisp/gnus/nnselect.el
@@ -1,6 +1,6 @@
 ;;; nnselect.el --- a virtual group backend   -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Andrew Cohen <cohen@andy.bu.edu>
 ;; Keywords: news mail
diff --git a/lisp/gnus/nnspool.el b/lisp/gnus/nnspool.el
index e5eb4b81604..3508c388897 100644
--- a/lisp/gnus/nnspool.el
+++ b/lisp/gnus/nnspool.el
@@ -1,6 +1,6 @@
 ;;; nnspool.el --- spool access for GNU Emacs  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1988-1990, 1993-1998, 2000-2022 Free Software
+;; Copyright (C) 1988-1990, 1993-1998, 2000-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el
index 6dea405d02b..20c176f2269 100644
--- a/lisp/gnus/nntp.el
+++ b/lisp/gnus/nntp.el
@@ -1,6 +1,6 @@
 ;;; nntp.el --- nntp access for Gnus  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1987-1990, 1992-1998, 2000-2022 Free Software
+;; Copyright (C) 1987-1990, 1992-1998, 2000-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
diff --git a/lisp/gnus/nnvirtual.el b/lisp/gnus/nnvirtual.el
index eec0347bcff..c43abe57ee0 100644
--- a/lisp/gnus/nnvirtual.el
+++ b/lisp/gnus/nnvirtual.el
@@ -1,6 +1,6 @@
 ;;; nnvirtual.el --- virtual newsgroups access for Gnus  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: David Moore <dmoore@ucsd.edu>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
diff --git a/lisp/gnus/nnweb.el b/lisp/gnus/nnweb.el
index 23c104da77b..d3bf138edeb 100644
--- a/lisp/gnus/nnweb.el
+++ b/lisp/gnus/nnweb.el
@@ -1,6 +1,6 @@
 ;;; nnweb.el --- retrieving articles via web search engines  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/gnus/score-mode.el b/lisp/gnus/score-mode.el
index 4c9d73a6e5e..e2c89ef8964 100644
--- a/lisp/gnus/score-mode.el
+++ b/lisp/gnus/score-mode.el
@@ -1,6 +1,6 @@
 ;;; score-mode.el --- mode for editing Gnus score files  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/smiley.el b/lisp/gnus/smiley.el
index 3f83b774252..3c17f9bf511 100644
--- a/lisp/gnus/smiley.el
+++ b/lisp/gnus/smiley.el
@@ -1,6 +1,6 @@
 ;;; smiley.el --- displaying smiley faces  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: news mail multimedia
diff --git a/lisp/gnus/smime.el b/lisp/gnus/smime.el
index 409befc2426..ddebfec078a 100644
--- a/lisp/gnus/smime.el
+++ b/lisp/gnus/smime.el
@@ -1,6 +1,6 @@
 ;;; smime.el --- S/MIME support library  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;; Keywords: SMIME X.509 PEM OpenSSL
diff --git a/lisp/gnus/spam-report.el b/lisp/gnus/spam-report.el
index 014b8254fa0..7e0392797f9 100644
--- a/lisp/gnus/spam-report.el
+++ b/lisp/gnus/spam-report.el
@@ -1,6 +1,6 @@
 ;;; spam-report.el --- Reporting spam  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <tzz@lifelogs.com>
 ;; Keywords: network, spam, mail, gmane, report
diff --git a/lisp/gnus/spam-stat.el b/lisp/gnus/spam-stat.el
index 5763ac14bb3..ee6da6ecb44 100644
--- a/lisp/gnus/spam-stat.el
+++ b/lisp/gnus/spam-stat.el
@@ -1,6 +1,6 @@
 ;;; spam-stat.el --- detecting spam based on statistics  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Keywords: network
diff --git a/lisp/gnus/spam-wash.el b/lisp/gnus/spam-wash.el
index 023f646e25c..685cb7e92d0 100644
--- a/lisp/gnus/spam-wash.el
+++ b/lisp/gnus/spam-wash.el
@@ -1,6 +1,6 @@
 ;;; spam-wash.el --- wash spam before analysis  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2004, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Andrew Cohen <cohen@andy.bu.edu>
 ;; Keywords: mail
diff --git a/lisp/gnus/spam.el b/lisp/gnus/spam.el
index e0d90e5547a..3178d9f59e6 100644
--- a/lisp/gnus/spam.el
+++ b/lisp/gnus/spam.el
@@ -1,6 +1,6 @@
 ;;; spam.el --- Identifying spam  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Maintainer: Ted Zlatanov <tzz@lifelogs.com>
diff --git a/lisp/help-at-pt.el b/lisp/help-at-pt.el
index 1a6d374db09..6c18a85ddfd 100644
--- a/lisp/help-at-pt.el
+++ b/lisp/help-at-pt.el
@@ -1,6 +1,6 @@
 ;;; help-at-pt.el --- local help through the keyboard  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Luc Teirlinck <teirllm@auburn.edu>
 ;; Keywords: help
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index e29f763dabc..8bf8af73d30 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -1,6 +1,6 @@
 ;;; help-fns.el --- Complex help functions -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1993-1994, 1998-2022 Free Software
+;; Copyright (C) 1985-1986, 1993-1994, 1998-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -2004,8 +2004,8 @@ variable with value KEYMAP."
                   (mapatoms (lambda (symb)
                               (when (and (boundp symb)
                                          (eq (symbol-value symb) keymap)
-                                         (not (eq symb 'keymap))
-                                         (throw 'found-keymap symb)))))
+                                         (not (eq symb 'keymap)))
+                                (throw 'found-keymap symb))))
                   nil)))
       ;; Follow aliasing.
       (or (ignore-errors (indirect-variable name)) name))))
diff --git a/lisp/help-macro.el b/lisp/help-macro.el
index cf024afe254..6fd0ca3bf98 100644
--- a/lisp/help-macro.el
+++ b/lisp/help-macro.el
@@ -1,6 +1,6 @@
 ;;; help-macro.el --- makes command line help such as help-for-help  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Lynn Slater <lrs@indetech.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index f49d20270cf..bf64d032b65 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -1,6 +1,6 @@
 ;;; help-mode.el --- `help-mode' used by *Help* buffers  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1985-1986, 1993-1994, 1998-2022 Free Software
+;; Copyright (C) 1985-1986, 1993-1994, 1998-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/help.el b/lisp/help.el
index b709062cb27..83be85b1ee4 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -1,6 +1,6 @@
 ;;; help.el --- help commands for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1993-1994, 1998-2022 Free Software
+;; Copyright (C) 1985-1986, 1993-1994, 1998-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -76,6 +76,7 @@ buffer.")
   "C-n"  #'view-emacs-news
   "C-o"  #'describe-distribution
   "C-p"  #'view-emacs-problems
+  "C-q"  #'help-quick-toggle
   "C-s"  #'search-forward-help-for-help
   "C-t"  #'view-emacs-todo
   "C-w"  #'describe-no-warranty
@@ -116,7 +117,7 @@ buffer.")
   "v"    #'describe-variable
   "w"    #'where-is
   "x"    #'describe-command
-  "q"    #'help-quit-or-quick)
+  "q"    #'help-quit)
 
 (define-key global-map (char-to-string help-char) 'help-command)
 (define-key global-map [help] 'help-command)
@@ -243,7 +244,17 @@ buffer.")
       ;; ... and shrink it immediately.
       (fit-window-to-buffer))
     (message
-     (substitute-command-keys "Toggle the quick help buffer using 
\\[help-quit-or-quick]."))))
+     (substitute-command-keys "Toggle the quick help buffer using 
\\[help-quick-toggle]."))))
+
+(defun help-quick-toggle ()
+  "Toggle the quick-help window."
+  (interactive)
+  (if (and-let* ((window (get-buffer-window "*Quick Help*")))
+        (quit-window t window))
+      ;; Clear the message we may have gotten from `C-h' and then
+      ;; waiting before hitting `q'.
+      (message "")
+    (help-quick)))
 
 (defalias 'cheat-sheet #'help-quick)
 
@@ -252,21 +263,6 @@ buffer.")
   (interactive)
   nil)
 
-(defun help-quit-or-quick ()
-  "Call `help-quit' or  `help-quick' depending on the context."
-  (interactive)
-  (cond
-   (help-buffer-under-preparation
-    ;; FIXME: There should be a better way to detect if we are in the
-    ;;        help command loop.
-    (help-quit))
-   ((and-let* ((window (get-buffer-window "*Quick Help*")))
-      (quit-window t window)
-      ;; Clear the message we may have gotten from `C-h' and then
-      ;; waiting before hitting `q'.
-      (message "")))
-   ((help-quick))))
-
 (defvar help-return-method nil
   "What to do to \"exit\" the help buffer.
 This is a list
@@ -416,7 +412,7 @@ Do not call this in the scope of `with-help-window'."
        ("describe-package" "Describe a specific Emacs package")
        ""
        ("help-with-tutorial" "Start the Emacs tutorial")
-       ("help-quick-or-quit" "Display the quick help buffer.")
+       ("help-quick-toggle" "Display the quick help buffer.")
        ("view-echo-area-messages"
         "Show recent messages (from echo area)")
        ("view-lossage" ,(format "Show last %d input keystrokes (lossage)"
diff --git a/lisp/hex-util.el b/lisp/hex-util.el
index 101c8be7b48..9b40c1d2799 100644
--- a/lisp/hex-util.el
+++ b/lisp/hex-util.el
@@ -1,6 +1,6 @@
 ;;; hex-util.el --- Functions to encode/decode hexadecimal string -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
 ;; Keywords: data
diff --git a/lisp/hexl.el b/lisp/hexl.el
index b8d25bfb1f0..bb57f4ac4c3 100644
--- a/lisp/hexl.el
+++ b/lisp/hexl.el
@@ -1,6 +1,6 @@
 ;;; hexl.el --- edit a file in a hex dump format using the hexl filter -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1989, 1994, 1998, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1989, 1994, 1998, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Keith Gabryelski <ag@wheaties.ai.mit.edu>
diff --git a/lisp/hfy-cmap.el b/lisp/hfy-cmap.el
index c08359696d5..95f82a1f68c 100644
--- a/lisp/hfy-cmap.el
+++ b/lisp/hfy-cmap.el
@@ -1,6 +1,6 @@
 ;;; hfy-cmap.el --- Fallback color name -> rgb mapping for `htmlfontify'  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2002-2003, 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2009-2023 Free Software Foundation, Inc.
 
 ;; Emacs Lisp Archive Entry
 ;; Package: htmlfontify
diff --git a/lisp/hi-lock.el b/lisp/hi-lock.el
index a45e74eca26..78fc5e6f716 100644
--- a/lisp/hi-lock.el
+++ b/lisp/hi-lock.el
@@ -1,6 +1,6 @@
 ;;; hi-lock.el --- minor mode for interactive automatic highlighting  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: David M. Koppelman <koppel@ece.lsu.edu>
 ;; Keywords: faces, minor-mode, matching, display
@@ -569,24 +569,29 @@ the major mode specifies support for Font Lock."
       (when (and face-before face-after (not (eq face-before face-after)))
         (setq face-before nil))
       (when (or face-after face-before)
-        (let* ((hi-text
-                (buffer-substring-no-properties
-                 (if face-before
-                     (or (previous-single-property-change (point) 'face)
-                         (point-min))
-                   (point))
-                 (if face-after
-                     (or (next-single-property-change (point) 'face)
-                         (point-max))
-                   (point)))))
+        (let* ((beg (if face-before
+                        (or (previous-single-property-change (point) 'face)
+                            (point-min))
+                      (point)))
+               (end (if face-after
+                        (or (next-single-property-change (point) 'face)
+                            (point-max))
+                      (point))))
           ;; Compute hi-lock patterns that match the
           ;; highlighted text at point.  Use this later in
           ;; during completing-read.
           (dolist (hi-lock-pattern hi-lock-interactive-patterns)
-            (let ((regexp (or (car (rassq hi-lock-pattern 
hi-lock-interactive-lighters))
-                              (car hi-lock-pattern))))
-              (if (string-match regexp hi-text)
-                  (push regexp regexps)))))))
+            (let ((pattern (or (rassq hi-lock-pattern 
hi-lock-interactive-lighters)
+                               (car hi-lock-pattern))))
+              (cond
+               ((stringp pattern)
+                (when (string-match pattern (buffer-substring-no-properties 
beg end))
+                  (push pattern regexps)))
+               ((functionp (cadr pattern))
+                (save-excursion
+                  (goto-char beg)
+                  (when (funcall (cadr pattern) end)
+                    (push (car pattern) regexps))))))))))
     regexps))
 
 (defvar-local hi-lock--unused-faces nil
diff --git a/lisp/hilit-chg.el b/lisp/hilit-chg.el
index 00748e12da9..d5899175616 100644
--- a/lisp/hilit-chg.el
+++ b/lisp/hilit-chg.el
@@ -1,6 +1,6 @@
 ;;; hilit-chg.el --- minor mode displaying buffer changes with special face  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Richard Sharman <rsharman@pobox.com>
 ;; Keywords: faces
diff --git a/lisp/hippie-exp.el b/lisp/hippie-exp.el
index 9a6bfc604ec..573366dd0a1 100644
--- a/lisp/hippie-exp.el
+++ b/lisp/hippie-exp.el
@@ -1,6 +1,6 @@
 ;;; hippie-exp.el --- expand text trying various ways to find its expansion  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1992, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Anders Holst <aho@sans.kth.se>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/hl-line.el b/lisp/hl-line.el
index 87bea1017f1..11631418c76 100644
--- a/lisp/hl-line.el
+++ b/lisp/hl-line.el
@@ -1,6 +1,6 @@
 ;;; hl-line.el --- highlight the current line  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/htmlfontify.el b/lisp/htmlfontify.el
index df4c6ab079c..c989a12d205 100644
--- a/lisp/htmlfontify.el
+++ b/lisp/htmlfontify.el
@@ -1,6 +1,6 @@
 ;;; htmlfontify.el --- htmlize a buffer/source tree with optional hyperlinks 
-*- lexical-binding: t -*-
 
-;; Copyright (C) 2002-2003, 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2009-2023 Free Software Foundation, Inc.
 
 ;; Emacs Lisp Archive Entry
 ;; Package: htmlfontify
@@ -1850,8 +1850,9 @@ Hardly bombproof, but good enough in the context in which 
it is being used."
 
 (defun hfy-text-p (srcdir file)
   "Is SRCDIR/FILE text?  Use `hfy-istext-command' to determine this."
-  (let* ((cmd (format hfy-istext-command (expand-file-name file srcdir)))
-         (rsp (shell-command-to-string    cmd)))
+  (let* ((cmd (format hfy-istext-command
+                      (shell-quote-argument (expand-file-name file srcdir))))
+         (rsp (shell-command-to-string cmd)))
     (string-match "text" rsp)))
 
 ;; open a file, check fontification, if fontified, write a fontified copy
diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el
index adffef43259..ed4c8a04db7 100644
--- a/lisp/ibuf-ext.el
+++ b/lisp/ibuf-ext.el
@@ -1,6 +1,6 @@
 ;;; ibuf-ext.el --- extensions for ibuffer  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Colin Walters <walters@verbum.org>
 ;; Maintainer: John Paul Wallington <jpw@gnu.org>
diff --git a/lisp/ibuf-macs.el b/lisp/ibuf-macs.el
index acffb74ead3..2c9e9ea8bcd 100644
--- a/lisp/ibuf-macs.el
+++ b/lisp/ibuf-macs.el
@@ -1,6 +1,6 @@
 ;;; ibuf-macs.el --- macros for ibuffer  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Colin Walters <walters@verbum.org>
 ;; Maintainer: John Paul Wallington <jpw@gnu.org>
diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el
index 5cb4fe2a7a3..a26bb1811ec 100644
--- a/lisp/ibuffer.el
+++ b/lisp/ibuffer.el
@@ -1,6 +1,6 @@
 ;;; ibuffer.el --- operate on buffers like dired  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Colin Walters <walters@verbum.org>
 ;; Maintainer: John Paul Wallington <jpw@gnu.org>
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 983931c20ca..9fa622017f7 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -1,6 +1,6 @@
 ;;; icomplete.el --- minibuffer completion incremental feedback -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: Ken Manheimer <ken dot manheimer at gmail...>
 ;; Created: Mar 1993 Ken Manheimer, klm@nist.gov - first release to usenet
diff --git a/lisp/ido.el b/lisp/ido.el
index 92b4370cb45..98633d5d798 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -1,6 +1,6 @@
 ;;; ido.el --- interactively do things with buffers and files -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <storm@cua.dk>
 ;; Based on: iswitchb by Stephen Eglen <stephen@cns.ed.ac.uk>
diff --git a/lisp/ielm.el b/lisp/ielm.el
index fd41afa2437..5c370733c05 100644
--- a/lisp/ielm.el
+++ b/lisp/ielm.el
@@ -1,6 +1,6 @@
 ;;; ielm.el --- interaction mode for Emacs Lisp  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Smith <maa036@lancaster.ac.uk>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/iimage.el b/lisp/iimage.el
index baeb4bb6a7b..96ab963bff4 100644
--- a/lisp/iimage.el
+++ b/lisp/iimage.el
@@ -1,6 +1,6 @@
 ;;; iimage.el --- Inline image minor mode.  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: KOSEKI Yoshinori <kose@meadowy.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/image-file.el b/lisp/image-file.el
index 63f9e1100c6..a28da2f05ba 100644
--- a/lisp/image-file.el
+++ b/lisp/image-file.el
@@ -1,6 +1,6 @@
 ;;; image-file.el --- support for visiting image files  -*- lexical-binding:t 
-*-
 ;;
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
 ;; Keywords: multimedia
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index bd208fbad46..fa28c1bf7a5 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -1,6 +1,6 @@
 ;;; image-mode.el --- support for visiting image files  -*- lexical-binding: t 
-*-
 ;;
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Richard Stallman <rms@gnu.org>
 ;; Keywords: multimedia
@@ -1086,7 +1086,7 @@ Otherwise, display the image by calling `image-mode'."
                   (unwind-protect
                       (progn
                         (setq-local image-fit-to-window-lock t)
-                        (ignore-error 'remote-file-error
+                        (ignore-error remote-file-error
                           (image-toggle-display-image)))
                     (setq image-fit-to-window-lock nil)))))))))))
 
diff --git a/lisp/image.el b/lisp/image.el
index b6817d3fda3..2372fd1ce09 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -1,6 +1,6 @@
 ;;; image.el --- image API  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: multimedia
@@ -444,7 +444,7 @@ type if we can't otherwise guess it."
                             (require 'image-converter)
                             (image-convert-p source))))))
     (unless type
-      (signal 'unknown-image-type "Cannot determine image type")))
+      (signal 'unknown-image-type '("Cannot determine image type"))))
   (when (and (not (eq type 'image-convert))
              (not (memq type (and (boundp 'image-types) image-types))))
     (error "Invalid image type `%s'" type))
diff --git a/lisp/image/compface.el b/lisp/image/compface.el
index b8bb7a83bc3..25204147906 100644
--- a/lisp/image/compface.el
+++ b/lisp/image/compface.el
@@ -1,6 +1,6 @@
 ;;; compface.el --- functions for converting X-Face headers -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: multimedia, news
diff --git a/lisp/image/exif.el b/lisp/image/exif.el
index 53d2074ed71..50428c3a31a 100644
--- a/lisp/image/exif.el
+++ b/lisp/image/exif.el
@@ -1,6 +1,6 @@
 ;;; exif.el --- parsing Exif data in JPEG images -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: images
@@ -151,7 +151,7 @@ If the orientation isn't present in the data, return nil."
 
 (defun exif--parse-jpeg ()
   (unless (= (exif--read-number-be 2) #xffd8) ; SOI (start of image)
-    (signal 'exif-error "Not a valid JPEG file"))
+    (signal 'exif-error '("Not a valid JPEG file")))
   (cl-loop for segment = (exif--read-number-be 2)
            for size = (exif--read-number-be 2)
            ;; Stop parsing when we get to SOS (start of stream);
@@ -168,7 +168,7 @@ If the orientation isn't present in the data, return nil."
     ;; The Exif data is in the APP1 JPEG chunk and starts with
     ;; "Exif\0\0".
     (unless (equal (exif--read-chunk 6) (string ?E ?x ?i ?f ?\0 ?\0))
-      (signal 'exif-error "Not a valid Exif chunk"))
+      (signal 'exif-error '("Not a valid Exif chunk")))
     (delete-region (point-min) (point))
     (let* ((endian-marker (exif--read-chunk 2))
            (le (cond
@@ -180,14 +180,15 @@ If the orientation isn't present in the data, return nil."
                  t)
                 (t
                  (signal 'exif-error
-                         (format "Invalid endian-ness %s" endian-marker))))))
+                         (list (format "Invalid endian-ness %s"
+                                       endian-marker)))))))
       ;; Another magical number.
       (unless (= (exif--read-number 2 le) #x002a)
-        (signal 'exif-error "Invalid TIFF header length"))
+        (signal 'exif-error '("Invalid TIFF header length")))
       (let ((offset (exif--read-number 4 le)))
         ;; Jump to where the IFD (directory) starts and parse it.
         (when (> (1+ offset) (point-max))
-          (signal 'exif-error "Invalid IFD (directory) offset"))
+          (signal 'exif-error '("Invalid IFD (directory) offset")))
         (goto-char (1+ offset))
         (exif--parse-directory le)))))
 
@@ -230,7 +231,7 @@ If the orientation isn't present in the data, return nil."
                                          (when (> (+ (1+ value) length)
                                                   (point-max))
                                            (signal 'exif-error
-                                                   "Premature end of file"))
+                                                   '("Premature end of file")))
                                          (buffer-substring
                                           (1+ value)
                                           (+ (1+ value) length)))
@@ -248,7 +249,7 @@ If the orientation isn't present in the data, return nil."
           ;; keep parsing.
           (progn
             (when (> (1+ next) (point-max))
-              (signal 'exif-error "Invalid IFD (directory) next-offset"))
+              (signal 'exif-error '("Invalid IFD (directory) next-offset")))
             (goto-char (1+ next))
             (nconc dir (exif--parse-directory le)))
         ;; We've reached the end of the directories.
@@ -283,7 +284,7 @@ VALUE is an integer representing BYTES characters."
 (defun exif--read-chunk (bytes)
   "Return BYTES octets from the buffer and advance point that much."
   (when (> (+ (point) bytes) (point-max))
-    (signal 'exif-error "Premature end of file"))
+    (signal 'exif-error '("Premature end of file")))
   (prog1
       (buffer-substring (point) (+ (point) bytes))
     (forward-char bytes)))
@@ -292,7 +293,7 @@ VALUE is an integer representing BYTES characters."
   "Read BYTES octets from the buffer as a chunk of big-endian bytes.
 Advance point to after the read bytes."
   (when (> (+ (point) bytes) (point-max))
-    (signal 'exif-error "Premature end of file"))
+    (signal 'exif-error '("Premature end of file")))
   (let ((sum 0))
     (dotimes (_ bytes)
       (setq sum (+ (* sum 256) (following-char)))
@@ -303,7 +304,7 @@ Advance point to after the read bytes."
   "Read BYTES octets from the buffer as a chunk of low-endian bytes.
 Advance point to after the read bytes."
   (when (> (+ (point) bytes) (point-max))
-    (signal 'exif-error "Premature end of file"))
+    (signal 'exif-error '("Premature end of file")))
   (let ((sum 0))
     (dotimes (i bytes)
       (setq sum (+ (* (following-char) (expt 256 i)) sum))
diff --git a/lisp/image/gravatar.el b/lisp/image/gravatar.el
index 8c49c1edf28..b2f0d453761 100644
--- a/lisp/image/gravatar.el
+++ b/lisp/image/gravatar.el
@@ -1,6 +1,6 @@
 ;;; gravatar.el --- Get Gravatars -*- lexical-binding: t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <julien@danjou.info>
 ;; Keywords: comm, multimedia
diff --git a/lisp/image/image-converter.el b/lisp/image/image-converter.el
index 9c2f24819a3..596e623357e 100644
--- a/lisp/image/image-converter.el
+++ b/lisp/image/image-converter.el
@@ -1,6 +1,6 @@
 ;;; image-converter.el --- Converting images from exotic formats -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: images
diff --git a/lisp/image/image-crop.el b/lisp/image/image-crop.el
index 7fbbf85f939..e6e5abf53d8 100644
--- a/lisp/image/image-crop.el
+++ b/lisp/image/image-crop.el
@@ -1,6 +1,6 @@
 ;;; image-crop.el --- Image Cropping  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Keywords: multimedia
 
diff --git a/lisp/image/image-dired-dired.el b/lisp/image/image-dired-dired.el
index 46adf3f26f6..85bdd537c27 100644
--- a/lisp/image/image-dired-dired.el
+++ b/lisp/image/image-dired-dired.el
@@ -1,6 +1,6 @@
 ;;; image-dired-dired.el --- Dired specific commands for Image-Dired  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Mathias Dahl <mathias.rem0veth1s.dahl@gmail.com>
 ;; Maintainer: Stefan Kangas <stefankangas@gmail.com>
diff --git a/lisp/image/image-dired-external.el 
b/lisp/image/image-dired-external.el
index b1f8a6c2285..b3ee4b36ad3 100644
--- a/lisp/image/image-dired-external.el
+++ b/lisp/image/image-dired-external.el
@@ -1,6 +1,6 @@
 ;;; image-dired-external.el --- External process support for Image-Dired  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Mathias Dahl <mathias.rem0veth1s.dahl@gmail.com>
 ;; Maintainer: Stefan Kangas <stefankangas@gmail.com>
diff --git a/lisp/image/image-dired-tags.el b/lisp/image/image-dired-tags.el
index dfd64732859..039a7a6617a 100644
--- a/lisp/image/image-dired-tags.el
+++ b/lisp/image/image-dired-tags.el
@@ -1,6 +1,6 @@
 ;;; image-dired-tags.el --- Tag support for Image-Dired  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Mathias Dahl <mathias.rem0veth1s.dahl@gmail.com>
 ;; Maintainer: Stefan Kangas <stefankangas@gmail.com>
diff --git a/lisp/image/image-dired-util.el b/lisp/image/image-dired-util.el
index bc7a3552620..c03f9d2e3d3 100644
--- a/lisp/image/image-dired-util.el
+++ b/lisp/image/image-dired-util.el
@@ -1,6 +1,6 @@
 ;;; image-dired-util.el --- util functions for Image-Dired  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Mathias Dahl <mathias.rem0veth1s.dahl@gmail.com>
 ;; Maintainer: Stefan Kangas <stefankangas@gmail.com>
diff --git a/lisp/image/image-dired.el b/lisp/image/image-dired.el
index d4fd3c62db1..0c6fd74392c 100644
--- a/lisp/image/image-dired.el
+++ b/lisp/image/image-dired.el
@@ -1,6 +1,6 @@
 ;;; image-dired.el --- use dired to browse and manipulate your images -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Mathias Dahl <mathias.rem0veth1s.dahl@gmail.com>
 ;; Maintainer: Stefan Kangas <stefankangas@gmail.com>
diff --git a/lisp/image/wallpaper.el b/lisp/image/wallpaper.el
index f083477ddf4..c497e1f429b 100644
--- a/lisp/image/wallpaper.el
+++ b/lisp/image/wallpaper.el
@@ -1,6 +1,6 @@
 ;;; wallpaper.el --- Change the desktop background  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 ;; Keywords: images
diff --git a/lisp/imenu.el b/lisp/imenu.el
index 7f68bd15b96..25a02004570 100644
--- a/lisp/imenu.el
+++ b/lisp/imenu.el
@@ -1,6 +1,6 @@
 ;;; imenu.el --- framework for mode-specific buffer indexes  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1994-1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Ake Stenhoff <etxaksf@aom.ericsson.se>
 ;;         Lars Lindberg <lli@sypro.cap.se>
diff --git a/lisp/indent.el b/lisp/indent.el
index c7ec5c9a3ed..89de0a1d7d1 100644
--- a/lisp/indent.el
+++ b/lisp/indent.el
@@ -1,6 +1,6 @@
 ;;; indent.el --- indentation commands for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985, 1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Package: emacs
@@ -784,7 +784,8 @@ If PREV is non-nil, return the previous one instead."
 (defun tab-to-tab-stop ()
   "Insert spaces or tabs to next defined tab-stop column.
 The variable `tab-stop-list' is a list of columns at which there are tab stops.
-Use \\[edit-tab-stops] to edit them interactively."
+Use \\[edit-tab-stops] to edit them interactively.
+Whether this inserts tabs or spaces depends on `indent-tabs-mode'."
   (interactive)
   (and abbrev-mode (= (char-syntax (preceding-char)) ?w)
        (expand-abbrev))
diff --git a/lisp/info-look.el b/lisp/info-look.el
index 2eec6f49f5c..7858ed58774 100644
--- a/lisp/info-look.el
+++ b/lisp/info-look.el
@@ -1,7 +1,7 @@
 ;;; info-look.el --- major-mode-sensitive Info index lookup facility -*- 
lexical-binding: t -*-
 ;; An older version of this was known as libc.el.
 
-;; Copyright (C) 1995-1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Ralph Schleicher <rs@ralph-schleicher.de>
 ;; Keywords: help languages
diff --git a/lisp/info-xref.el b/lisp/info-xref.el
index d3f603ee5b1..a910f38af84 100644
--- a/lisp/info-xref.el
+++ b/lisp/info-xref.el
@@ -1,6 +1,6 @@
 ;;; info-xref.el --- check external references in an Info document -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Kevin Ryde <user42@zip.com.au>
 ;; Keywords: docs
diff --git a/lisp/info.el b/lisp/info.el
index 05ad27e1801..035dff66e75 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -1,6 +1,6 @@
 ;;; info.el --- Info package for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1992-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: help
diff --git a/lisp/informat.el b/lisp/informat.el
index c126ab5b1a1..6ef26d326a4 100644
--- a/lisp/informat.el
+++ b/lisp/informat.el
@@ -1,6 +1,6 @@
 ;;; informat.el --- info support functions package for Emacs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1986, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: help
diff --git a/lisp/international/ccl.el b/lisp/international/ccl.el
index c7d883276db..7e58621a67f 100644
--- a/lisp/international/ccl.el
+++ b/lisp/international/ccl.el
@@ -1,6 +1,6 @@
 ;;; ccl.el --- CCL (Code Conversion Language) compiler  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/characters.el b/lisp/international/characters.el
index 9dcae187f21..518436bd961 100644
--- a/lisp/international/characters.el
+++ b/lisp/international/characters.el
@@ -1,6 +1,6 @@
 ;;; characters.el --- set syntax and category for multibyte characters  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2000-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
@@ -184,7 +184,7 @@ with L, LRE, or LRO Unicode bidi character type.")
 
 (dolist (c '(chinese-cns11643-1 chinese-cns11643-2 chinese-cns11643-3
             chinese-cns11643-4 chinese-cns11643-5 chinese-cns11643-6
-            chinese-cns11643-7))
+            chinese-cns11643-7 chinese-cns11643-15))
   (map-charset-chars #'modify-category-entry c ?c)
   (if (eq c 'chinese-cns11643-1)
       (map-charset-chars #'modify-category-entry c ?C #x4421 #x7E7E)
diff --git a/lisp/international/emoji.el b/lisp/international/emoji.el
index 3d065b778e6..2d17cf639b0 100644
--- a/lisp/international/emoji.el
+++ b/lisp/international/emoji.el
@@ -1,6 +1,6 @@
 ;;; emoji.el --- Inserting emojis  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: fun
diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el
index 93fedb8c1ad..eb1c7f53d36 100644
--- a/lisp/international/fontset.el
+++ b/lisp/international/fontset.el
@@ -1,6 +1,6 @@
 ;;; fontset.el --- commands for handling fontset  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/isearch-x.el b/lisp/international/isearch-x.el
index 76190b8fc09..448e633d0c2 100644
--- a/lisp/international/isearch-x.el
+++ b/lisp/international/isearch-x.el
@@ -1,6 +1,6 @@
 ;;; isearch-x.el --- extended isearch handling commands  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/iso-ascii.el b/lisp/international/iso-ascii.el
index 6fbe9303344..749118ea20f 100644
--- a/lisp/international/iso-ascii.el
+++ b/lisp/international/iso-ascii.el
@@ -1,6 +1,6 @@
 ;;; iso-ascii.el --- set up char tables for ISO 8859/1 on ASCII terminals  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1987, 1995, 1998, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1987, 1995, 1998, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Howard Gayle
diff --git a/lisp/international/iso-cvt.el b/lisp/international/iso-cvt.el
index 614d42e521f..0adf8a24092 100644
--- a/lisp/international/iso-cvt.el
+++ b/lisp/international/iso-cvt.el
@@ -1,7 +1,7 @@
 ;;; iso-cvt.el --- translate ISO 8859-1 from/to various encodings -*- 
lexical-binding: t; -*-
 ;; This file was formerly called gm-lingo.el.
 
-;; Copyright (C) 1993-1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Gschwind <mike@vlsivie.tuwien.ac.at>
 ;; Keywords: tex, iso, latin, i18n
diff --git a/lisp/international/iso-transl.el b/lisp/international/iso-transl.el
index 5e9fd69ea02..80f14f3e8cb 100644
--- a/lisp/international/iso-transl.el
+++ b/lisp/international/iso-transl.el
@@ -1,6 +1,6 @@
 ;;; iso-transl.el --- keyboard input for ISO 10646 chars -*- coding: utf-8; 
lexical-binding: t; -*-
 
-;; Copyright (C) 1987, 1993-1999, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1987, 1993-1999, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Howard Gayle
diff --git a/lisp/international/ja-dic-cnv.el b/lisp/international/ja-dic-cnv.el
index ec68d8c8046..9ce31f11d91 100644
--- a/lisp/international/ja-dic-cnv.el
+++ b/lisp/international/ja-dic-cnv.el
@@ -1,6 +1,6 @@
 ;;; ja-dic-cnv.el --- convert a Japanese dictionary (SKK-JISYO.L) to Emacs 
Lisp  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
diff --git a/lisp/international/kinsoku.el b/lisp/international/kinsoku.el
index 6896bd4d7b7..93719768bac 100644
--- a/lisp/international/kinsoku.el
+++ b/lisp/international/kinsoku.el
@@ -1,6 +1,6 @@
 ;;; kinsoku.el --- `Kinsoku' processing funcs  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/kkc.el b/lisp/international/kkc.el
index 0e1cec5ee7b..b10d3e76075 100644
--- a/lisp/international/kkc.el
+++ b/lisp/international/kkc.el
@@ -1,6 +1,6 @@
 ;;; kkc.el --- Kana Kanji converter  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/latexenc.el b/lisp/international/latexenc.el
index c7a2e150cdd..e245a099742 100644
--- a/lisp/international/latexenc.el
+++ b/lisp/international/latexenc.el
@@ -1,6 +1,6 @@
 ;;; latexenc.el --- guess correct coding system in LaTeX files -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Arne Jørgensen <arne@arnested.dk>
 ;; Keywords: mule, coding system, latex
diff --git a/lisp/international/latin1-disp.el 
b/lisp/international/latin1-disp.el
index cb3b429957c..d3a458ac516 100644
--- a/lisp/international/latin1-disp.el
+++ b/lisp/international/latin1-disp.el
@@ -1,6 +1,6 @@
 ;;; latin1-disp.el --- display tables for non-ASCII on Latin-1 terminals -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: i18n
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index 61a26b504c8..4e38b13b1a5 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -1,6 +1,6 @@
 ;;; mule-cmds.el --- commands for multilingual environment  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/mule-conf.el b/lisp/international/mule-conf.el
index 3f3ac6064ae..979e685e32a 100644
--- a/lisp/international/mule-conf.el
+++ b/lisp/international/mule-conf.el
@@ -1,6 +1,6 @@
 ;;; mule-conf.el --- configure multilingual environment  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 
2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H14PRO021
@@ -1268,7 +1268,7 @@
   :short-name  "CNS11643-15"
   :long-name "CNS11643-15 (Chinese traditional)"
   :code-space [33 126 33 126]
-  :code-offset #x27A000
+  :code-offset #x28083A                 ; Right after 'big5-hkscs.
   :unify-map "CNS-F")
 
 (unify-charset 'chinese-gb2312)
diff --git a/lisp/international/mule-diag.el b/lisp/international/mule-diag.el
index 6e49c9cb21a..6a533f0418e 100644
--- a/lisp/international/mule-diag.el
+++ b/lisp/international/mule-diag.el
@@ -1,6 +1,6 @@
 ;;; mule-diag.el --- show diagnosis of multilingual environment (Mule)  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997-1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/mule-util.el b/lisp/international/mule-util.el
index e153c4e65a7..c87a4a0ea95 100644
--- a/lisp/international/mule-util.el
+++ b/lisp/international/mule-util.el
@@ -1,6 +1,6 @@
 ;;; mule-util.el --- utility functions for multilingual environment (mule)  
-*- lexical-binding:t -*-
 
-;; Copyright (C) 1997-1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/mule.el b/lisp/international/mule.el
index 6a794a84101..4f6addea387 100644
--- a/lisp/international/mule.el
+++ b/lisp/international/mule.el
@@ -1,6 +1,6 @@
 ;;; mule.el --- basic commands for multilingual environment  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/ogonek.el b/lisp/international/ogonek.el
index 216d2fd0f20..e2229be288e 100644
--- a/lisp/international/ogonek.el
+++ b/lisp/international/ogonek.el
@@ -1,6 +1,6 @@
 ;;; ogonek.el --- change the encoding of Polish diacritics  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Włodek Bzyl
 ;;        Ryszard Kubiak
diff --git a/lisp/international/quail.el b/lisp/international/quail.el
index e2ba485bbea..2ffe3392335 100644
--- a/lisp/international/quail.el
+++ b/lisp/international/quail.el
@@ -1,6 +1,6 @@
 ;;; quail.el --- provides simple input method for multilingual text  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997-1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/rfc1843.el b/lisp/international/rfc1843.el
index 73b610c0341..287096ad352 100644
--- a/lisp/international/rfc1843.el
+++ b/lisp/international/rfc1843.el
@@ -1,6 +1,6 @@
 ;;; rfc1843.el --- HZ (RFC 1843) decoding  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: news HZ HZ+ mail i18n
diff --git a/lisp/international/textsec-check.el 
b/lisp/international/textsec-check.el
index 99ffd397e23..6739f7b9a9d 100644
--- a/lisp/international/textsec-check.el
+++ b/lisp/international/textsec-check.el
@@ -1,6 +1,6 @@
 ;;; textsec-check.el --- Check for suspicious texts  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/international/textsec.el b/lisp/international/textsec.el
index f8ff89c314b..1540f806e3b 100644
--- a/lisp/international/textsec.el
+++ b/lisp/international/textsec.el
@@ -1,6 +1,6 @@
 ;;; textsec.el --- Functions for handling homoglyphs and the like  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/international/titdic-cnv.el b/lisp/international/titdic-cnv.el
index b942f5fabc2..abd4d3fd40b 100644
--- a/lisp/international/titdic-cnv.el
+++ b/lisp/international/titdic-cnv.el
@@ -1,6 +1,6 @@
 ;;; titdic-cnv.el --- convert cxterm dictionary (TIT format) to Quail package 
-*- coding: utf-8-emacs; lexical-binding:t -*-
 
-;; Copyright (C) 1997-1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/international/ucs-normalize.el 
b/lisp/international/ucs-normalize.el
index b6545faf807..aed7a6a1392 100644
--- a/lisp/international/ucs-normalize.el
+++ b/lisp/international/ucs-normalize.el
@@ -1,6 +1,6 @@
 ;;; ucs-normalize.el --- Unicode normalization NFC/NFD/NFKD/NFKC  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Taichi Kawabata <kawabata.taichi@gmail.com>
 ;; Keywords: unicode, normalization
diff --git a/lisp/international/utf-7.el b/lisp/international/utf-7.el
index c503bc2442b..335866f65ff 100644
--- a/lisp/international/utf-7.el
+++ b/lisp/international/utf-7.el
@@ -1,6 +1,6 @@
 ;;; utf-7.el --- utf-7 coding system  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: i18n, mail
diff --git a/lisp/international/utf7.el b/lisp/international/utf7.el
index ad29e7aa4dc..af66a7c2e01 100644
--- a/lisp/international/utf7.el
+++ b/lisp/international/utf7.el
@@ -1,6 +1,6 @@
 ;;; utf7.el --- UTF-7 encoding/decoding for Emacs   -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Jon K Hellan <hellan@acm.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 6a17d18c45e..bb46c89ae20 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -1,6 +1,6 @@
 ;;; isearch.el --- incremental search minor mode -*- lexical-binding: t -*-
 
-;; Copyright (C) 1992-1997, 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1997, 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Daniel LaLiberte <liberte@cs.uiuc.edu>
 ;; Maintainer: emacs-devel@gnu.org
@@ -181,7 +181,9 @@ When t (by default), signal an error when no more matches 
are found.
 Then after repeating the search, wrap with `isearch-wrap-function'.
 When `no', wrap immediately after reaching the last match.
 When `no-ding', wrap immediately without flashing the screen.
-When nil, never wrap, just stop at the last match."
+When nil, never wrap, just stop at the last match.
+With the values `no' and `no-ding' the search will try
+to wrap around also on typing a character."
   :type '(choice (const :tag "Pause before wrapping" t)
                  (const :tag "No pause before wrapping" no)
                  (const :tag "No pause and no flashing" no-ding)
@@ -880,6 +882,7 @@ matches literally, against one space.  You can toggle the 
value of this
 variable by the command `isearch-toggle-lax-whitespace', usually bound to
 `M-s SPC' during isearch."
   :type 'boolean
+  :group 'isearch
   :version "25.1")
 
 (defvar isearch-regexp-lax-whitespace nil
@@ -1179,6 +1182,7 @@ Each element of the list should be one of the symbols 
supported by
 `isearch-forward-thing-at-point' to yank the initial \"thing\"
 as text to the search string."
   :type '(repeat (symbol :tag "Thing symbol"))
+  :group 'isearch
   :version "28.1")
 
 (defun isearch-forward-thing-at-point ()
@@ -2525,10 +2529,11 @@ If no input items have been entered yet, just beep."
       (ding)
     (isearch-pop-state))
   ;; When going back to the hidden match, reopen it and close other overlays.
-  (when (and (eq search-invisible 'open) isearch-hide-immediately)
+  (when (and (eq isearch-invisible 'open) isearch-hide-immediately)
     (if isearch-other-end
-        (isearch-range-invisible (min (point) isearch-other-end)
-                                 (max (point) isearch-other-end))
+        (let ((search-invisible isearch-invisible))
+          (isearch-range-invisible (min (point) isearch-other-end)
+                                   (max (point) isearch-other-end)))
       (isearch-close-unnecessary-overlays (point) (point))))
   (isearch-update))
 
@@ -3718,8 +3723,14 @@ Optional third argument, if t, means if fail just return 
nil (no error).
 (defun isearch-open-overlay-temporary (ov)
   (if (not (null (overlay-get ov 'isearch-open-invisible-temporary)))
       ;; Some modes would want to open the overlays temporary during
-      ;; isearch in their own way, they should set the
-      ;; `isearch-open-invisible-temporary' to a function doing this.
+      ;; isearch in their own way, they should set the overlay's
+      ;; `isearch-open-invisible-temporary' property to a function
+      ;; doing this.
+      ;; Warning: if your code uses this technique, it should not
+      ;; delete the overlay passed to that function, since the values
+      ;; of the `invisible' property will be recorded on that overlay,
+      ;; to be restored after isearch is done with the text hidden by
+      ;; the overlay.
       (funcall  (overlay-get ov 'isearch-open-invisible-temporary)  ov nil)
     ;; Store the values for the `invisible' property, and then set it to nil.
     ;; This way the text hidden by this overlay becomes visible.
diff --git a/lisp/isearchb.el b/lisp/isearchb.el
index d11a5d2537b..85b0b636c6c 100644
--- a/lisp/isearchb.el
+++ b/lisp/isearchb.el
@@ -1,6 +1,6 @@
 ;;; isearchb.el --- a marriage between iswitchb and isearch  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/jit-lock.el b/lisp/jit-lock.el
index ed7a3dbba34..452cbd1ca51 100644
--- a/lisp/jit-lock.el
+++ b/lisp/jit-lock.el
@@ -1,6 +1,6 @@
 ;;; jit-lock.el --- just-in-time fontification  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <gerd@gnu.org>
 ;; Keywords: faces files
diff --git a/lisp/jka-cmpr-hook.el b/lisp/jka-cmpr-hook.el
index 0cfc80fe784..ad55475be25 100644
--- a/lisp/jka-cmpr-hook.el
+++ b/lisp/jka-cmpr-hook.el
@@ -1,6 +1,6 @@
 ;;; jka-cmpr-hook.el --- preloaded code to enable jka-compr.el  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1993-1995, 1997, 1999-2000, 2002-2022 Free Software
+;; Copyright (C) 1993-1995, 1997, 1999-2000, 2002-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Jay K. Adams <jka@ece.cmu.edu>
diff --git a/lisp/jka-compr.el b/lisp/jka-compr.el
index 420d83ab1f1..265df109669 100644
--- a/lisp/jka-compr.el
+++ b/lisp/jka-compr.el
@@ -1,6 +1,6 @@
 ;;; jka-compr.el --- reading/writing/loading compressed files  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1993-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2023 Free Software Foundation, Inc.
 
 ;; Author: Jay K. Adams <jka@ece.cmu.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/json.el b/lisp/json.el
index 13ec72d0122..5c2b46cdb4e 100644
--- a/lisp/json.el
+++ b/lisp/json.el
@@ -1,6 +1,6 @@
 ;;; json.el --- JavaScript Object Notation parser / generator -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Theresa O'Connor <ted@oconnor.cx>
 ;; Version: 1.5
diff --git a/lisp/jsonrpc.el b/lisp/jsonrpc.el
index 2d562610b3f..f583d116d20 100644
--- a/lisp/jsonrpc.el
+++ b/lisp/jsonrpc.el
@@ -1,6 +1,6 @@
 ;;; jsonrpc.el --- JSON-RPC library                  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: João Távora <joaotavora@gmail.com>
 ;; Keywords: processes, languages, extensions
diff --git a/lisp/kermit.el b/lisp/kermit.el
index 51396fbb655..7ee75141f6c 100644
--- a/lisp/kermit.el
+++ b/lisp/kermit.el
@@ -1,6 +1,6 @@
 ;;; kermit.el --- additions to shell mode for use with kermit -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1988, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Jeff Norden <jeff@colgate.csnet>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/keymap.el b/lisp/keymap.el
index b355f68aa2f..315eaab7560 100644
--- a/lisp/keymap.el
+++ b/lisp/keymap.el
@@ -1,6 +1,6 @@
 ;;; keymap.el --- Keymap functions  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -625,7 +625,7 @@ command exists in this specific map, but it doesn't have the
            `(defvar ,variable-name
               (define-keymap ,@(nreverse opts) ,@defs)
               ,@(and doc (list doc)))))
-      (if repeat
+      (if props
           `(progn
              ,defvar-form
              ,@(nreverse props))
diff --git a/lisp/kmacro.el b/lisp/kmacro.el
index 72420a67309..94d8794bd23 100644
--- a/lisp/kmacro.el
+++ b/lisp/kmacro.el
@@ -1,6 +1,6 @@
 ;;; kmacro.el --- enhanced keyboard macros -*- lexical-binding: t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <storm@cua.dk>
 ;; Keywords: keyboard convenience
diff --git a/lisp/language/china-util.el b/lisp/language/china-util.el
index d5c6160efb8..97301576ab8 100644
--- a/lisp/language/china-util.el
+++ b/lisp/language/china-util.el
@@ -1,6 +1,6 @@
 ;;; china-util.el --- utilities for Chinese  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/chinese.el b/lisp/language/chinese.el
index 3970b0d154d..26f1194aa4c 100644
--- a/lisp/language/chinese.el
+++ b/lisp/language/chinese.el
@@ -1,6 +1,6 @@
 ;;; chinese.el --- support for Chinese -*- coding: utf-8; lexical-binding: t; 
-*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/cyril-util.el b/lisp/language/cyril-util.el
index 5482b3ea306..0095338af45 100644
--- a/lisp/language/cyril-util.el
+++ b/lisp/language/cyril-util.el
@@ -1,6 +1,6 @@
 ;;; cyril-util.el --- utilities for Cyrillic scripts  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Keywords: mule, multilingual, Cyrillic
 
diff --git a/lisp/language/cyrillic.el b/lisp/language/cyrillic.el
index a9017062cc6..ffed1c808f7 100644
--- a/lisp/language/cyrillic.el
+++ b/lisp/language/cyrillic.el
@@ -1,6 +1,6 @@
 ;;; cyrillic.el --- support for Cyrillic -*- coding: utf-8; lexical-binding: 
t; -*-
 
-;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/czech.el b/lisp/language/czech.el
index de80b73b3fc..e3fe42026a5 100644
--- a/lisp/language/czech.el
+++ b/lisp/language/czech.el
@@ -1,6 +1,6 @@
 ;;; czech.el --- support for Czech -*- coding: utf-8; lexical-binding: t -*-
 
-;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Milan Zamazal <pdm@zamazal.org>
 ;; Maintainer: Pavel Janík <Pavel@Janik.cz>
diff --git a/lisp/language/english.el b/lisp/language/english.el
index 278951121a6..b8334d90863 100644
--- a/lisp/language/english.el
+++ b/lisp/language/english.el
@@ -1,6 +1,6 @@
 ;;; english.el --- support for English  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/ethio-util.el b/lisp/language/ethio-util.el
index 5b4252d779c..fe61a4e8560 100644
--- a/lisp/language/ethio-util.el
+++ b/lisp/language/ethio-util.el
@@ -1,6 +1,6 @@
 ;;; ethio-util.el --- utilities for Ethiopic   -*- coding: utf-8-emacs; 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997-1998, 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2002-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/ethiopic.el b/lisp/language/ethiopic.el
index fb1e2728436..475d569d56d 100644
--- a/lisp/language/ethiopic.el
+++ b/lisp/language/ethiopic.el
@@ -1,6 +1,6 @@
 ;;; ethiopic.el --- support for Ethiopic       -*- coding: utf-8-emacs; 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/european.el b/lisp/language/european.el
index 18b72bd3b2b..d65acb95979 100644
--- a/lisp/language/european.el
+++ b/lisp/language/european.el
@@ -1,6 +1,6 @@
 ;;; european.el --- support for European languages -*- coding: utf-8; 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997-1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/georgian.el b/lisp/language/georgian.el
index a268b8c23fd..32d9425c09a 100644
--- a/lisp/language/georgian.el
+++ b/lisp/language/georgian.el
@@ -1,6 +1,6 @@
 ;;; georgian.el --- language support for Georgian  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: i18n
diff --git a/lisp/language/greek.el b/lisp/language/greek.el
index 920cf67d871..0c3e5e0633f 100644
--- a/lisp/language/greek.el
+++ b/lisp/language/greek.el
@@ -1,6 +1,6 @@
 ;;; greek.el --- support for Greek  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2002, 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2013-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/hanja-util.el b/lisp/language/hanja-util.el
index 0c2419c91cd..be0364b1c23 100644
--- a/lisp/language/hanja-util.el
+++ b/lisp/language/hanja-util.el
@@ -1,6 +1,6 @@
 ;;; hanja-util.el --- Korean Hanja util module  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Jihyun Cho <jihyun.jo@gmail.com>
 ;; Keywords: multilingual, input method, Korean, Hanja
diff --git a/lisp/language/hebrew.el b/lisp/language/hebrew.el
index 6cec9f1274e..2c0398888b2 100644
--- a/lisp/language/hebrew.el
+++ b/lisp/language/hebrew.el
@@ -1,6 +1,6 @@
 ;;; hebrew.el --- support for Hebrew -*- coding: utf-8; lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/ind-util.el b/lisp/language/ind-util.el
index 447ca0c20cc..71117deef56 100644
--- a/lisp/language/ind-util.el
+++ b/lisp/language/ind-util.el
@@ -1,6 +1,6 @@
 ;;; ind-util.el --- Transliteration and Misc. Tools for Indian Languages -*- 
coding: utf-8-emacs; lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Keywords: multilingual, Indian, Devanagari
 
diff --git a/lisp/language/indian.el b/lisp/language/indian.el
index f70f7fcce17..d5964823501 100644
--- a/lisp/language/indian.el
+++ b/lisp/language/indian.el
@@ -1,6 +1,6 @@
 ;;; indian.el --- Indian languages support -*- coding: utf-8; lexical-binding: 
t; -*-
 
-;; Copyright (C) 1997, 1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H14PRO021
diff --git a/lisp/language/indonesian.el b/lisp/language/indonesian.el
index 5afcd27759d..e0990c8320a 100644
--- a/lisp/language/indonesian.el
+++ b/lisp/language/indonesian.el
@@ -1,6 +1,6 @@
 ;;; indonesian.el --- Indonesian languages support  -*- coding: utf-8; 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: समीर सिंह Sameer Singh <lumarzeli30@gmail.com>
 ;; Keywords: multilingual, input method, i18n, Indonesia
diff --git a/lisp/language/japan-util.el b/lisp/language/japan-util.el
index 34248117559..d60b163ae94 100644
--- a/lisp/language/japan-util.el
+++ b/lisp/language/japan-util.el
@@ -1,6 +1,6 @@
 ;;; japan-util.el --- utilities for Japanese  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/japanese.el b/lisp/language/japanese.el
index 666ebad62f5..681dc9d7b92 100644
--- a/lisp/language/japanese.el
+++ b/lisp/language/japanese.el
@@ -1,6 +1,6 @@
 ;;; japanese.el --- support for Japanese  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/korea-util.el b/lisp/language/korea-util.el
index 9a6ab1b2495..764a58bd7d2 100644
--- a/lisp/language/korea-util.el
+++ b/lisp/language/korea-util.el
@@ -1,6 +1,6 @@
 ;;; korea-util.el --- utilities for Korean  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997, 1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
 ;;   2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/korean.el b/lisp/language/korean.el
index bc68d56b24e..fef5796bc4b 100644
--- a/lisp/language/korean.el
+++ b/lisp/language/korean.el
@@ -1,6 +1,6 @@
 ;;; korean.el --- support for Korean -*- coding: utf-8; lexical-binding: t; -*-
 
-;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/lao-util.el b/lisp/language/lao-util.el
index 51a947cc72d..6b9a8984414 100644
--- a/lisp/language/lao-util.el
+++ b/lisp/language/lao-util.el
@@ -1,6 +1,6 @@
 ;;; lao-util.el --- utilities for Lao -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
 ;;   2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/lao.el b/lisp/language/lao.el
index 0ad5b9f84e3..875d5b49d52 100644
--- a/lisp/language/lao.el
+++ b/lisp/language/lao.el
@@ -1,6 +1,6 @@
 ;;; lao.el --- support for Lao -*- coding: utf-8; lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
 ;;   2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/misc-lang.el b/lisp/language/misc-lang.el
index 230db3b100c..fe283e8769c 100644
--- a/lisp/language/misc-lang.el
+++ b/lisp/language/misc-lang.el
@@ -1,6 +1,6 @@
 ;;; misc-lang.el --- support for miscellaneous languages (characters)  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/philippine.el b/lisp/language/philippine.el
index ce619bdaa1d..e4a79b02a44 100644
--- a/lisp/language/philippine.el
+++ b/lisp/language/philippine.el
@@ -1,6 +1,6 @@
 ;;; philippine.el --- Philippine languages support  -*- coding: utf-8; 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: समीर सिंह Sameer Singh <lumarzeli30@gmail.com>
 ;; Keywords: multilingual, input method, i18n, Philippines
diff --git a/lisp/language/romanian.el b/lisp/language/romanian.el
index 972326c7a83..a18b7d0cda2 100644
--- a/lisp/language/romanian.el
+++ b/lisp/language/romanian.el
@@ -1,6 +1,6 @@
 ;;; romanian.el --- support for Romanian -*- coding: utf-8; lexical-binding: t 
-*-
 
-;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dan Nicolaescu <done@ece.arizona.edu>
 ;; Keywords: multilingual, Romanian, i18n
diff --git a/lisp/language/slovak.el b/lisp/language/slovak.el
index cc0c6e2e029..eb49e6d598a 100644
--- a/lisp/language/slovak.el
+++ b/lisp/language/slovak.el
@@ -1,6 +1,6 @@
 ;;; slovak.el --- support for Slovak -*- coding: utf-8; lexical-binding: t -*-
 
-;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Authors:    Tibor Šimko <tibor.simko@fmph.uniba.sk>,
 ;;             Milan Zamazal <pdm@zamazal.org>
diff --git a/lisp/language/tai-viet.el b/lisp/language/tai-viet.el
index 9029aa391f0..266de0600fe 100644
--- a/lisp/language/tai-viet.el
+++ b/lisp/language/tai-viet.el
@@ -1,6 +1,6 @@
 ;;; tai-viet.el --- support for Tai Viet -*- coding: utf-8; lexical-binding: t 
-*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H13PRO009
diff --git a/lisp/language/thai-util.el b/lisp/language/thai-util.el
index 6c004e9495c..e539e8e3c9d 100644
--- a/lisp/language/thai-util.el
+++ b/lisp/language/thai-util.el
@@ -1,6 +1,6 @@
 ;;; thai-util.el --- utilities for Thai -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/thai.el b/lisp/language/thai.el
index 60f5f9d2a38..2e05e9b5db2 100644
--- a/lisp/language/thai.el
+++ b/lisp/language/thai.el
@@ -1,6 +1,6 @@
 ;;; thai.el --- support for Thai -*- coding: utf-8; lexical-binding: t; -*-
 
-;; Copyright (C) 1997-1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/tibet-util.el b/lisp/language/tibet-util.el
index 0f09c48d6d6..b38d5230f93 100644
--- a/lisp/language/tibet-util.el
+++ b/lisp/language/tibet-util.el
@@ -1,6 +1,6 @@
 ;;; tibet-util.el --- utilities for Tibetan   -*- coding: utf-8-emacs; 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/tibetan.el b/lisp/language/tibetan.el
index 81210457897..1292092c582 100644
--- a/lisp/language/tibetan.el
+++ b/lisp/language/tibetan.el
@@ -1,6 +1,6 @@
 ;;; tibetan.el --- support for Tibetan language -*- coding: utf-8-emacs; 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/utf-8-lang.el b/lisp/language/utf-8-lang.el
index f709f6fbd87..4ecf8b8f50b 100644
--- a/lisp/language/utf-8-lang.el
+++ b/lisp/language/utf-8-lang.el
@@ -1,6 +1,6 @@
 ;;; utf-8-lang.el --- generic UTF-8 language environment  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: i18n
diff --git a/lisp/language/viet-util.el b/lisp/language/viet-util.el
index 9751fc0e393..40b4426399f 100644
--- a/lisp/language/viet-util.el
+++ b/lisp/language/viet-util.el
@@ -1,6 +1,6 @@
 ;;; viet-util.el --- utilities for Vietnamese  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/vietnamese.el b/lisp/language/vietnamese.el
index cd574bb5d5e..bd0b3c5ae3e 100644
--- a/lisp/language/vietnamese.el
+++ b/lisp/language/vietnamese.el
@@ -1,6 +1,6 @@
 ;;; vietnamese.el --- support for Vietnamese -*- coding: utf-8; 
lexical-binding: t -*-
 
-;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el
index 2639c5cceb4..c21955c3f06 100644
--- a/lisp/ldefs-boot.el
+++ b/lisp/ldefs-boot.el
@@ -4631,7 +4631,7 @@ For use inside Lisp programs, see also 
`c-macro-expansion'.
 
 ;;; Generated autoloads from progmodes/cmake-ts-mode.el
 
-(add-to-list 'auto-mode-alist '("\\(?:CMakeLists\\.txt\\|\\.cmake\\)$" . 
cmake-ts-mode))
+(add-to-list 'auto-mode-alist '("\\(?:CMakeLists\\.txt\\|\\.cmake\\)\\'" . 
cmake-ts-mode))
 (autoload 'cmake-ts-mode "cmake-ts-mode" "\
 Major mode for editing CMake files, powered by tree-sitter.
 
@@ -8673,9 +8673,9 @@ it is disabled.
 
 (defvar edebug-all-defs nil "\
 If non-nil, evaluating defining forms instruments for Edebug.
-This applies to `eval-defun', `eval-region', `eval-buffer', and
-`eval-current-buffer'.  `eval-region' is also called by
-`eval-last-sexp', and `eval-print-last-sexp'.
+This applies to `eval-defun', `eval-region' and `eval-buffer'.
+`eval-region' is also called by `eval-last-sexp', and
+`eval-print-last-sexp'.
 
 You can use the command `edebug-all-defs' to toggle the value of this
 variable.  You may wish to make it local to each buffer with
@@ -9136,7 +9136,7 @@ Turn on EDT Emulation." t)
 
 ;;; Generated autoloads from progmodes/eglot.el
 
-(push (purecopy '(eglot 1 9)) package--builtin-versions)
+(push (purecopy '(eglot 1 10)) package--builtin-versions)
 (autoload 'eglot "eglot" "\
 Start LSP server in support of PROJECT's buffers under MANAGED-MAJOR-MODE.
 
@@ -9394,10 +9394,11 @@ it is disabled.
 (autoload 'elide-head "elide-head" "\
 Hide header material in buffer according to `elide-head-headers-to-hide'.
 
-The header is made invisible with an overlay.  With a prefix arg, show
-an elided material again.
+The header is made invisible with an overlay.  With a prefix
+argument ARG, show an elided material again.
 
-This is suitable as an entry on `find-file-hook' or appropriate mode hooks.
+This is suitable as an entry on `find-file-hook' or appropriate
+mode hooks.
 
 (fn &optional ARG)" t)
 (make-obsolete 'elide-head 'elide-head-mode "29.1")
@@ -10118,9 +10119,7 @@ then the server and full-name will be set to those 
values,
 whereas `erc-compute-port' and `erc-compute-nick' will be invoked
 for the values of the other parameters.
 
-When present, ID should be an opaque object used to identify the
-connection unequivocally.  This is rarely needed and not available
-interactively.
+See `erc-tls' for the meaning of ID.
 
 (fn &key (SERVER (erc-compute-server)) (PORT (erc-compute-port)) (NICK 
(erc-compute-nick)) (USER (erc-compute-user)) PASSWORD (FULL-NAME 
(erc-compute-full-name)) ID)" t)
 (defalias 'erc-select #'erc)
@@ -10135,6 +10134,7 @@ Non-interactively, it takes the keyword arguments
    (server (erc-compute-server))
    (port   (erc-compute-port))
    (nick   (erc-compute-nick))
+   (user   (erc-compute-user))
    password
    (full-name (erc-compute-full-name))
    client-certificate
@@ -10163,11 +10163,11 @@ Example usage:
              \\='(\"/home/bandali/my-cert.key\"
                \"/home/bandali/my-cert.crt\"))
 
-When present, ID should be an opaque object for identifying the
-connection unequivocally.  (In most cases, this would be a string or a
-symbol composed of letters from the Latin alphabet.)  This option is
-generally unneeded, however.  See info node `(erc) Connecting' for use
-cases.  Not available interactively.
+When present, ID should be a symbol or a string to use for naming
+the server buffer and identifying the connection unequivocally.
+See info node `(erc) Network Identifier' for details.  Like USER
+and CLIENT-CERTIFICATE, this parameter cannot be specified
+interactively.
 
 (fn &key (SERVER (erc-compute-server)) (PORT (erc-compute-port \\='ircs-u)) 
(NICK (erc-compute-nick)) (USER (erc-compute-user)) PASSWORD (FULL-NAME 
(erc-compute-full-name)) CLIENT-CERTIFICATE ID)" t)
 (autoload 'erc-handle-irc-url "erc" "\
@@ -14343,6 +14343,21 @@ Add the window configuration CONF to 
`gnus-buffer-configuration'.
 (register-definition-prefixes "gnutls" '("gnutls-" "open-gnutls-stream"))
 
 
+;;; Generated autoloads from progmodes/go-ts-mode.el
+
+(add-to-list 'auto-mode-alist '("\\.go\\'" . go-ts-mode))
+(autoload 'go-ts-mode "go-ts-mode" "\
+Major mode for editing Go, powered by tree-sitter.
+
+(fn)" t)
+(add-to-list 'auto-mode-alist '("/go\\.mod\\'" . go-mod-ts-mode))
+(autoload 'go-mod-ts-mode "go-ts-mode" "\
+Major mode for editing go.mod files, powered by tree-sitter.
+
+(fn)" t)
+(register-definition-prefixes "go-ts-mode" '("go-"))
+
+
 ;;; Generated autoloads from play/gomoku.el
 
 (autoload 'gomoku "gomoku" "\
@@ -18624,7 +18639,7 @@ Major mode for editing JSON, powered by tree-sitter.
 
 ;;; Generated autoloads from jsonrpc.el
 
-(push (purecopy '(jsonrpc 1 0 15)) package--builtin-versions)
+(push (purecopy '(jsonrpc 1 0 16)) package--builtin-versions)
 (register-definition-prefixes "jsonrpc" '("jsonrpc-"))
 
 
@@ -23399,6 +23414,11 @@ the `Version:' header.")
 (defcustom package-quickstart-file (locate-user-emacs-file 
"package-quickstart.el") "\
 Location of the file used to speed up activation of packages at startup." 
:type 'file :group 'applications :initialize #'custom-initialize-delay :version 
"27.1")
 (custom-autoload 'package-quickstart-file "package" t)
+(autoload 'package-report-bug "package" "\
+Prepare a message to send to the maintainers of a package.
+DESC must be a `package-desc' object.
+
+(fn DESC)" '(package-menu-mode))
 (register-definition-prefixes "package" '("bad-signature" "define-package" 
"describe-package-1" "package-"))
 
 
@@ -23480,7 +23500,7 @@ uses `package-vc-heuristic-alist' to guess the backend.
 Note that by default, a VC package will be prioritized over a
 regular package, but it will not remove a VC package.
 
-(fn PACKAGE &optional NAME REV BACKEND)" t)
+(fn PACKAGE &optional REV BACKEND)" t)
 (autoload 'package-vc-checkout "package-vc" "\
 Clone the sources for PKG-DESC into DIRECTORY and visit that directory.
 Unlike `package-vc-install', this does not yet set up the package
@@ -27335,6 +27355,16 @@ it is disabled.
 (register-definition-prefixes "ruler-mode" '("ruler-"))
 
 
+;;; Generated autoloads from progmodes/rust-ts-mode.el
+
+(add-to-list 'auto-mode-alist '("\\.rs\\'" . rust-ts-mode))
+(autoload 'rust-ts-mode "rust-ts-mode" "\
+Major mode for editing Rust, powered by tree-sitter.
+
+(fn)" t)
+(register-definition-prefixes "rust-ts-mode" '("rust-ts-mode-"))
+
+
 ;;; Generated autoloads from emacs-lisp/rx.el
 
 (autoload 'rx-to-string "rx" "\
@@ -29548,7 +29578,8 @@ is specified in the connection settings.
 Run PRODUCT interpreter as an inferior process.
 
 If buffer `*SQL*' exists but no process is running, make a new process.
-If buffer exists and a process is running, just switch to buffer `*SQL*'.
+If buffer exists and a process is running, just make sure buffer `*SQL*'
+is displayed.
 
 To specify the SQL product, prefix the call with
 \\[universal-argument].  To set the buffer name as well, prefix
@@ -30191,7 +30222,10 @@ Return the width of STRING in pixels.
 (fn STRING)")
 (autoload 'string-glyph-split "subr-x" "\
 Split STRING into a list of strings representing separate glyphs.
-This takes into account combining characters and grapheme clusters.
+This takes into account combining characters and grapheme clusters:
+if compositions are enbaled, each sequence of characters composed
+on display into a single grapheme cluster is treated as a single
+indivisible unit.
 
 (fn STRING)")
 (autoload 'add-display-text-property "subr-x" "\
@@ -32373,6 +32407,16 @@ Mode for displaying and reprioritizing top priority 
Todo.
 (register-definition-prefixes "todo-mode" '("todo-"))
 
 
+;;; Generated autoloads from textmodes/toml-ts-mode.el
+
+(add-to-list 'auto-mode-alist '("\\.toml\\'" . toml-ts-mode))
+(autoload 'toml-ts-mode "toml-ts-mode" "\
+Major mode for editing TOML, powered by tree-sitter.
+
+(fn)" t)
+(register-definition-prefixes "toml-ts-mode" '("toml-ts-mode-"))
+
+
 ;;; Generated autoloads from tool-bar.el
 
 (autoload 'toggle-tool-bar-mode-from-frame "tool-bar" "\
@@ -34386,7 +34430,7 @@ revision, with SUBJECT derived from each revision 
subject.
 When invoked with a numerical prefix argument, use the last N
 revisions.
 When invoked interactively in a Log View buffer with
-marked revisions, use those these.
+marked revisions, use those.
 
 (fn ADDRESSEE SUBJECT REVISIONS)" t)
 (register-definition-prefixes "vc" '("vc-" "with-vc-properties"))
@@ -34655,7 +34699,7 @@ Key bindings:
 
 ;;; Generated autoloads from progmodes/verilog-mode.el
 
-(push (purecopy '(verilog-mode 2021 10 14 127365406)) 
package--builtin-versions)
+(push (purecopy '(verilog-mode 2022 12 18 181110314)) 
package--builtin-versions)
 (autoload 'verilog-mode "verilog-mode" "\
 Major mode for editing Verilog code.
 \\<verilog-mode-map>
@@ -34689,6 +34733,11 @@ Variables controlling indentation/edit style:
    function keyword.
  `verilog-indent-level-directive'     (default 1)
    Indentation of \\=`ifdef/\\=`endif blocks.
+ `verilog-indent-ignore-multiline-defines' (default t)
+   Non-nil means ignore indentation on lines that are part of a multiline
+   define.
+ `verilog-indent-ignore-regexp'     (default nil
+   Regexp that matches lines that should be ignored for indentation.
  `verilog-cexp-indent'              (default 1)
    Indentation of Verilog statements broken across lines i.e.:
       if (a)
@@ -34712,6 +34761,9 @@ Variables controlling indentation/edit style:
    otherwise you get:
       if (a)
       begin
+ `verilog-indent-class-inside-pkg'  (default t)
+   Non-nil means indent classes inside packages.
+   Otherwise, classes have zero indentation.
  `verilog-auto-endcomments'         (default t)
    Non-nil means a comment /* ... */ is set after the ends which ends
    cases, tasks, functions and modules.
@@ -34721,6 +34773,17 @@ Variables controlling indentation/edit style:
    will be inserted.  Setting this variable to zero results in every
    end acquiring a comment; the default avoids too many redundant
    comments in tight quarters.
+ `verilog-align-decl-expr-comments' (default t)
+   Non-nil means align declaration and expressions comments.
+ `verilog-align-comment-distance'   (default 1)
+   Distance (in spaces) between longest declaration and comments.
+   Only works if `verilog-align-decl-expr-comments' is non-nil.
+ `verilog-align-assign-expr'        (default nil)
+   Non-nil means align expressions of continuous assignments.
+ `verilog-align-typedef-regexp'     (default nil)
+   Regexp that matches user typedefs for declaration alignment.
+ `verilog-align-typedef-words'      (default nil)
+   List of words that match user typedefs for declaration alignment.
  `verilog-auto-lineup'              (default `declarations')
    List of contexts where auto lineup of code should be done.
 
@@ -34744,17 +34807,20 @@ Some other functions are:
     \\[verilog-mark-defun]  Mark function.
     \\[verilog-beg-of-defun]  Move to beginning of current function.
     \\[verilog-end-of-defun]  Move to end of current function.
-    \\[verilog-label-be]  Label matching begin ... end, fork ... join, etc 
statements.
+    \\[verilog-label-be]  Label matching begin ... end, fork ... join, etc
+                          statements.
 
     \\[verilog-comment-region]  Put marked area in a comment.
-    \\[verilog-uncomment-region]  Uncomment an area commented with 
\\[verilog-comment-region].
+    \\[verilog-uncomment-region]  Uncomment an area commented with
+                                  \\[verilog-comment-region].
     \\[verilog-insert-block]  Insert begin ... end.
     \\[verilog-star-comment]    Insert /* ... */.
 
     \\[verilog-sk-always]  Insert an always @(AS) begin .. end block.
     \\[verilog-sk-begin]  Insert a begin .. end block.
     \\[verilog-sk-case]  Insert a case block, prompting for details.
-    \\[verilog-sk-for]  Insert a for (...) begin .. end block, prompting for 
details.
+    \\[verilog-sk-for]  Insert a for (...) begin .. end block, prompting for
+                        details.
     \\[verilog-sk-generate]  Insert a generate .. endgenerate block.
     \\[verilog-sk-header]  Insert a header block at the top of file.
     \\[verilog-sk-initial]  Insert an initial begin .. end block.
@@ -34777,14 +34843,17 @@ Some other functions are:
     \\[verilog-sk-else-if]  Insert an else if (..) begin .. end block.
     \\[verilog-sk-comment]  Insert a comment block.
     \\[verilog-sk-assign]  Insert an assign .. = ..; statement.
-    \\[verilog-sk-function]  Insert a function .. begin .. end endfunction 
block.
+    \\[verilog-sk-function]  Insert a function .. begin .. end endfunction
+                             block.
     \\[verilog-sk-input]  Insert an input declaration, prompting for details.
     \\[verilog-sk-output]  Insert an output declaration, prompting for details.
-    \\[verilog-sk-state-machine]  Insert a state machine definition, prompting 
for details.
+    \\[verilog-sk-state-machine]  Insert a state machine definition, prompting
+                                  for details.
     \\[verilog-sk-inout]  Insert an inout declaration, prompting for details.
     \\[verilog-sk-wire]  Insert a wire declaration, prompting for details.
     \\[verilog-sk-reg]  Insert a register declaration, prompting for details.
-    \\[verilog-sk-define-signal]  Define signal under point as a register at 
the top of the module.
+    \\[verilog-sk-define-signal]  Define signal under point as a register at
+                                  the top of the module.
 
 All key bindings can be seen in a Verilog-buffer with \\[describe-bindings].
 Key bindings specific to `verilog-mode-map' are:
@@ -35903,6 +35972,7 @@ The mode's hook is called both when the mode is enabled 
and when
 it is disabled.
 
 (fn &optional ARG)" t)
+(put 'global-whitespace-mode 'globalized-minor-mode t)
 (defvar global-whitespace-mode nil "\
 Non-nil if Global Whitespace mode is enabled.
 See the `global-whitespace-mode' command
@@ -35912,25 +35982,18 @@ either customize it (see the info node `Easy 
Customization')
 or call the function `global-whitespace-mode'.")
 (custom-autoload 'global-whitespace-mode "whitespace" nil)
 (autoload 'global-whitespace-mode "whitespace" "\
-Toggle whitespace visualization globally (Global Whitespace mode).
-
-See also `whitespace-style', `whitespace-newline' and
-`whitespace-display-mappings'.
-
-This is a global minor mode.  If called interactively, toggle the
-`Global Whitespace mode' mode.  If the prefix argument is
-positive, enable the mode, and if it is zero or negative, disable
-the mode.
+Toggle Whitespace mode in all buffers.
+With prefix ARG, enable Global Whitespace mode if ARG is positive;
+otherwise, disable it.
 
-If called from Lisp, toggle the mode if ARG is `toggle'.  Enable
-the mode if ARG is nil, omitted, or is a positive number.
+If called from Lisp, toggle the mode if ARG is `toggle'.
+Enable the mode if ARG is nil, omitted, or is a positive number.
 Disable the mode if ARG is a negative number.
 
-To check whether the minor mode is enabled in the current buffer,
-evaluate `(default-value \\='global-whitespace-mode)'.
+Whitespace mode is enabled in all buffers where
+`whitespace-turn-on-if-enabled' would do it.
 
-The mode's hook is called both when the mode is enabled and when
-it is disabled.
+See `whitespace-mode' for more information on Whitespace mode.
 
 (fn &optional ARG)" t)
 (defvar global-whitespace-newline-mode nil "\
@@ -36894,6 +36957,16 @@ a new xwidget-webkit session, otherwise use an 
existing session.
 (register-definition-prefixes "xwidget" '("xwidget-"))
 
 
+;;; Generated autoloads from textmodes/yaml-ts-mode.el
+
+(add-to-list 'auto-mode-alist '("\\.ya?ml\\'" . yaml-ts-mode))
+(autoload 'yaml-ts-mode "yaml-ts-mode" "\
+Major mode for editing YAML, powered by tree-sitter.
+
+(fn)" t)
+(register-definition-prefixes "yaml-ts-mode" '("yaml-ts-mode--"))
+
+
 ;;; Generated autoloads from yank-media.el
 
 (autoload 'yank-media "yank-media" "\
diff --git a/lisp/leim/quail/arabic.el b/lisp/leim/quail/arabic.el
index 8d13538ce93..83a7c12147f 100644
--- a/lisp/leim/quail/arabic.el
+++ b/lisp/leim/quail/arabic.el
@@ -1,6 +1,6 @@
 ;;; arabic.el --- Quail package for inputting Arabic   -*- coding: utf-8; 
lexical-binding:t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Cloos <cloos@jhcloos.com>
 ;; Keywords: mule, input method, Arabic
diff --git a/lisp/leim/quail/cham.el b/lisp/leim/quail/cham.el
index 0ee437e0270..1778fa312c8 100644
--- a/lisp/leim/quail/cham.el
+++ b/lisp/leim/quail/cham.el
@@ -1,6 +1,6 @@
 ;;; cham.el --- Quail package for inputting Cham characters  -*- coding: 
utf-8; lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Eli Zaretskii <eliz@gnu.org>
 ;; Keywords: i18n
diff --git a/lisp/leim/quail/compose.el b/lisp/leim/quail/compose.el
index 60c73d7dff8..3200943f724 100644
--- a/lisp/leim/quail/compose.el
+++ b/lisp/leim/quail/compose.el
@@ -1,6 +1,6 @@
 ;;; compose.el --- Quail package for Multi_key character composition 
-*-coding: utf-8; lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <juri@linkov.net>
 ;; Keywords: multilingual, input method, i18n
diff --git a/lisp/leim/quail/croatian.el b/lisp/leim/quail/croatian.el
index a6ec937cdc1..84dd8b1e459 100644
--- a/lisp/leim/quail/croatian.el
+++ b/lisp/leim/quail/croatian.el
@@ -1,6 +1,6 @@
 ;;; croatian.el --- Quail package for inputting Croatian  -*-coding: utf-8; 
lexical-binding:t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Hrvoje Nikšić <hrvoje.niksic@avl.com>
 ;; Keywords: i18n
diff --git a/lisp/leim/quail/cyril-jis.el b/lisp/leim/quail/cyril-jis.el
index 2674b5a6aac..f25cc0efe25 100644
--- a/lisp/leim/quail/cyril-jis.el
+++ b/lisp/leim/quail/cyril-jis.el
@@ -1,6 +1,6 @@
 ;;; cyril-jis.el --- Quail package for inputting JISX0208 Cyrillic letters  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/cyrillic.el b/lisp/leim/quail/cyrillic.el
index 1ebbea8eb0d..ba0b9c9ca12 100644
--- a/lisp/leim/quail/cyrillic.el
+++ b/lisp/leim/quail/cyrillic.el
@@ -1,6 +1,6 @@
 ;;; cyrillic.el --- Quail package for inputting Cyrillic characters  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/czech.el b/lisp/leim/quail/czech.el
index 257bf5a929a..90ee15ad3b4 100644
--- a/lisp/leim/quail/czech.el
+++ b/lisp/leim/quail/czech.el
@@ -1,6 +1,6 @@
 ;;; czech.el --- Quail package for inputting Czech -*-coding: utf-8; 
lexical-binding:t -*-
 
-;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Milan Zamazal <pdm@zamazal.org>
 ;; Maintainer: Pavel Janík <Pavel@Janik.cz>
diff --git a/lisp/leim/quail/emoji.el b/lisp/leim/quail/emoji.el
index f9d3e170be5..553b0f8d966 100644
--- a/lisp/leim/quail/emoji.el
+++ b/lisp/leim/quail/emoji.el
@@ -1,6 +1,6 @@
 ;;; emoji.el --- Quail package for emoji character composition -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <juri@linkov.net>
 ;; Keywords: multilingual, input method, i18n
diff --git a/lisp/leim/quail/georgian.el b/lisp/leim/quail/georgian.el
index 58b0ee7bcde..54501c80bd6 100644
--- a/lisp/leim/quail/georgian.el
+++ b/lisp/leim/quail/georgian.el
@@ -1,6 +1,6 @@
 ;;; georgian.el --- Quail package for inputting Georgian characters  -*- 
coding: utf-8; lexical-binding:t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: i18n
diff --git a/lisp/leim/quail/greek.el b/lisp/leim/quail/greek.el
index 4d0e468d5de..107f4131e38 100644
--- a/lisp/leim/quail/greek.el
+++ b/lisp/leim/quail/greek.el
@@ -1,6 +1,6 @@
 ;;; greek.el --- Quail package for inputting Greek -*- coding: utf-8; 
lexical-binding:t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/hangul.el b/lisp/leim/quail/hangul.el
index 89b9abe137e..46a2e5a6ba2 100644
--- a/lisp/leim/quail/hangul.el
+++ b/lisp/leim/quail/hangul.el
@@ -1,6 +1,6 @@
 ;;; hangul.el --- Korean Hangul input method  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Jihyun Cho <jihyun.jo@gmail.com>
 ;; Keywords: multilingual, input method, Korean, Hangul
diff --git a/lisp/leim/quail/hanja.el b/lisp/leim/quail/hanja.el
index e3db65b84bf..5aa76ad1e82 100644
--- a/lisp/leim/quail/hanja.el
+++ b/lisp/leim/quail/hanja.el
@@ -1,6 +1,6 @@
 ;;; hanja.el --- Quail-package for Korean Hanja (KSC5601)  -*-coding: utf-8; 
lexical-binding: t -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/hanja3.el b/lisp/leim/quail/hanja3.el
index 50e5df30185..7b5caa66615 100644
--- a/lisp/leim/quail/hanja3.el
+++ b/lisp/leim/quail/hanja3.el
@@ -1,6 +1,6 @@
 ;;; hanja3.el --- Quail-package for Korean Hanja (KSC5601)  -*-coding: utf-8; 
lexical-binding: t -*-
 
-;; Copyright (C) 1997, 1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Koaunghi Un <koaunghi.un@zdv.uni-tuebingen.de>
 ;; Keywords: mule, quail, multilingual, input method, Korean, Hanja
diff --git a/lisp/leim/quail/indian.el b/lisp/leim/quail/indian.el
index 8fe81a22173..a30028329c4 100644
--- a/lisp/leim/quail/indian.el
+++ b/lisp/leim/quail/indian.el
@@ -1,6 +1,6 @@
 ;;; indian.el --- Quail packages for inputting Indian  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: KAWABATA, Taichi <kawabata@m17n.org>
 
diff --git a/lisp/leim/quail/indonesian.el b/lisp/leim/quail/indonesian.el
index 8d0d158076a..6da2e9a6e86 100644
--- a/lisp/leim/quail/indonesian.el
+++ b/lisp/leim/quail/indonesian.el
@@ -1,6 +1,6 @@
 ;;; indonesian.el --- Quail package for inputting Indonesian characters  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: समीर सिंह Sameer Singh <lumarzeli30@gmail.com>
 ;; Keywords: multilingual, input method, i18n, Indonesia
diff --git a/lisp/leim/quail/ipa-praat.el b/lisp/leim/quail/ipa-praat.el
index 3f0bd9f17c5..58d2f5e55fb 100644
--- a/lisp/leim/quail/ipa-praat.el
+++ b/lisp/leim/quail/ipa-praat.el
@@ -1,6 +1,6 @@
 ;;; ipa-praat.el --- Inputting IPA characters with the conventions of Praat  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Oliver Scholz <epameinondas@gmx.de>
 ;; Keywords: multilingual, input method, IPA
diff --git a/lisp/leim/quail/ipa.el b/lisp/leim/quail/ipa.el
index 773dc31f9b7..704d18ddc5f 100644
--- a/lisp/leim/quail/ipa.el
+++ b/lisp/leim/quail/ipa.el
@@ -1,6 +1,6 @@
 ;;; ipa.el --- Quail package for inputting IPA characters  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/japanese.el b/lisp/leim/quail/japanese.el
index fb8b9e61665..1caaf9d93da 100644
--- a/lisp/leim/quail/japanese.el
+++ b/lisp/leim/quail/japanese.el
@@ -1,6 +1,6 @@
 ;;; japanese.el --- Quail package for inputting Japanese  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/latin-alt.el b/lisp/leim/quail/latin-alt.el
index 10e2050d08f..e269a47fb02 100644
--- a/lisp/leim/quail/latin-alt.el
+++ b/lisp/leim/quail/latin-alt.el
@@ -1,6 +1,6 @@
 ;;; latin-alt.el --- Quail package for inputting various European characters 
-*-coding: utf-8; lexical-binding: t -*-
 
-;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
 ;;   2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/latin-ltx.el b/lisp/leim/quail/latin-ltx.el
index f7655d2efc0..21a01c85737 100644
--- a/lisp/leim/quail/latin-ltx.el
+++ b/lisp/leim/quail/latin-ltx.el
@@ -1,6 +1,6 @@
 ;;; latin-ltx.el --- Quail package for TeX-style input -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
 ;;   2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/latin-post.el b/lisp/leim/quail/latin-post.el
index 76ddf3c2746..453bea49026 100644
--- a/lisp/leim/quail/latin-post.el
+++ b/lisp/leim/quail/latin-post.el
@@ -1,6 +1,6 @@
 ;;; latin-post.el --- Quail packages for inputting various European characters 
 -*-coding: utf-8; lexical-binding: t -*-
 
-;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/latin-pre.el b/lisp/leim/quail/latin-pre.el
index 48e0ce9efc9..f469c1ec941 100644
--- a/lisp/leim/quail/latin-pre.el
+++ b/lisp/leim/quail/latin-pre.el
@@ -1,6 +1,6 @@
 ;;; latin-pre.el --- Quail packages for inputting various European characters  
-*-coding: utf-8; lexical-binding: t -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/lrt.el b/lisp/leim/quail/lrt.el
index a926ebec423..4e45a951d9f 100644
--- a/lisp/leim/quail/lrt.el
+++ b/lisp/leim/quail/lrt.el
@@ -1,6 +1,6 @@
 ;;; lrt.el --- Quail package for inputting Lao characters by LRT method  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/misc-lang.el b/lisp/leim/quail/misc-lang.el
index e9e11ac6799..e40bccc14f0 100644
--- a/lisp/leim/quail/misc-lang.el
+++ b/lisp/leim/quail/misc-lang.el
@@ -1,6 +1,6 @@
 ;;; misc-lang.el --- Quail package for inputting Miscellaneous characters  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: समीर सिंह Sameer Singh <lumarzeli30@gmail.com>
 ;; Keywords: multilingual, input method, i18n, Miscellaneous
diff --git a/lisp/leim/quail/persian.el b/lisp/leim/quail/persian.el
index 07d006c2a48..2915f362ee6 100644
--- a/lisp/leim/quail/persian.el
+++ b/lisp/leim/quail/persian.el
@@ -1,6 +1,6 @@
 ;;; persian.el --- Quail package for inputting Persian/Farsi keyboard  -*- 
coding: utf-8; lexical-binding: t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Mohsen BANAN <libre@mohsen.1.banan.byname.net>
 ;; URL: http://mohsen.1.banan.byname.net/contact
diff --git a/lisp/leim/quail/philippine.el b/lisp/leim/quail/philippine.el
index 9afbdc354e3..8ed6e570b7d 100644
--- a/lisp/leim/quail/philippine.el
+++ b/lisp/leim/quail/philippine.el
@@ -1,6 +1,6 @@
 ;;; philippine.el --- Quail package for inputting Philippine characters  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: समीर सिंह Sameer Singh <lumarzeli30@gmail.com>
 ;; Keywords: multilingual, input method, i18n, Philippines
diff --git a/lisp/leim/quail/programmer-dvorak.el 
b/lisp/leim/quail/programmer-dvorak.el
index d8260f8982f..eb12bd9dd22 100644
--- a/lisp/leim/quail/programmer-dvorak.el
+++ b/lisp/leim/quail/programmer-dvorak.el
@@ -1,6 +1,6 @@
 ;;; programmer-dvorak.el --- Quail package for the programmer Dvorak layout  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Joakim Jalap <joakim.jalap@fastmail.com>
 
diff --git a/lisp/leim/quail/py-punct.el b/lisp/leim/quail/py-punct.el
index 8a0b32c3301..71ed55bd5f5 100644
--- a/lisp/leim/quail/py-punct.el
+++ b/lisp/leim/quail/py-punct.el
@@ -1,6 +1,6 @@
 ;;; py-punct.el --- Quail packages for Chinese (pinyin + extra symbols)  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/rfc1345.el b/lisp/leim/quail/rfc1345.el
index e33d52592d1..0aba396b111 100644
--- a/lisp/leim/quail/rfc1345.el
+++ b/lisp/leim/quail/rfc1345.el
@@ -1,6 +1,6 @@
 ;;; rfc1345.el --- Quail method for RFC 1345 mnemonics -*- coding: utf-8; 
lexical-binding: t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: i18n
diff --git a/lisp/leim/quail/sami.el b/lisp/leim/quail/sami.el
index 13ae6590c98..7e878f780fc 100644
--- a/lisp/leim/quail/sami.el
+++ b/lisp/leim/quail/sami.el
@@ -1,6 +1,6 @@
 ;;; sami.el --- Quail package for inputting Sámi  -*-coding: utf-8; 
lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Wojciech S. Gac <wojciech.s.gac@gmail.com>
 ;; Keywords: i18n, multilingual, input method, Sámi
diff --git a/lisp/leim/quail/sgml-input.el b/lisp/leim/quail/sgml-input.el
index 720f2ebd7fe..66f6658db3e 100644
--- a/lisp/leim/quail/sgml-input.el
+++ b/lisp/leim/quail/sgml-input.el
@@ -1,6 +1,6 @@
 ;;; sgml-input.el --- Quail method for Unicode entered as SGML entities -*- 
coding: utf-8; lexical-binding: t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: i18n
diff --git a/lisp/leim/quail/sisheng.el b/lisp/leim/quail/sisheng.el
index 6468b117fc6..0961799c4ac 100644
--- a/lisp/leim/quail/sisheng.el
+++ b/lisp/leim/quail/sisheng.el
@@ -1,6 +1,6 @@
 ;;; sisheng.el --- sisheng input method for Chinese pinyin transliteration  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Werner LEMBERG <wl@gnu.org>
 
diff --git a/lisp/leim/quail/slovak.el b/lisp/leim/quail/slovak.el
index 8ddd92d5b4d..8996575fe78 100644
--- a/lisp/leim/quail/slovak.el
+++ b/lisp/leim/quail/slovak.el
@@ -1,6 +1,6 @@
 ;;; slovak.el --- Quail package for inputting Slovak  -*-coding: utf-8; 
lexical-binding: t -*-
 
-;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Authors: Tibor Šimko <tibor.simko@fmph.uniba.sk>
 ;;          Milan Zamazal <pdm@zamazal.org>
diff --git a/lisp/leim/quail/symbol-ksc.el b/lisp/leim/quail/symbol-ksc.el
index d440058902a..7588922dc07 100644
--- a/lisp/leim/quail/symbol-ksc.el
+++ b/lisp/leim/quail/symbol-ksc.el
@@ -1,6 +1,6 @@
 ;;; symbol-ksc.el --- Quail-package for Korean Symbol (KSC5601) -*-coding: 
utf-8; lexical-binding: t -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/tamil-dvorak.el b/lisp/leim/quail/tamil-dvorak.el
index 08e5b1e05a3..7b4be6b7a43 100644
--- a/lisp/leim/quail/tamil-dvorak.el
+++ b/lisp/leim/quail/tamil-dvorak.el
@@ -1,6 +1,6 @@
 ;;; tamil-dvorak.el --- Quail package for Tamil input with Dvorak keyboard  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Shakthi Kannan <author@shakthimaan.com>
 
diff --git a/lisp/leim/quail/tibetan.el b/lisp/leim/quail/tibetan.el
index 7f0848d04bd..d28d7be3b95 100644
--- a/lisp/leim/quail/tibetan.el
+++ b/lisp/leim/quail/tibetan.el
@@ -1,6 +1,6 @@
 ;;; tibetan.el --- Quail package for inputting Tibetan characters -*-coding: 
utf-8-emacs; lexical-binding: t; -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/uni-input.el b/lisp/leim/quail/uni-input.el
index 3f10b873a34..46cc5d043fc 100644
--- a/lisp/leim/quail/uni-input.el
+++ b/lisp/leim/quail/uni-input.el
@@ -1,6 +1,6 @@
 ;;; uni-input.el --- Hex Unicode input method  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H14PRO021
diff --git a/lisp/leim/quail/vntelex.el b/lisp/leim/quail/vntelex.el
index c48f947fcdc..4f412090cfc 100644
--- a/lisp/leim/quail/vntelex.el
+++ b/lisp/leim/quail/vntelex.el
@@ -1,6 +1,6 @@
 ;;; vntelex.el --- Quail package for Vietnamese by Telex method  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Werner Lemberg <wl@gnu.org>
 ;; Keywords: multilingual, input method, Vietnamese
diff --git a/lisp/leim/quail/vnvni.el b/lisp/leim/quail/vnvni.el
index 52c8222b258..b9b0f77e032 100644
--- a/lisp/leim/quail/vnvni.el
+++ b/lisp/leim/quail/vnvni.el
@@ -1,6 +1,6 @@
 ;;; vnvni.el --- Quail package for Vietnamese by VNI method  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author:   Werner Lemberg <wl@gnu.org>
 ;;           Nguyen Thai Ngoc Duy <pclouds@gmail.com>
diff --git a/lisp/leim/quail/welsh.el b/lisp/leim/quail/welsh.el
index e02b1120ad5..a7799b6e5c3 100644
--- a/lisp/leim/quail/welsh.el
+++ b/lisp/leim/quail/welsh.el
@@ -1,6 +1,6 @@
 ;;; welsh.el --- Quail package for inputting Welsh characters  -*- coding: 
utf-8; lexical-binding: t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: i18n
diff --git a/lisp/loadhist.el b/lisp/loadhist.el
index 0cb02f072ea..1609542e5fa 100644
--- a/lisp/loadhist.el
+++ b/lisp/loadhist.el
@@ -1,6 +1,6 @@
 ;;; loadhist.el --- lisp functions for working with feature groups  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1995, 1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/loadup.el b/lisp/loadup.el
index 2a9aff4c1fe..5c576861579 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -1,6 +1,6 @@
 ;;; loadup.el --- load up standardly loaded Lisp files for Emacs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1985-1986, 1992, 1994, 2001-2022 Free Software
+;; Copyright (C) 1985-1986, 1992, 1994, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/locate.el b/lisp/locate.el
index 20ef052184e..63386e18ebb 100644
--- a/lisp/locate.el
+++ b/lisp/locate.el
@@ -1,6 +1,6 @@
 ;;; locate.el --- interface to the locate command  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1996, 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Peter Breton <pbreton@cs.umb.edu>
 ;; Keywords: unix files
diff --git a/lisp/lpr.el b/lisp/lpr.el
index 88b0607b119..af59a953f38 100644
--- a/lisp/lpr.el
+++ b/lisp/lpr.el
@@ -1,6 +1,6 @@
 ;;; lpr.el --- print Emacs buffer on line printer  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985, 1988, 1992, 1994, 2001-2022 Free Software
+;; Copyright (C) 1985, 1988, 1992, 1994, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/ls-lisp.el b/lisp/ls-lisp.el
index 3e50b0dcc87..217bebcfcb2 100644
--- a/lisp/ls-lisp.el
+++ b/lisp/ls-lisp.el
@@ -1,6 +1,6 @@
 ;;; ls-lisp.el --- emulate insert-directory completely in Emacs Lisp  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1992, 1994, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1994, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
 ;; Modified by: Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>
diff --git a/lisp/macros.el b/lisp/macros.el
index 0baf3804332..59c7796551f 100644
--- a/lisp/macros.el
+++ b/lisp/macros.el
@@ -1,6 +1,6 @@
 ;;; macros.el --- non-primitive commands for keyboard macros -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1985-1987, 1992, 1994-1995, 2001-2022 Free Software
+;; Copyright (C) 1985-1987, 1992, 1994-1995, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/binhex.el b/lisp/mail/binhex.el
index 93dd8697bd7..4b903578a28 100644
--- a/lisp/mail/binhex.el
+++ b/lisp/mail/binhex.el
@@ -1,6 +1,6 @@
 ;;; binhex.el --- decode BinHex-encoded text  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: binhex news
diff --git a/lisp/mail/blessmail.el b/lisp/mail/blessmail.el
index f7cebd55952..a9f9828926c 100644
--- a/lisp/mail/blessmail.el
+++ b/lisp/mail/blessmail.el
@@ -1,6 +1,6 @@
 ;;; blessmail.el --- decide whether movemail needs special privileges -*- 
no-byte-compile: t; lexical-binding: t; -*-
 
-;; Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
diff --git a/lisp/mail/emacsbug.el b/lisp/mail/emacsbug.el
index 60f733435a6..f686c04536c 100644
--- a/lisp/mail/emacsbug.el
+++ b/lisp/mail/emacsbug.el
@@ -1,6 +1,6 @@
 ;;; emacsbug.el --- command to report Emacs bugs to appropriate mailing list  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/flow-fill.el b/lisp/mail/flow-fill.el
index 4802e2c4187..7136e186ff1 100644
--- a/lisp/mail/flow-fill.el
+++ b/lisp/mail/flow-fill.el
@@ -1,6 +1,6 @@
 ;;; flow-fill.el --- interpret RFC2646 "flowed" text  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <jas@pdc.kth.se>
 ;; Keywords: mail
diff --git a/lisp/mail/footnote.el b/lisp/mail/footnote.el
index a594fa3ccb4..b88fd405da8 100644
--- a/lisp/mail/footnote.el
+++ b/lisp/mail/footnote.el
@@ -1,6 +1,6 @@
 ;;; footnote.el --- footnote support for message mode  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1997, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Steven L Baur <steve@xemacs.org> (1997-2011)
 ;;         Boruch Baum <boruch_baum@gmx.com> (2017-)
diff --git a/lisp/mail/hashcash.el b/lisp/mail/hashcash.el
index 5136e11c899..72d532d6f62 100644
--- a/lisp/mail/hashcash.el
+++ b/lisp/mail/hashcash.el
@@ -1,6 +1,6 @@
 ;;; hashcash.el --- Add hashcash payments to email  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Written by: Paul Foley <mycroft@actrix.gen.nz> (1997-2002)
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/ietf-drums-date.el b/lisp/mail/ietf-drums-date.el
index 034854dce5a..b2cceb5cef2 100644
--- a/lisp/mail/ietf-drums-date.el
+++ b/lisp/mail/ietf-drums-date.el
@@ -1,6 +1,6 @@
 ;;; ietf-drums-date.el --- parse time/date for ietf-drums.el -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Bob Rogers <rogers@rgrjr.com>
 ;; Keywords: mail, util
diff --git a/lisp/mail/ietf-drums.el b/lisp/mail/ietf-drums.el
index b7d96a1053d..f60a3a3da28 100644
--- a/lisp/mail/ietf-drums.el
+++ b/lisp/mail/ietf-drums.el
@@ -1,6 +1,6 @@
 ;;; ietf-drums.el --- Functions for parsing RFC 2822 headers  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/mail/mail-extr.el b/lisp/mail/mail-extr.el
index 25ce4ea9025..71621f588e7 100644
--- a/lisp/mail/mail-extr.el
+++ b/lisp/mail/mail-extr.el
@@ -1,6 +1,6 @@
 ;;; mail-extr.el --- extract full name and address from email header  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1991-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2023 Free Software Foundation, Inc.
 
 ;; Author: Joe Wells <jbw@cs.bu.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/mail-hist.el b/lisp/mail/mail-hist.el
index 9fb7b36e985..40be8d0f350 100644
--- a/lisp/mail/mail-hist.el
+++ b/lisp/mail/mail-hist.el
@@ -1,6 +1,6 @@
 ;;; mail-hist.el --- headers and message body history for outgoing mail  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Karl Fogel <kfogel@red-bean.com>
 ;; Created: March, 1994
diff --git a/lisp/mail/mail-parse.el b/lisp/mail/mail-parse.el
index d28b8b58438..7a6b351bff3 100644
--- a/lisp/mail/mail-parse.el
+++ b/lisp/mail/mail-parse.el
@@ -1,6 +1,6 @@
 ;;; mail-parse.el --- Interface functions for parsing mail  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/mail/mail-prsvr.el b/lisp/mail/mail-prsvr.el
index 573975c9fb6..1487c32e9ed 100644
--- a/lisp/mail/mail-prsvr.el
+++ b/lisp/mail/mail-prsvr.el
@@ -1,6 +1,6 @@
 ;;; mail-prsvr.el --- Interface variables for parsing mail  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/mail/mail-utils.el b/lisp/mail/mail-utils.el
index a6e508155f6..a6a4545cf04 100644
--- a/lisp/mail/mail-utils.el
+++ b/lisp/mail/mail-utils.el
@@ -1,6 +1,6 @@
 ;;; mail-utils.el --- utility functions used both by rmail and rnews  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: mail, news
diff --git a/lisp/mail/mailabbrev.el b/lisp/mail/mailabbrev.el
index 0e0fb512003..8b95820cdf8 100644
--- a/lisp/mail/mailabbrev.el
+++ b/lisp/mail/mailabbrev.el
@@ -1,6 +1,6 @@
 ;;; mailabbrev.el --- abbrev-expansion of mail aliases  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1985-1987, 1992-1993, 1996-1997, 2000-2022 Free
+;; Copyright (C) 1985-1987, 1992-1993, 1996-1997, 2000-2023 Free
 ;; Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski <jwz@lucid.com; now jwz@jwz.org>
diff --git a/lisp/mail/mailalias.el b/lisp/mail/mailalias.el
index 57fb1117b60..e3e4122039b 100644
--- a/lisp/mail/mailalias.el
+++ b/lisp/mail/mailalias.el
@@ -1,6 +1,6 @@
 ;;; mailalias.el --- expand and complete mailing address aliases -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985, 1987, 1995-1997, 2001-2022 Free Software
+;; Copyright (C) 1985, 1987, 1995-1997, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/mailclient.el b/lisp/mail/mailclient.el
index f0d312fd9ab..21ddef4b0fd 100644
--- a/lisp/mail/mailclient.el
+++ b/lisp/mail/mailclient.el
@@ -1,6 +1,6 @@
 ;;; mailclient.el --- mail sending via system's mail client.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: David Reitter <david.reitter@gmail.com>
 ;; Keywords: mail
diff --git a/lisp/mail/mailheader.el b/lisp/mail/mailheader.el
index b813fa78252..92ea13a11f1 100644
--- a/lisp/mail/mailheader.el
+++ b/lisp/mail/mailheader.el
@@ -1,6 +1,6 @@
 ;;; mailheader.el --- mail header parsing, merging, formatting  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Erik Naggum <erik@naggum.no>
 ;; Keywords: tools, mail, news
diff --git a/lisp/mail/mspools.el b/lisp/mail/mspools.el
index 0673493487a..b5e4efa6be8 100644
--- a/lisp/mail/mspools.el
+++ b/lisp/mail/mspools.el
@@ -1,6 +1,6 @@
 ;;; mspools.el --- show mail spools waiting to be read  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Stephen Eglen <stephen@gnu.org>
 ;; Created: 22 Jan 1997
diff --git a/lisp/mail/qp.el b/lisp/mail/qp.el
index dc6fe6091c2..08f843e28f8 100644
--- a/lisp/mail/qp.el
+++ b/lisp/mail/qp.el
@@ -1,6 +1,6 @@
 ;;; qp.el --- Quoted-Printable functions  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: mail, extensions
diff --git a/lisp/mail/reporter.el b/lisp/mail/reporter.el
index 231fa69baa2..1271be16151 100644
--- a/lisp/mail/reporter.el
+++ b/lisp/mail/reporter.el
@@ -1,6 +1,6 @@
 ;;; reporter.el --- customizable bug reporting of lisp programs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1993-1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author:          1993-1998 Barry A. Warsaw
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/rfc2045.el b/lisp/mail/rfc2045.el
index d7cdc77e7f2..123519ad777 100644
--- a/lisp/mail/rfc2045.el
+++ b/lisp/mail/rfc2045.el
@@ -1,6 +1,6 @@
 ;;; rfc2045.el --- Functions for decoding rfc2045 headers  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/mail/rfc2047.el b/lisp/mail/rfc2047.el
index abb95a63f16..b30a3779aa7 100644
--- a/lisp/mail/rfc2047.el
+++ b/lisp/mail/rfc2047.el
@@ -1,6 +1,6 @@
 ;;; rfc2047.el --- functions for encoding and decoding rfc2047 messages  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
diff --git a/lisp/mail/rfc2231.el b/lisp/mail/rfc2231.el
index 0f64fad2607..8c156927589 100644
--- a/lisp/mail/rfc2231.el
+++ b/lisp/mail/rfc2231.el
@@ -1,6 +1,6 @@
 ;;; rfc2231.el --- Functions for decoding rfc2231 headers  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
diff --git a/lisp/mail/rfc6068.el b/lisp/mail/rfc6068.el
index 4863f3582c3..a0d03ac7908 100644
--- a/lisp/mail/rfc6068.el
+++ b/lisp/mail/rfc6068.el
@@ -1,6 +1,6 @@
 ;;; rfc6068.el --- support for rfc6068  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Keywords: mail
 
diff --git a/lisp/mail/rfc822.el b/lisp/mail/rfc822.el
index 525e6d5b584..866e5d7a1cc 100644
--- a/lisp/mail/rfc822.el
+++ b/lisp/mail/rfc822.el
@@ -1,6 +1,6 @@
 ;;; rfc822.el --- hairy RFC 822 (or later) parser for mail, news, etc.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1986-1987, 1990, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1986-1987, 1990, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Richard Mlynarik <mly@eddie.mit.edu>
diff --git a/lisp/mail/rmail-spam-filter.el b/lisp/mail/rmail-spam-filter.el
index 193d6095e4a..dd7fad0ad9c 100644
--- a/lisp/mail/rmail-spam-filter.el
+++ b/lisp/mail/rmail-spam-filter.el
@@ -1,6 +1,6 @@
 ;;; rmail-spam-filter.el --- spam filter for Rmail, the Emacs mail reader  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 ;; Keywords: email, spam, filter, rmail
 ;; Author: Eli Tziperman <eli AT deas.harvard.edu>
 ;; Package: rmail
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 2421b283e6b..659649b5d42 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -1,6 +1,6 @@
 ;;; rmail.el --- main code of "RMAIL" mail reader for Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1985-1988, 1993-1998, 2000-2022 Free Software
+;; Copyright (C) 1985-1988, 1993-1998, 2000-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/rmailedit.el b/lisp/mail/rmailedit.el
index 553fac26f9e..b65777acc34 100644
--- a/lisp/mail/rmailedit.el
+++ b/lisp/mail/rmailedit.el
@@ -1,6 +1,6 @@
 ;;; rmailedit.el --- "RMAIL edit mode"  Edit the current message  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1985, 1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: mail
diff --git a/lisp/mail/rmailkwd.el b/lisp/mail/rmailkwd.el
index 6535d68456b..82d91ff7870 100644
--- a/lisp/mail/rmailkwd.el
+++ b/lisp/mail/rmailkwd.el
@@ -1,6 +1,6 @@
 ;;; rmailkwd.el --- part of the "RMAIL" mail reader for Emacs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1985, 1988, 1994, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1985, 1988, 1994, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/rmailmm.el b/lisp/mail/rmailmm.el
index 416f7d1ea89..d2688118b97 100644
--- a/lisp/mail/rmailmm.el
+++ b/lisp/mail/rmailmm.el
@@ -1,6 +1,6 @@
 ;;; rmailmm.el --- MIME decoding and display stuff for RMAIL  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Alexander Pohoyda
 ;;     Alex Schroeder
diff --git a/lisp/mail/rmailmsc.el b/lisp/mail/rmailmsc.el
index 93463af46cf..b8258d584fc 100644
--- a/lisp/mail/rmailmsc.el
+++ b/lisp/mail/rmailmsc.el
@@ -1,6 +1,6 @@
 ;;; rmailmsc.el --- miscellaneous support functions for the RMAIL mail reader  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: mail
diff --git a/lisp/mail/rmailout.el b/lisp/mail/rmailout.el
index c1371308d4f..6d61dcd8208 100644
--- a/lisp/mail/rmailout.el
+++ b/lisp/mail/rmailout.el
@@ -1,6 +1,6 @@
 ;;; rmailout.el --- "RMAIL" mail reader for Emacs: output message to a file  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1985, 1987, 1993-1994, 2001-2022 Free Software
+;; Copyright (C) 1985, 1987, 1993-1994, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -327,15 +327,14 @@ Replaces the From line with a \"Mail-from\" header.  Adds 
\"Date\" and
                     "Date: \\2, \\4 \\3 \\9 \\5 "
 
                     ;; The timezone could be matched by group 7 or group 10.
-                    ;; If neither of them matched, assume EST, since only
-                    ;; Easterners would be so sloppy.
+                    ;; If neither matched, use "-0000" for an unknown zone.
                     ;; It's a shame the substitution can't use "\\10".
                     (cond
                      ((/= (match-beginning 7) (match-end 7)) "\\7")
                      ((/= (match-beginning 10) (match-end 10))
                       (buffer-substring (match-beginning 10)
                                         (match-end 10)))
-                     (t "EST"))
+                     (t "-0000"))
                     "\n"))
                  ;; Keep and reformat the sender if we don't
                  ;; have a From: field.
diff --git a/lisp/mail/rmailsort.el b/lisp/mail/rmailsort.el
index c203cf858e5..c2e358c5524 100644
--- a/lisp/mail/rmailsort.el
+++ b/lisp/mail/rmailsort.el
@@ -1,6 +1,6 @@
 ;;; rmailsort.el --- Rmail: sort messages  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1990, 1993-1994, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1990, 1993-1994, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp>
diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el
index d63e05f5fa2..ba580907658 100644
--- a/lisp/mail/rmailsum.el
+++ b/lisp/mail/rmailsum.el
@@ -1,6 +1,6 @@
 ;;; rmailsum.el --- make summary buffers for the mail reader  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1985, 1993-1996, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1985, 1993-1996, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -339,7 +339,7 @@ First element is ignored.")
        (split-string header "[ \f\t\n\r\v,;]+"))))
 
 (defun rmail-summary-fill-message-parents-and-descs-vectors ()
-  "Fill parents and descendats vectors for messages.
+  "Fill parents and descendants vectors for messages.
 This populates `rmail-summary-message-parents-vector'
 and `rmail-summary-message-descendants-vector'."
   (with-current-buffer rmail-buffer
diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el
index 3f75faa077d..8d7e90ccacf 100644
--- a/lisp/mail/sendmail.el
+++ b/lisp/mail/sendmail.el
@@ -1,6 +1,6 @@
 ;;; sendmail.el --- mail sending commands for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1992-1996, 1998, 2000-2022 Free Software
+;; Copyright (C) 1985-1986, 1992-1996, 1998, 2000-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el
index 8573532eac2..f0aa0c6ecf5 100644
--- a/lisp/mail/smtpmail.el
+++ b/lisp/mail/smtpmail.el
@@ -1,6 +1,6 @@
 ;;; smtpmail.el --- simple SMTP protocol (RFC 821) for sending mail  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1995-1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Tomoji Kagatani <kagatani@rbc.ncl.omron.co.jp>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el
index 558785de149..1a48c64a663 100644
--- a/lisp/mail/supercite.el
+++ b/lisp/mail/supercite.el
@@ -1,6 +1,6 @@
 ;;; supercite.el --- minor mode for citing mail and news replies  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1993-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2023 Free Software Foundation, Inc.
 
 ;; Author: 1993 Barry A. Warsaw <bwarsaw@python.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/undigest.el b/lisp/mail/undigest.el
index cdb1bec4788..39e047eee72 100644
--- a/lisp/mail/undigest.el
+++ b/lisp/mail/undigest.el
@@ -1,6 +1,6 @@
 ;;; undigest.el --- digest-cracking support for the RMAIL mail reader  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1994, 1996, 2001-2022 Free Software
+;; Copyright (C) 1985-1986, 1994, 1996, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/unrmail.el b/lisp/mail/unrmail.el
index 9e7194e4a02..7e0304c824c 100644
--- a/lisp/mail/unrmail.el
+++ b/lisp/mail/unrmail.el
@@ -1,6 +1,6 @@
 ;;; unrmail.el --- convert Rmail Babyl files to mbox files  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1992, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: mail
diff --git a/lisp/mail/uudecode.el b/lisp/mail/uudecode.el
index 1c6bfe157d6..7b3bad9e25c 100644
--- a/lisp/mail/uudecode.el
+++ b/lisp/mail/uudecode.el
@@ -1,6 +1,6 @@
 ;;; uudecode.el --- elisp native uudecode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: uudecode news
diff --git a/lisp/mail/yenc.el b/lisp/mail/yenc.el
index 5cc987eccd0..de1e1ee283a 100644
--- a/lisp/mail/yenc.el
+++ b/lisp/mail/yenc.el
@@ -1,6 +1,6 @@
 ;;; yenc.el --- elisp native yenc decoder  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Jesper Harder <harder@ifa.au.dk>
 ;; Keywords: yenc news
diff --git a/lisp/man.el b/lisp/man.el
index 3802362da09..286edf9314e 100644
--- a/lisp/man.el
+++ b/lisp/man.el
@@ -1,6 +1,6 @@
 ;;; man.el --- browse UNIX manual pages -*- lexical-binding: t -*-
 
-;; Copyright (C) 1993-1994, 1996-1997, 2001-2022 Free Software
+;; Copyright (C) 1993-1994, 1996-1997, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Barry A. Warsaw <bwarsaw@cen.com>
diff --git a/lisp/master.el b/lisp/master.el
index da7f85d1a67..8c77bcfbcf7 100644
--- a/lisp/master.el
+++ b/lisp/master.el
@@ -1,6 +1,6 @@
 ;;; master.el --- make a buffer the master over another buffer  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Old-Version: 1.0.2
diff --git a/lisp/mb-depth.el b/lisp/mb-depth.el
index a4b6e2bffaa..0727dd33ab8 100644
--- a/lisp/mb-depth.el
+++ b/lisp/mb-depth.el
@@ -1,6 +1,6 @@
 ;;; mb-depth.el --- Indicate minibuffer-depth in prompt -*- lexical-binding: t 
-*-
 ;;
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
 ;; Keywords: convenience
diff --git a/lisp/md4.el b/lisp/md4.el
index 73e5d3474d1..12ea672c7e6 100644
--- a/lisp/md4.el
+++ b/lisp/md4.el
@@ -1,6 +1,6 @@
 ;;; md4.el --- MD4 Message Digest Algorithm. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2001, 2004, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2004, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Taro Kawagishi <tarok@transpulse.org>
 ;; Keywords: MD4
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index 849e0f77236..d020cf6e90a 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -1,6 +1,6 @@
 ;;; menu-bar.el --- define a default menu bar  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1993-1995, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Richard M. Stallman
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mh-e/ChangeLog.1 b/lisp/mh-e/ChangeLog.1
index d6893fb9ec4..f918ab8fe74 100644
--- a/lisp/mh-e/ChangeLog.1
+++ b/lisp/mh-e/ChangeLog.1
@@ -761,7 +761,7 @@
        below, docstring was usually completely rewritten. Use "on"
        instead of "t" in docstring to match what is seen in customization
        buffer. Use headline capitalization. Standardize on "Auto-detect"
-       text when option has that capibility.
+       text when option has that capability.
        (mh): Since we work on more than one type of Emacs, use Emacs
        instead of GNU Emacs. Prefer GNU mailutils over GNU Mailutils.
        (mh-variant): s/Autodetect at startup/Auto-detect/.
@@ -11419,7 +11419,7 @@
        (dist): Leave release in current directory.
 
 
-  Copyright (C) 2003-2022 Free Software Foundation, Inc.
+  Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/mh-e/ChangeLog.2 b/lisp/mh-e/ChangeLog.2
index fd597f0c00d..f0032e9db19 100644
--- a/lisp/mh-e/ChangeLog.2
+++ b/lisp/mh-e/ChangeLog.2
@@ -3673,7 +3673,7 @@
 
 See ChangeLog.1 for earlier changes.
 
-  Copyright (C) 2005-2022 Free Software Foundation, Inc.
+  Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/mh-e/mh-acros.el b/lisp/mh-e/mh-acros.el
index 2b4807ab696..3981bb7f709 100644
--- a/lisp/mh-e/mh-acros.el
+++ b/lisp/mh-e/mh-acros.el
@@ -1,6 +1,6 @@
 ;;; mh-acros.el --- macros used in MH-E  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Satyaki Das <satyaki@theforce.stanford.edu>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-alias.el b/lisp/mh-e/mh-alias.el
index 3ceb419023e..2b567411e0f 100644
--- a/lisp/mh-e/mh-alias.el
+++ b/lisp/mh-e/mh-alias.el
@@ -1,6 +1,6 @@
 ;;; mh-alias.el --- MH-E mail alias completion and expansion  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1994-1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Peter S. Galbraith <psg@debian.org>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-buffers.el b/lisp/mh-e/mh-buffers.el
index 4b15b774132..b0f2e1963d6 100644
--- a/lisp/mh-e/mh-buffers.el
+++ b/lisp/mh-e/mh-buffers.el
@@ -1,6 +1,6 @@
 ;;; mh-buffers.el --- MH-E buffer constants and utilities  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1993, 1995, 1997, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-comp.el b/lisp/mh-e/mh-comp.el
index 678bffd1687..92d31bf1826 100644
--- a/lisp/mh-e/mh-comp.el
+++ b/lisp/mh-e/mh-comp.el
@@ -1,6 +1,6 @@
 ;;; mh-comp.el --- MH-E functions for composing and sending messages  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1993, 1995, 1997, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el
index 9a04d890973..1640c23e002 100644
--- a/lisp/mh-e/mh-e.el
+++ b/lisp/mh-e/mh-e.el
@@ -1,6 +1,6 @@
 ;;; mh-e.el --- GNU Emacs interface to the MH mail system  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1985-1988, 1990, 1992-1995, 1997, 1999-2022 Free
+;; Copyright (C) 1985-1988, 1990, 1992-1995, 1997, 1999-2023 Free
 ;; Software Foundation, Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-folder.el b/lisp/mh-e/mh-folder.el
index 308660431ac..dbed3c83994 100644
--- a/lisp/mh-e/mh-folder.el
+++ b/lisp/mh-e/mh-folder.el
@@ -1,6 +1,6 @@
 ;;; mh-folder.el --- MH-Folder mode  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
 ;; Keywords: mail
diff --git a/lisp/mh-e/mh-funcs.el b/lisp/mh-e/mh-funcs.el
index 4956d9b59fd..df128c8f709 100644
--- a/lisp/mh-e/mh-funcs.el
+++ b/lisp/mh-e/mh-funcs.el
@@ -1,6 +1,6 @@
 ;;; mh-funcs.el --- MH-E functions not everyone will use right away  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1993, 1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
 ;; Keywords: mail
diff --git a/lisp/mh-e/mh-gnus.el b/lisp/mh-e/mh-gnus.el
index b797000566e..4bc7119cb80 100644
--- a/lisp/mh-e/mh-gnus.el
+++ b/lisp/mh-e/mh-gnus.el
@@ -1,6 +1,6 @@
 ;;; mh-gnus.el --- make MH-E compatible with various versions of Gnus  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2003-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Satyaki Das <satyaki@theforce.stanford.edu>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-identity.el b/lisp/mh-e/mh-identity.el
index 2507c677462..307c7fcf9c7 100644
--- a/lisp/mh-e/mh-identity.el
+++ b/lisp/mh-e/mh-identity.el
@@ -1,6 +1,6 @@
 ;;; mh-identity.el --- multiple identify support for MH-E  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Peter S. Galbraith <psg@debian.org>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-inc.el b/lisp/mh-e/mh-inc.el
index cc6ebfef426..e4e88b36e3d 100644
--- a/lisp/mh-e/mh-inc.el
+++ b/lisp/mh-e/mh-inc.el
@@ -1,6 +1,6 @@
 ;;; mh-inc.el --- MH-E "inc" and separate mail spool handling  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2003-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Peter S. Galbraith <psg@debian.org>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-junk.el b/lisp/mh-e/mh-junk.el
index 38a8216dc0c..c01ecc69285 100644
--- a/lisp/mh-e/mh-junk.el
+++ b/lisp/mh-e/mh-junk.el
@@ -1,6 +1,6 @@
 ;;; mh-junk.el --- MH-E interface to anti-spam measures  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Satyaki Das <satyaki@theforce.stanford.edu>,
 ;;         Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-letter.el b/lisp/mh-e/mh-letter.el
index 723e5bb36c0..f75e2b9b80d 100644
--- a/lisp/mh-e/mh-letter.el
+++ b/lisp/mh-e/mh-letter.el
@@ -1,6 +1,6 @@
 ;;; mh-letter.el --- MH-Letter mode  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1993, 1995, 1997, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-limit.el b/lisp/mh-e/mh-limit.el
index da3e5b4f35c..845b6f99cf7 100644
--- a/lisp/mh-e/mh-limit.el
+++ b/lisp/mh-e/mh-limit.el
@@ -1,6 +1,6 @@
 ;;; mh-limit.el --- MH-E display limits  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2003, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2003, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Peter S. Galbraith <psg@debian.org>
 ;; Keywords: mail
diff --git a/lisp/mh-e/mh-mime.el b/lisp/mh-e/mh-mime.el
index c0b42171b9d..6c498d8df71 100644
--- a/lisp/mh-e/mh-mime.el
+++ b/lisp/mh-e/mh-mime.el
@@ -1,6 +1,6 @@
 ;;; mh-mime.el --- MH-E MIME support  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1993, 1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
 ;; Keywords: mail
diff --git a/lisp/mh-e/mh-print.el b/lisp/mh-e/mh-print.el
index 78906b68ad3..76116010b33 100644
--- a/lisp/mh-e/mh-print.el
+++ b/lisp/mh-e/mh-print.el
@@ -1,6 +1,6 @@
 ;;; mh-print.el --- MH-E printing support  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Jeffrey C Honig <jch@honig.net>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-scan.el b/lisp/mh-e/mh-scan.el
index abbf7422b52..d0a279eac97 100644
--- a/lisp/mh-e/mh-scan.el
+++ b/lisp/mh-e/mh-scan.el
@@ -1,6 +1,6 @@
 ;;; mh-scan.el --- MH-E scan line constants and utilities  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1993, 1995, 1997, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-search.el b/lisp/mh-e/mh-search.el
index 058ea4499fd..63b4304985c 100644
--- a/lisp/mh-e/mh-search.el
+++ b/lisp/mh-e/mh-search.el
@@ -1,6 +1,6 @@
 ;;; mh-search.el --- MH-Search mode  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1993, 1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Indexed search by Satyaki Das <satyaki@theforce.stanford.edu>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
@@ -292,7 +292,7 @@ folder containing the index search results."
                                     (cons folder msg)))))
                  folder-results-map)
 
-        ;; Vist the results folder.
+        ;; Visit the results folder.
         (mh-visit-folder index-folder () (list folder-results-map origin-map))
 
         (goto-char (point-min))
diff --git a/lisp/mh-e/mh-seq.el b/lisp/mh-e/mh-seq.el
index c82a1a53baf..f5716fe968f 100644
--- a/lisp/mh-e/mh-seq.el
+++ b/lisp/mh-e/mh-seq.el
@@ -1,6 +1,6 @@
 ;;; mh-seq.el --- MH-E sequences support  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1993, 1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
 ;; Keywords: mail
diff --git a/lisp/mh-e/mh-show.el b/lisp/mh-e/mh-show.el
index 1731d75738b..54d986edc1e 100644
--- a/lisp/mh-e/mh-show.el
+++ b/lisp/mh-e/mh-show.el
@@ -1,6 +1,6 @@
 ;;; mh-show.el --- MH-Show mode  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1993, 1995, 1997, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-speed.el b/lisp/mh-e/mh-speed.el
index 3babea76121..0258f0b3939 100644
--- a/lisp/mh-e/mh-speed.el
+++ b/lisp/mh-e/mh-speed.el
@@ -1,6 +1,6 @@
 ;;; mh-speed.el --- MH-E speedbar support  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Satyaki Das <satyaki@theforce.stanford.edu>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-thread.el b/lisp/mh-e/mh-thread.el
index 2358ba4bc61..980a6a38902 100644
--- a/lisp/mh-e/mh-thread.el
+++ b/lisp/mh-e/mh-thread.el
@@ -1,6 +1,6 @@
 ;;; mh-thread.el --- MH-E threading support  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Satyaki Das <satyaki@theforce.stanford.edu>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-tool-bar.el b/lisp/mh-e/mh-tool-bar.el
index 933b3b633af..c0fadc66096 100644
--- a/lisp/mh-e/mh-tool-bar.el
+++ b/lisp/mh-e/mh-tool-bar.el
@@ -1,6 +1,6 @@
 ;;; mh-tool-bar.el --- MH-E tool bar support  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Satyaki Das <satyaki@theforce.stanford.edu>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-utils.el b/lisp/mh-e/mh-utils.el
index b2c79350c46..6f84fcdb2ba 100644
--- a/lisp/mh-e/mh-utils.el
+++ b/lisp/mh-e/mh-utils.el
@@ -1,6 +1,6 @@
 ;;; mh-utils.el --- MH-E general utilities  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1993, 1995, 1997, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-xface.el b/lisp/mh-e/mh-xface.el
index d6ecd836556..06233b1b217 100644
--- a/lisp/mh-e/mh-xface.el
+++ b/lisp/mh-e/mh-xface.el
@@ -1,6 +1,6 @@
 ;;; mh-xface.el --- MH-E X-Face and Face header field display  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
 ;; Keywords: mail
diff --git a/lisp/midnight.el b/lisp/midnight.el
index 60d9b565ef0..b2504536b48 100644
--- a/lisp/midnight.el
+++ b/lisp/midnight.el
@@ -1,6 +1,6 @@
 ;;; midnight.el --- run something every midnight, e.g., kill old buffers  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Sam Steingold <sds@gnu.org>
 ;; Created: 1998-05-18
diff --git a/lisp/minibuf-eldef.el b/lisp/minibuf-eldef.el
index 935c9111ee6..a9792383786 100644
--- a/lisp/minibuf-eldef.el
+++ b/lisp/minibuf-eldef.el
@@ -1,6 +1,6 @@
 ;;; minibuf-eldef.el --- Only show defaults in prompts when applicable  -*- 
lexical-binding: t -*-
 ;;
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
 ;; Keywords: convenience
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 6e42296e7ba..f47299bd0da 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -1,6 +1,6 @@
 ;;; minibuffer.el --- Minibuffer and completion functions -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Package: emacs
@@ -1474,7 +1474,10 @@ when the buffer's text is already an exact match."
               (if (and (eq this-command last-command) completion-auto-help)
                   (minibuffer-completion-help beg end))
               (completion--done completion 'exact
-                                (unless expect-exact
+                                (unless (or expect-exact
+                                            (and completion-auto-select
+                                                 (eq this-command last-command)
+                                                 completion-auto-help))
                                   "Complete, but not unique"))))
 
             (minibuffer--bitset completed t exact))))))))
diff --git a/lisp/misc.el b/lisp/misc.el
index a53571f4639..ca013d5f72f 100644
--- a/lisp/misc.el
+++ b/lisp/misc.el
@@ -1,6 +1,6 @@
 ;;; misc.el --- some nonstandard editing and utility commands for Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1989, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: convenience
diff --git a/lisp/misearch.el b/lisp/misearch.el
index 9aef7c30a42..9ac28c26c48 100644
--- a/lisp/misearch.el
+++ b/lisp/misearch.el
@@ -1,6 +1,6 @@
 ;;; misearch.el --- isearch extensions for multi-buffer search  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <juri@jurta.org>
 ;; Keywords: matching
diff --git a/lisp/mouse-copy.el b/lisp/mouse-copy.el
index 5c70c02578a..f45e6039320 100644
--- a/lisp/mouse-copy.el
+++ b/lisp/mouse-copy.el
@@ -1,6 +1,6 @@
 ;;; mouse-copy.el --- one-click text copy and move  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: John Heidemann <johnh@ISI.EDU>
 ;; Keywords: mouse
diff --git a/lisp/mouse-drag.el b/lisp/mouse-drag.el
index 81b699c0202..bcaaa18e53c 100644
--- a/lisp/mouse-drag.el
+++ b/lisp/mouse-drag.el
@@ -1,6 +1,6 @@
 ;;; mouse-drag.el --- use mouse-2 to do a new style of scrolling  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1996-1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: John Heidemann <johnh@ISI.EDU>
 ;; Keywords: mouse
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 095d30a2856..9c1a72bb368 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -1,6 +1,6 @@
 ;;; mouse.el --- window system-independent mouse support  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 1993-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: hardware, mouse
diff --git a/lisp/mpc.el b/lisp/mpc.el
index f878c6ca291..db1da2ac030 100644
--- a/lisp/mpc.el
+++ b/lisp/mpc.el
@@ -1,6 +1,6 @@
 ;;; mpc.el --- A client for the Music Player Daemon   -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: multimedia
diff --git a/lisp/msb.el b/lisp/msb.el
index 6843df2edcf..e055148c751 100644
--- a/lisp/msb.el
+++ b/lisp/msb.el
@@ -1,6 +1,6 @@
 ;;; msb.el --- customizable buffer-selection with multiple menus  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1993-1995, 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Lindberg <lars.lindberg@home.se>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mwheel.el b/lisp/mwheel.el
index ba5255fc076..1be52d24e34 100644
--- a/lisp/mwheel.el
+++ b/lisp/mwheel.el
@@ -1,6 +1,6 @@
 ;;; mwheel.el --- Mouse wheel support  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Keywords: mouse
 ;; Package: emacs
diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el
index 9781ebf863a..41c28672aae 100644
--- a/lisp/net/ange-ftp.el
+++ b/lisp/net/ange-ftp.el
@@ -1,6 +1,6 @@
 ;;; ange-ftp.el --- transparent FTP support for GNU Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1989-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1989-2023 Free Software Foundation, Inc.
 
 ;; Author: Andy Norman <ange@hplb.hpl.hp.com>
 ;; Maintainer: emacs-devel@gnu.org
@@ -4129,7 +4129,7 @@ directory, so that Emacs will know its current contents."
        (or (file-exists-p parent)
            (ange-ftp-make-directory parent parents))))
   (if (file-exists-p dir)
-      (unless parents
+      (if parents t
        (signal
          'file-already-exists
          (list "Cannot make directory: file already exists" dir)))
@@ -4158,7 +4158,8 @@ directory, so that Emacs will know its current contents."
                                (format "Could not make directory %s: %s"
                                        dir
                                        (cdr result))))
-           (ange-ftp-add-file-entry dir t))
+           (ange-ftp-add-file-entry dir t)
+            nil)
        (ange-ftp-real-make-directory dir)))))
 
 (defun ange-ftp-delete-directory (dir &optional recursive trash)
diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el
index 7ac6396d31d..0177d12f236 100644
--- a/lisp/net/browse-url.el
+++ b/lisp/net/browse-url.el
@@ -1,6 +1,6 @@
 ;;; browse-url.el --- pass a URL to a web browser  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Denis Howe <dbh@doc.ic.ac.uk>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/net/dbus.el b/lisp/net/dbus.el
index 9f0ad7b83c4..f35d11db152 100644
--- a/lisp/net/dbus.el
+++ b/lisp/net/dbus.el
@@ -1,6 +1,6 @@
 ;;; dbus.el --- Elisp bindings for D-Bus. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, hardware
diff --git a/lisp/net/dictionary-connection.el 
b/lisp/net/dictionary-connection.el
index a4afcd6647d..3fa675491b2 100644
--- a/lisp/net/dictionary-connection.el
+++ b/lisp/net/dictionary-connection.el
@@ -1,6 +1,6 @@
 ;;; dictionary-connection.el --- TCP-based client connection for dictionary  
-*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Torsten Hilbrich <torsten.hilbrich@gmx.net>
 ;; Keywords: network
diff --git a/lisp/net/dictionary.el b/lisp/net/dictionary.el
index 315f7e5f52c..d9973b831ba 100644
--- a/lisp/net/dictionary.el
+++ b/lisp/net/dictionary.el
@@ -1,6 +1,6 @@
 ;;; dictionary.el --- Client for rfc2229 dictionary servers  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Torsten Hilbrich <torsten.hilbrich@gmx.net>
 ;; Keywords: interface, dictionary
diff --git a/lisp/net/dig.el b/lisp/net/dig.el
index d6436c579b3..694a3a3a3d9 100644
--- a/lisp/net/dig.el
+++ b/lisp/net/dig.el
@@ -1,6 +1,6 @@
 ;;; dig.el --- Domain Name System dig interface  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;; Keywords: DNS BIND dig comm
diff --git a/lisp/net/dns.el b/lisp/net/dns.el
index 8680fab7c32..1e320a2124a 100644
--- a/lisp/net/dns.el
+++ b/lisp/net/dns.el
@@ -1,6 +1,6 @@
 ;;; dns.el --- Domain Name Service lookups  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: network comm
diff --git a/lisp/net/eudc-bob.el b/lisp/net/eudc-bob.el
index 68a0ccb3a13..f345a94bab4 100644
--- a/lisp/net/eudc-bob.el
+++ b/lisp/net/eudc-bob.el
@@ -1,6 +1,6 @@
 ;;; eudc-bob.el --- Binary Objects Support for EUDC  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <oscar@cpe.fr>
 ;;         Pavel Janík <Pavel@Janik.cz>
diff --git a/lisp/net/eudc-capf.el b/lisp/net/eudc-capf.el
index e2bbd5b28b6..d454851ae67 100644
--- a/lisp/net/eudc-capf.el
+++ b/lisp/net/eudc-capf.el
@@ -1,6 +1,6 @@
 ;;; eudc-capf.el --- EUDC - completion-at-point bindings  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Alexander Adolf
 ;;
diff --git a/lisp/net/eudc-export.el b/lisp/net/eudc-export.el
index 2f841336e0b..7bde976239d 100644
--- a/lisp/net/eudc-export.el
+++ b/lisp/net/eudc-export.el
@@ -1,6 +1,6 @@
 ;;; eudc-export.el --- functions to export EUDC query results  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <oscar@cpe.fr>
 ;;         Pavel Janík <Pavel@Janik.cz>
diff --git a/lisp/net/eudc-hotlist.el b/lisp/net/eudc-hotlist.el
index 458d13fb24d..a8b9fddde56 100644
--- a/lisp/net/eudc-hotlist.el
+++ b/lisp/net/eudc-hotlist.el
@@ -1,6 +1,6 @@
 ;;; eudc-hotlist.el --- hotlist management for EUDC  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <oscar@cpe.fr>
 ;;         Pavel Janík <Pavel@Janik.cz>
diff --git a/lisp/net/eudc-vars.el b/lisp/net/eudc-vars.el
index 450943a3f09..12f5347bd35 100644
--- a/lisp/net/eudc-vars.el
+++ b/lisp/net/eudc-vars.el
@@ -1,6 +1,6 @@
 ;;; eudc-vars.el --- Emacs Unified Directory Client  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <oscar@cpe.fr>
 ;;         Pavel Janík <Pavel@Janik.cz>
diff --git a/lisp/net/eudc.el b/lisp/net/eudc.el
index 8319c048e20..aae7a45563d 100644
--- a/lisp/net/eudc.el
+++ b/lisp/net/eudc.el
@@ -1,6 +1,6 @@
 ;;; eudc.el --- Emacs Unified Directory Client  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <oscar@cpe.fr>
 ;;         Pavel Janík <Pavel@Janik.cz>
diff --git a/lisp/net/eudcb-bbdb.el b/lisp/net/eudcb-bbdb.el
index e71dc238d08..37f7c65633b 100644
--- a/lisp/net/eudcb-bbdb.el
+++ b/lisp/net/eudcb-bbdb.el
@@ -1,6 +1,6 @@
 ;;; eudcb-bbdb.el --- Emacs Unified Directory Client - BBDB Backend  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <oscar@cpe.fr>
 ;;         Pavel Janík <Pavel@Janik.cz>
diff --git a/lisp/net/eudcb-ecomplete.el b/lisp/net/eudcb-ecomplete.el
index 55011d29f6c..20bdd9059f5 100644
--- a/lisp/net/eudcb-ecomplete.el
+++ b/lisp/net/eudcb-ecomplete.el
@@ -1,6 +1,6 @@
 ;;; eudcb-ecomplete.el --- EUDC - ecomplete backend -*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Alexander Adolf
 ;;
diff --git a/lisp/net/eudcb-ldap.el b/lisp/net/eudcb-ldap.el
index 86fe99f9e76..b1733e99f5c 100644
--- a/lisp/net/eudcb-ldap.el
+++ b/lisp/net/eudcb-ldap.el
@@ -1,6 +1,6 @@
 ;;; eudcb-ldap.el --- Emacs Unified Directory Client - LDAP Backend  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <oscar@cpe.fr>
 ;;         Pavel Janík <Pavel@Janik.cz>
diff --git a/lisp/net/eudcb-mab.el b/lisp/net/eudcb-mab.el
index b1235cce704..08fc20f438a 100644
--- a/lisp/net/eudcb-mab.el
+++ b/lisp/net/eudcb-mab.el
@@ -1,6 +1,6 @@
 ;;; eudcb-mab.el --- Emacs Unified Directory Client - AddressBook backend  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@newartisans.com>
 ;; Maintainer: Thomas Fitzsimmons <fitzsim@fitzsim.org>
diff --git a/lisp/net/eudcb-macos-contacts.el b/lisp/net/eudcb-macos-contacts.el
index 7495dcbc9cc..bb73237e6ec 100644
--- a/lisp/net/eudcb-macos-contacts.el
+++ b/lisp/net/eudcb-macos-contacts.el
@@ -1,6 +1,6 @@
 ;;; eudcb-macos-contacts.el --- EUDC - macOS Contacts backend  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Alexander Adolf
 
diff --git a/lisp/net/eudcb-mailabbrev.el b/lisp/net/eudcb-mailabbrev.el
index 4a2dd9ad4a4..e47f8687093 100644
--- a/lisp/net/eudcb-mailabbrev.el
+++ b/lisp/net/eudcb-mailabbrev.el
@@ -1,6 +1,6 @@
 ;;; eudcb-mailabbrev.el --- EUDC - mailabbrev backend -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Alexander Adolf
 ;;
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 3799ef96e84..763b2f07a5c 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -1,6 +1,6 @@
 ;;; eww.el --- Emacs Web Wowser  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: html
@@ -2498,10 +2498,10 @@ Otherwise, the restored buffer will contain a prompt to 
do so by using
       (when (plist-get eww-data :url)
        (cl-case eww-restore-desktop
          ((t auto) (eww (plist-get eww-data :url)))
-         ((zerop (buffer-size))
-          (let ((inhibit-read-only t))
-            (insert (substitute-command-keys
-                     eww-restore-reload-prompt)))))))
+         ((nil) (when (zerop (buffer-size))
+                  (let ((inhibit-read-only t))
+                    (insert (substitute-command-keys
+                             eww-restore-reload-prompt))))))))
     ;; .
     (current-buffer)))
 
diff --git a/lisp/net/gnutls.el b/lisp/net/gnutls.el
index 6e3845aec1a..36b1654222a 100644
--- a/lisp/net/gnutls.el
+++ b/lisp/net/gnutls.el
@@ -1,6 +1,6 @@
 ;;; gnutls.el --- Support SSL/TLS connections through GnuTLS  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <tzz@lifelogs.com>
 ;; Keywords: comm, tls, ssl, encryption
@@ -128,10 +128,7 @@ key exchange is against man-in-the-middle attacks.)
 
 A value of nil says to use the default GnuTLS value.
 
-The default value of this variable is such that virtually any
-connection can be established, whether this connection can be
-considered cryptographically \"safe\" or not.  However, Emacs
-network security is handled at a higher level via
+Emacs network security is handled at a higher level via
 `open-network-stream' and the Network Security Manager.  See Info
 node `(emacs) Network Security'."
   :type '(choice (const :tag "Use default value" nil)
@@ -265,6 +262,7 @@ For the meaning of the rest of the parameters, see 
`gnutls-boot-parameters'."
            &key type hostname priority-string
            trustfiles crlfiles keylist min-prime-bits
            verify-flags verify-error verify-hostname-error
+           pass flags
            &allow-other-keys)
   "Return a keyword list of parameters suitable for passing to `gnutls-boot'.
 
@@ -281,6 +279,13 @@ default.
 VERIFY-HOSTNAME-ERROR is a backwards compatibility option for
 putting `:hostname' in VERIFY-ERROR.
 
+PASS is a string, the password of the key.  It may also be nil,
+for a NULL password.
+
+FLAGS is a list of symbols corresponding to the equivalent ORed
+bitflag of the gnutls_pkcs_encrypt_flags_t enum of GnuTLS.  The
+empty list corresponds to the bitflag with value 0.
+
 When VERIFY-ERROR is t or a list containing `:trustfiles', an
 error will be raised when the peer certificate verification fails
 as per GnuTLS' gnutls_certificate_verify_peers2.  Otherwise, only
@@ -358,6 +363,8 @@ defaults to GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT."
                 :keylist ,keylist
                 :verify-flags ,verify-flags
                 :verify-error ,verify-error
+                :pass ,pass
+                :flags ,flags
                 :callbacks nil)))
 
 (defun gnutls--get-files (files)
diff --git a/lisp/net/goto-addr.el b/lisp/net/goto-addr.el
index 5b850b258c7..57187cfce65 100644
--- a/lisp/net/goto-addr.el
+++ b/lisp/net/goto-addr.el
@@ -1,6 +1,6 @@
 ;;; goto-addr.el --- click to browse URL or to send to e-mail address  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1995, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Ding <ericding@alum.mit.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/net/hmac-def.el b/lisp/net/hmac-def.el
index 0c8a29cc392..010e97dda02 100644
--- a/lisp/net/hmac-def.el
+++ b/lisp/net/hmac-def.el
@@ -1,6 +1,6 @@
 ;;; hmac-def.el --- A macro for defining HMAC functions.  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 1999, 2001, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
 ;; Keywords: HMAC, RFC2104
diff --git a/lisp/net/hmac-md5.el b/lisp/net/hmac-md5.el
index 188e6f4d6f0..4d111e2b62b 100644
--- a/lisp/net/hmac-md5.el
+++ b/lisp/net/hmac-md5.el
@@ -1,6 +1,6 @@
 ;;; hmac-md5.el --- Compute HMAC-MD5.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999, 2001, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
 ;; Keywords: HMAC, RFC2104, HMAC-MD5, MD5, KEYED-MD5, CRAM-MD5
diff --git a/lisp/net/imap.el b/lisp/net/imap.el
index fe78fbe8339..cfb92674d8a 100644
--- a/lisp/net/imap.el
+++ b/lisp/net/imap.el
@@ -1,6 +1,6 @@
 ;;; imap.el --- imap library  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;; Keywords: mail
diff --git a/lisp/net/ldap.el b/lisp/net/ldap.el
index de553468b1c..78405414a28 100644
--- a/lisp/net/ldap.el
+++ b/lisp/net/ldap.el
@@ -1,6 +1,6 @@
 ;;; ldap.el --- client interface to LDAP for Emacs  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <oscar@cpe.fr>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/net/mailcap.el b/lisp/net/mailcap.el
index aa0c1726553..722e98be2fc 100644
--- a/lisp/net/mailcap.el
+++ b/lisp/net/mailcap.el
@@ -1,6 +1,6 @@
 ;;; mailcap.el --- MIME media types configuration -*- lexical-binding: t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: William M. Perry <wmperry@aventail.com>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
diff --git a/lisp/net/mairix.el b/lisp/net/mairix.el
index 0b99d2a0b7c..4f90470d4fb 100644
--- a/lisp/net/mairix.el
+++ b/lisp/net/mairix.el
@@ -1,6 +1,6 @@
 ;;; mairix.el --- Mairix interface for Emacs  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: David Engster <dengste@eml.cc>
 ;; Keywords: mail searching
diff --git a/lisp/net/net-utils.el b/lisp/net/net-utils.el
index 192c8446eb1..ea4318e21b5 100644
--- a/lisp/net/net-utils.el
+++ b/lisp/net/net-utils.el
@@ -1,6 +1,6 @@
 ;;; net-utils.el --- network functions  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Peter Breton <pbreton@cs.umb.edu>
 ;; Created: Sun Mar 16 1997
diff --git a/lisp/net/network-stream.el b/lisp/net/network-stream.el
index 2b7e5393923..8cb5236ceb9 100644
--- a/lisp/net/network-stream.el
+++ b/lisp/net/network-stream.el
@@ -1,6 +1,6 @@
 ;;; network-stream.el --- open network processes, possibly with encryption -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: network
diff --git a/lisp/net/newst-backend.el b/lisp/net/newst-backend.el
index af196ccecf9..a68a6bf1a24 100644
--- a/lisp/net/newst-backend.el
+++ b/lisp/net/newst-backend.el
@@ -1,6 +1,6 @@
 ;;; newst-backend.el --- Retrieval backend for newsticker  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; Filename:    newst-backend.el
@@ -1623,7 +1623,7 @@ Sat, 07 Sep 2002 00:00:01 GMT
               ":\\([0-9]\\{2\\}\\)"
               ;; second
               "\\(:\\([0-9]\\{2\\}\\)\\)?"
-              ;; zone -- fixme
+              ;; zone
               "\\(\\s-+\\("
               "UT\\|GMT\\|EST\\|EDT\\|CST\\|CDT\\|MST\\|MDT\\|PST\\|PDT"
               "\\|\\([-+]\\)\\([0-9]\\{2\\}\\)\\([0-9]\\{2\\}\\)"
@@ -1642,16 +1642,26 @@ Sat, 07 Sep 2002 00:00:01 GMT
               (offset-hour (read (or (match-string 14 rfc822-string)
                                      "0")))
               (offset-minute (read (or (match-string 15 rfc822-string)
-                                       "0")))
-              ;;FIXME
-              )
+                                       "0"))))
           (when zone
             (cond ((string= sign "+")
                    (setq hour (- hour offset-hour))
                    (setq minute (- minute offset-minute)))
                   ((string= sign "-")
                    (setq hour (+ hour offset-hour))
-                   (setq minute (+ minute offset-minute)))))
+                   (setq minute (+ minute offset-minute)))
+                  ((or (string= zone "UT") (string= zone "GMT"))
+                   nil)
+                  ((string= zone "EDT")
+                   (setq hour (+ hour 4)))
+                  ((or (string= zone "EST") (string= zone "CDT"))
+                   (setq hour (+ hour 5)))
+                  ((or (string= zone "CST") (string= zone "MDT"))
+                   (setq hour (+ hour 6)))
+                  ((or (string= zone "MST") (string= zone "PDT"))
+                   (setq hour (+ hour 7)))
+                  ((string= zone "PST")
+                   (setq hour (+ hour 8)))))
           (condition-case error-data
               (let ((i 1))
                 (dolist (m '("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug"
diff --git a/lisp/net/newst-plainview.el b/lisp/net/newst-plainview.el
index 4eb6f6c695e..b284ca84bfc 100644
--- a/lisp/net/newst-plainview.el
+++ b/lisp/net/newst-plainview.el
@@ -1,6 +1,6 @@
 ;;; newst-plainview.el --- Single buffer frontend for newsticker.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; Filename:    newst-plainview.el
diff --git a/lisp/net/newst-reader.el b/lisp/net/newst-reader.el
index 4a7f0b8e3ee..9ec0b395675 100644
--- a/lisp/net/newst-reader.el
+++ b/lisp/net/newst-reader.el
@@ -1,6 +1,6 @@
 ;;; newst-reader.el --- Generic RSS reader functions.  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; Filename:    newst-reader.el
diff --git a/lisp/net/newst-ticker.el b/lisp/net/newst-ticker.el
index ef0fe838031..5477ad946ba 100644
--- a/lisp/net/newst-ticker.el
+++ b/lisp/net/newst-ticker.el
@@ -1,6 +1,6 @@
 ;;; newst-ticker.el --- mode line ticker for newsticker.  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; Filename:    newst-ticker.el
diff --git a/lisp/net/newst-treeview.el b/lisp/net/newst-treeview.el
index a1ac55bc7af..39988ba6cfb 100644
--- a/lisp/net/newst-treeview.el
+++ b/lisp/net/newst-treeview.el
@@ -1,6 +1,6 @@
 ;;; newst-treeview.el --- Treeview frontend for newsticker.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; Filename:    newst-treeview.el
diff --git a/lisp/net/newsticker.el b/lisp/net/newsticker.el
index 525cae21405..938683a12a1 100644
--- a/lisp/net/newsticker.el
+++ b/lisp/net/newsticker.el
@@ -1,6 +1,6 @@
 ;;; newsticker.el --- A Newsticker for Emacs. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; Filename:    newsticker.el
diff --git a/lisp/net/nsm.el b/lisp/net/nsm.el
index 3146189be63..dc04bf50c24 100644
--- a/lisp/net/nsm.el
+++ b/lisp/net/nsm.el
@@ -1,6 +1,6 @@
 ;;; nsm.el --- Network Security Manager  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: encryption, security, network
diff --git a/lisp/net/ntlm.el b/lisp/net/ntlm.el
index b58f0abb56b..356bf95669f 100644
--- a/lisp/net/ntlm.el
+++ b/lisp/net/ntlm.el
@@ -1,6 +1,6 @@
 ;;; ntlm.el --- NTLM (NT LanManager) authentication support  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2001, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Taro Kawagishi <tarok@transpulse.org>
 ;; Maintainer: Thomas Fitzsimmons <fitzsim@fitzsim.org>
diff --git a/lisp/net/pop3.el b/lisp/net/pop3.el
index 1bd52c7a56c..d2fdbc3ffff 100644
--- a/lisp/net/pop3.el
+++ b/lisp/net/pop3.el
@@ -1,6 +1,6 @@
 ;;; pop3.el --- Post Office Protocol (RFC 1460) interface  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Richard L. Pieri <ratinox@peorth.gweep.net>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/net/puny.el b/lisp/net/puny.el
index 3a276791ab2..8879e34ce27 100644
--- a/lisp/net/puny.el
+++ b/lisp/net/puny.el
@@ -1,6 +1,6 @@
 ;;; puny.el --- translate non-ASCII domain names to ASCII  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: mail, net
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index 81a572250af..da7c20b5e0a 100644
--- a/lisp/net/rcirc.el
+++ b/lisp/net/rcirc.el
@@ -1,6 +1,6 @@
 ;;; rcirc.el --- default, simple IRC client          -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Ryan Yeske <rcyeske@gmail.com>
 ;; Maintainers: Ryan Yeske <rcyeske@gmail.com>,
diff --git a/lisp/net/rfc2104.el b/lisp/net/rfc2104.el
index d1535aa700e..ea6a5382f4e 100644
--- a/lisp/net/rfc2104.el
+++ b/lisp/net/rfc2104.el
@@ -1,6 +1,6 @@
 ;;; rfc2104.el --- RFC2104 Hashed Message Authentication Codes  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <jas@pdc.kth.se>
 ;; Keywords: mail
diff --git a/lisp/net/sasl-cram.el b/lisp/net/sasl-cram.el
index ef5699ddc6e..5ae2c447ba5 100644
--- a/lisp/net/sasl-cram.el
+++ b/lisp/net/sasl-cram.el
@@ -1,6 +1,6 @@
 ;;; sasl-cram.el --- CRAM-MD5 module for the SASL client framework  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2000, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@gnu.org>
 ;;     Kenichi OKADA <okada@opaopa.org>
diff --git a/lisp/net/sasl-digest.el b/lisp/net/sasl-digest.el
index b78beb292c5..140758e23b0 100644
--- a/lisp/net/sasl-digest.el
+++ b/lisp/net/sasl-digest.el
@@ -1,6 +1,6 @@
 ;;; sasl-digest.el --- DIGEST-MD5 module for the SASL client framework  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2000, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;;     Kenichi OKADA <okada@opaopa.org>
diff --git a/lisp/net/sasl-ntlm.el b/lisp/net/sasl-ntlm.el
index d4c35fc66f0..c70059ac69d 100644
--- a/lisp/net/sasl-ntlm.el
+++ b/lisp/net/sasl-ntlm.el
@@ -1,6 +1,6 @@
 ;;; sasl-ntlm.el --- NTLM (NT Lan Manager) module for the SASL client 
framework  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2000, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Taro Kawagishi <tarok@transpulse.org>
 ;; Keywords: SASL, NTLM
diff --git a/lisp/net/sasl-scram-rfc.el b/lisp/net/sasl-scram-rfc.el
index f7a2e425412..ddccf2b1425 100644
--- a/lisp/net/sasl-scram-rfc.el
+++ b/lisp/net/sasl-scram-rfc.el
@@ -1,6 +1,6 @@
 ;;; sasl-scram-rfc.el --- SCRAM-SHA-1 module for the SASL client framework  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Magnus Henoch <magnus.henoch@gmail.com>
 ;; Package: sasl
diff --git a/lisp/net/sasl-scram-sha256.el b/lisp/net/sasl-scram-sha256.el
index 7bd98f200cd..27267f3c2e2 100644
--- a/lisp/net/sasl-scram-sha256.el
+++ b/lisp/net/sasl-scram-sha256.el
@@ -1,6 +1,6 @@
 ;;; sasl-scram-sha256.el --- SCRAM-SHA-256 module for the SASL client 
framework  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;; Package: sasl
diff --git a/lisp/net/sasl.el b/lisp/net/sasl.el
index e0def55ad9f..7fe97904a4c 100644
--- a/lisp/net/sasl.el
+++ b/lisp/net/sasl.el
@@ -1,6 +1,6 @@
 ;;; sasl.el --- SASL client framework  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2000, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@gnu.org>
 ;; Keywords: SASL
diff --git a/lisp/net/secrets.el b/lisp/net/secrets.el
index c4f97a92fb5..f4e68d7b817 100644
--- a/lisp/net/secrets.el
+++ b/lisp/net/secrets.el
@@ -1,6 +1,6 @@
 ;;; secrets.el --- Client interface to gnome-keyring and kwallet. -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm password passphrase
diff --git a/lisp/net/shr-color.el b/lisp/net/shr-color.el
index e68e4a69333..cc2e6dc469b 100644
--- a/lisp/net/shr-color.el
+++ b/lisp/net/shr-color.el
@@ -1,6 +1,6 @@
 ;;; shr-color.el --- Simple HTML Renderer color management  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <julien@danjou.info>
 ;; Keywords: html
diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index 75992bc62a4..9c2ae98d77e 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -1,6 +1,6 @@
 ;;; shr.el --- Simple HTML Renderer -*- lexical-binding: t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: html
diff --git a/lisp/net/sieve-manage.el b/lisp/net/sieve-manage.el
index b2caa62e51f..5bee4f4c4ad 100644
--- a/lisp/net/sieve-manage.el
+++ b/lisp/net/sieve-manage.el
@@ -1,6 +1,6 @@
 ;;; sieve-manage.el --- Implementation of the managesieve protocol in elisp  
-*- lexical-binding:t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;;         Albert Krewinkel <tarleb@moltkeplatz.de>
diff --git a/lisp/net/sieve-mode.el b/lisp/net/sieve-mode.el
index 695a3235a7b..a54c3c6f103 100644
--- a/lisp/net/sieve-mode.el
+++ b/lisp/net/sieve-mode.el
@@ -1,6 +1,6 @@
 ;;; sieve-mode.el --- Sieve code editing commands for Emacs  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 
diff --git a/lisp/net/sieve.el b/lisp/net/sieve.el
index c2faeaef544..fbd07dee27c 100644
--- a/lisp/net/sieve.el
+++ b/lisp/net/sieve.el
@@ -1,6 +1,6 @@
 ;;; sieve.el --- Utilities to manage sieve scripts  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 
diff --git a/lisp/net/snmp-mode.el b/lisp/net/snmp-mode.el
index 394c4a9666d..24f6bd8ae57 100644
--- a/lisp/net/snmp-mode.el
+++ b/lisp/net/snmp-mode.el
@@ -1,6 +1,6 @@
 ;;; snmp-mode.el --- SNMP & SNMPv2 MIB major mode  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1995, 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Paul D. Smith <psmith@BayNetworks.com>
 ;; Keywords: data
diff --git a/lisp/net/soap-client.el b/lisp/net/soap-client.el
index 5e7bdbe6c6a..e4b8bbd9cb5 100644
--- a/lisp/net/soap-client.el
+++ b/lisp/net/soap-client.el
@@ -1,6 +1,6 @@
 ;;; soap-client.el --- Access SOAP web services       -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Alexandru Harsanyi <AlexHarsanyi@gmail.com>
 ;; Author: Thomas Fitzsimmons <fitzsim@fitzsim.org>
@@ -1317,7 +1317,7 @@ See also `soap-wsdl-resolve-references'."
   "Validate VALUE against the basic type TYPE."
   (let* ((kind (soap-xs-basic-type-kind type)))
     (cl-case kind
-      ((anyType Array byte[])
+      ((anyType Array byte\[\])
        value)
       (t
        (let ((convert (get kind 'rng-xsd-convert)))
diff --git a/lisp/net/soap-inspect.el b/lisp/net/soap-inspect.el
index 85fd7a71dc8..97e962dfae5 100644
--- a/lisp/net/soap-inspect.el
+++ b/lisp/net/soap-inspect.el
@@ -1,6 +1,6 @@
 ;;; soap-inspect.el --- Interactive WSDL inspector    -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Alexandru Harsanyi <AlexHarsanyi@gmail.com>
 ;; Created: October 2010
diff --git a/lisp/net/socks.el b/lisp/net/socks.el
index 2ba1c20566f..adf8b357dc3 100644
--- a/lisp/net/socks.el
+++ b/lisp/net/socks.el
@@ -1,6 +1,6 @@
 ;;; socks.el --- A Socks v5 Client for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1996-2000, 2002, 2007-2022 Free Software Foundation,
+;; Copyright (C) 1996-2000, 2002, 2007-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: William M. Perry <wmperry@gnu.org>
diff --git a/lisp/net/telnet.el b/lisp/net/telnet.el
index bea79e89331..fbe9af3d6a5 100644
--- a/lisp/net/telnet.el
+++ b/lisp/net/telnet.el
@@ -1,6 +1,6 @@
 ;;; telnet.el --- run a telnet session from within an Emacs buffer  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Author: William F. Schelter
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el
index 90020fbb1b6..bfa84007ac5 100644
--- a/lisp/net/tramp-adb.el
+++ b/lisp/net/tramp-adb.el
@@ -1,6 +1,6 @@
 ;;; tramp-adb.el --- Functions for calling Android Debug Bridge from Tramp  
-*- lexical-binding:t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Jürgen Hötzel <juergen@archlinux.org>
 ;; Keywords: comm, processes
@@ -411,20 +411,11 @@ Emacs dired can't find files."
 
 (defun tramp-adb-handle-make-directory (dir &optional parents)
   "Like `make-directory' for Tramp files."
-  (setq dir (expand-file-name dir))
-  (with-parsed-tramp-file-name dir nil
-    (when (and (null parents) (file-exists-p dir))
-      (tramp-error v 'file-already-exists dir))
-    (when parents
-      (let ((par (expand-file-name ".." dir)))
-       (unless (file-directory-p par)
-         (make-directory par parents))))
-    (tramp-flush-directory-properties v localname)
-    (unless (or (tramp-adb-send-command-and-check
-                v (format "mkdir -m %#o %s"
-                          (default-file-modes)
-                          (tramp-shell-quote-argument localname)))
-               (and parents (file-directory-p dir)))
+  (tramp-skeleton-make-directory dir parents
+    (unless (tramp-adb-send-command-and-check
+            v (format "mkdir -m %#o %s"
+                      (default-file-modes)
+                      (tramp-shell-quote-argument localname)))
       (tramp-error v 'file-error "Couldn't make directory %s" dir))))
 
 (defun tramp-adb-handle-delete-directory (directory &optional recursive trash)
diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el
index 49b0c0bb6b4..36992014e13 100644
--- a/lisp/net/tramp-archive.el
+++ b/lisp/net/tramp-archive.el
@@ -1,6 +1,6 @@
 ;;; tramp-archive.el --- Tramp archive manager  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
diff --git a/lisp/net/tramp-cache.el b/lisp/net/tramp-cache.el
index 912ea5f8bbd..09e43a99039 100644
--- a/lisp/net/tramp-cache.el
+++ b/lisp/net/tramp-cache.el
@@ -1,6 +1,6 @@
 ;;; tramp-cache.el --- file information caching for Tramp  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2000, 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Daniel Pittman <daniel@inanna.danann.net>
 ;;         Michael Albinus <michael.albinus@gmx.de>
diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el
index 0442fa74096..bf7d45d2a5a 100644
--- a/lisp/net/tramp-cmds.el
+++ b/lisp/net/tramp-cmds.el
@@ -1,6 +1,6 @@
 ;;; tramp-cmds.el --- Interactive commands for Tramp  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el
index 252eab0f3b1..f176476a73a 100644
--- a/lisp/net/tramp-compat.el
+++ b/lisp/net/tramp-compat.el
@@ -1,6 +1,6 @@
 ;;; tramp-compat.el --- Tramp compatibility functions  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
diff --git a/lisp/net/tramp-container.el b/lisp/net/tramp-container.el
index 7b942532267..6cdd6c654ea 100644
--- a/lisp/net/tramp-container.el
+++ b/lisp/net/tramp-container.el
@@ -1,6 +1,6 @@
 ;;; tramp-container.el --- Tramp integration for Docker-like containers  -*- 
lexical-binding: t; -*-
 
-;; Copyright © 2022 Free Software Foundation, Inc.
+;; Copyright © 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Brian Cully <bjc@kublai.com>
 ;; Keywords: comm, processes
diff --git a/lisp/net/tramp-crypt.el b/lisp/net/tramp-crypt.el
index 249b3fcd4d7..0e033451af5 100644
--- a/lisp/net/tramp-crypt.el
+++ b/lisp/net/tramp-crypt.el
@@ -1,6 +1,6 @@
 ;;; tramp-crypt.el --- Tramp crypt utilities  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -800,16 +800,9 @@ WILDCARD is not supported."
 
 (defun tramp-crypt-handle-make-directory (dir &optional parents)
   "Like `make-directory' for Tramp files."
-  (with-parsed-tramp-file-name (expand-file-name dir) nil
-    (when (and (null parents) (file-exists-p dir))
-      (tramp-error v 'file-already-exists dir))
+  (tramp-skeleton-make-directory dir parents
     (let (tramp-crypt-enabled)
-      (make-directory (tramp-crypt-encrypt-file-name dir) parents))
-    ;; When PARENTS is non-nil, DIR could be a chain of non-existent
-    ;; directories a/b/c/...  Instead of checking, we simply flush the
-    ;; whole cache.
-    (tramp-flush-directory-properties
-     v (if parents "/" (file-name-directory localname)))))
+      (make-directory (tramp-crypt-encrypt-file-name dir) parents))))
 
 (defun tramp-crypt-handle-rename-file
   (filename newname &optional ok-if-already-exists)
diff --git a/lisp/net/tramp-ftp.el b/lisp/net/tramp-ftp.el
index ad736256cab..1712c00b0a0 100644
--- a/lisp/net/tramp-ftp.el
+++ b/lisp/net/tramp-ftp.el
@@ -1,6 +1,6 @@
 ;;; tramp-ftp.el --- Tramp convenience functions for Ange-FTP  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
diff --git a/lisp/net/tramp-fuse.el b/lisp/net/tramp-fuse.el
index ea6b5a0622c..b73ec22f0c4 100644
--- a/lisp/net/tramp-fuse.el
+++ b/lisp/net/tramp-fuse.el
@@ -1,6 +1,6 @@
 ;;; tramp-fuse.el --- Tramp access functions for FUSE mounts  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -127,14 +127,8 @@
 
 (defun tramp-fuse-handle-make-directory (dir &optional parents)
   "Like `make-directory' for Tramp files."
-  (with-parsed-tramp-file-name (expand-file-name dir) nil
-    (make-directory (tramp-fuse-local-file-name dir) parents)
-    ;; When PARENTS is non-nil, DIR could be a chain of non-existent
-    ;; directories a/b/c/...  Instead of checking, we simply flush the
-    ;; whole file cache.
-    (tramp-flush-file-properties v localname)
-    (tramp-flush-directory-properties
-     v (if parents "/" (file-name-directory localname)))))
+  (tramp-skeleton-make-directory dir parents
+    (make-directory (tramp-fuse-local-file-name dir) parents)))
 
 
 ;; File name helper functions.
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index da7641774fb..1a5303b4d5d 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -1,6 +1,6 @@
 ;;; tramp-gvfs.el --- Tramp access functions for GVFS daemon  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -1560,27 +1560,13 @@ If FILE-SYSTEM is non-nil, return file system 
attributes."
 
 (defun tramp-gvfs-handle-make-directory (dir &optional parents)
   "Like `make-directory' for Tramp files."
-  (setq dir (directory-file-name (expand-file-name dir)))
-  (with-parsed-tramp-file-name dir nil
-    (when (and (null parents) (file-exists-p dir))
-      (tramp-error v 'file-already-exists dir))
-    (tramp-flush-directory-properties v localname)
+  (tramp-skeleton-make-directory dir parents
     (save-match-data
-      (let ((ldir (file-name-directory dir)))
-       ;; Make missing directory parts.  "gvfs-mkdir -p ..." does not
-       ;; work robust.
-       (when (and parents (not (file-directory-p ldir)))
-         (make-directory ldir parents))
-       ;; Just do it.
-       (or (when-let ((mkdir-succeeded
-                       (and
-                        (tramp-gvfs-send-command
-                         v "gvfs-mkdir" (tramp-gvfs-url-file-name dir))
-                        (tramp-gvfs-info dir))))
-             (set-file-modes dir (default-file-modes))
-             mkdir-succeeded)
-           (and parents (file-directory-p dir))
-           (tramp-error v 'file-error "Couldn't make directory %s" dir))))))
+      (if (and (tramp-gvfs-send-command
+               v "gvfs-mkdir" (tramp-gvfs-url-file-name dir))
+              (tramp-gvfs-info dir))
+         (set-file-modes dir (default-file-modes))
+       (tramp-error v 'file-error "Couldn't make directory %s" dir)))))
 
 (defun tramp-gvfs-handle-rename-file
   (filename newname &optional ok-if-already-exists)
diff --git a/lisp/net/tramp-integration.el b/lisp/net/tramp-integration.el
index 78107e1a03b..cff0877555e 100644
--- a/lisp/net/tramp-integration.el
+++ b/lisp/net/tramp-integration.el
@@ -1,6 +1,6 @@
 ;;; tramp-integration.el --- Tramp integration into other packages  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
diff --git a/lisp/net/tramp-rclone.el b/lisp/net/tramp-rclone.el
index 8e583cc4025..2360abfb1dd 100644
--- a/lisp/net/tramp-rclone.el
+++ b/lisp/net/tramp-rclone.el
@@ -1,6 +1,6 @@
 ;;; tramp-rclone.el --- Tramp access functions to cloud storages  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 6087f16431e..1ba2a92e21c 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -1,6 +1,6 @@
 ;;; tramp-sh.el --- Tramp access functions for (s)sh-like connections  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; (copyright statements below in code to be updated with the above notice)
 
@@ -838,7 +838,6 @@ characters need to be doubled.")
 (defconst tramp-perl-encode
   "%p -e '
 # This script contributed by Juanma Barranquero <lektu@terra.es>.
-# Copyright (C) 2002-2022 Free Software Foundation, Inc.
 use strict;
 
 my %%trans = do {
@@ -877,7 +876,6 @@ characters need to be doubled.")
 (defconst tramp-perl-decode
   "%p -e '
 # This script contributed by Juanma Barranquero <lektu@terra.es>.
-# Copyright (C) 2002-2022 Free Software Foundation, Inc.
 use strict;
 
 my %%trans = do {
@@ -2559,19 +2557,10 @@ The method used must be an out-of-band method."
 
 (defun tramp-sh-handle-make-directory (dir &optional parents)
   "Like `make-directory' for Tramp files."
-  (setq dir (expand-file-name dir))
-  (with-parsed-tramp-file-name dir nil
-    (when (and (null parents) (file-exists-p dir))
-      (tramp-error v 'file-already-exists dir))
-    ;; When PARENTS is non-nil, DIR could be a chain of non-existent
-    ;; directories a/b/c/...  Instead of checking, we simply flush the
-    ;; whole cache.
-    (tramp-flush-directory-properties
-     v (if parents "/" (file-name-directory localname)))
+  (tramp-skeleton-make-directory dir parents
     (tramp-barf-unless-okay
      v (format "%s -m %#o %s"
-              (if parents "mkdir -p" "mkdir")
-              (default-file-modes)
+              "mkdir" (default-file-modes)
               (tramp-shell-quote-argument localname))
      "Couldn't make directory %s" dir)))
 
@@ -2829,7 +2818,7 @@ the result will be a local, non-Tramp, file name."
   (when (zerop (length name)) (setq name "."))
   ;; On MS Windows, some special file names are not returned properly
   ;; by `file-name-absolute-p'.  If `tramp-syntax' is `simplified',
-  ;; there could be the falso positive "/:".
+  ;; there could be the false positive "/:".
   (if (or (and (eq system-type 'windows-nt)
               (string-match-p
                (tramp-compat-rx bol (| (: alpha ":") (: (literal null-device) 
eol)))
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index cd73b9b8eca..dc374fd01b5 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -1,6 +1,6 @@
 ;;; tramp-smb.el --- Tramp access functions for SMB servers  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -1172,30 +1172,14 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are 
completely ignored."
 
 (defun tramp-smb-handle-make-directory (dir &optional parents)
   "Like `make-directory' for Tramp files."
-  (setq dir (directory-file-name (expand-file-name dir)))
-  (unless (file-name-absolute-p dir)
-    (setq dir (expand-file-name dir default-directory)))
-  (with-parsed-tramp-file-name dir nil
-    (when (and (null parents) (file-exists-p dir))
-      (tramp-error v 'file-already-exists dir))
-    (let* ((ldir (file-name-directory dir)))
-      ;; Make missing directory parts.
-      (when (and parents
-                (tramp-smb-get-share v)
-                (not (file-directory-p ldir)))
-       (make-directory ldir parents))
-      ;; Just do it.
-      (when (file-directory-p ldir)
-       (tramp-smb-send-command
-        v (if (tramp-smb-get-cifs-capabilities v)
-              (format "posix_mkdir %s %o"
-                      (tramp-smb-shell-quote-localname v) (default-file-modes))
-            (format "mkdir %s" (tramp-smb-shell-quote-localname v))))
-       ;; We must also flush the cache of the directory, because
-       ;; `file-attributes' reads the values from there.
-       (tramp-flush-file-properties v localname))
-      (unless (file-directory-p dir)
-       (tramp-error v 'file-error "Couldn't make directory %s" dir)))))
+  (tramp-skeleton-make-directory dir parents
+    (tramp-smb-send-command
+     v (if (tramp-smb-get-cifs-capabilities v)
+          (format "posix_mkdir %s %o"
+                  (tramp-smb-shell-quote-localname v) (default-file-modes))
+        (format "mkdir %s" (tramp-smb-shell-quote-localname v))))
+    (unless (file-directory-p dir)
+      (tramp-error v 'file-error "Couldn't make directory %s" dir))))
 
 ;; This is not used anymore.
 (defun tramp-smb-handle-make-directory-internal (directory)
diff --git a/lisp/net/tramp-sshfs.el b/lisp/net/tramp-sshfs.el
index 44c55041ff8..2d3c436632f 100644
--- a/lisp/net/tramp-sshfs.el
+++ b/lisp/net/tramp-sshfs.el
@@ -1,6 +1,6 @@
 ;;; tramp-sshfs.el --- Tramp access functions via sshfs  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
diff --git a/lisp/net/tramp-sudoedit.el b/lisp/net/tramp-sudoedit.el
index fcc27dd8343..63946c2da30 100644
--- a/lisp/net/tramp-sudoedit.el
+++ b/lisp/net/tramp-sudoedit.el
@@ -1,6 +1,6 @@
 ;;; tramp-sudoedit.el --- Functions for accessing under root permissions  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -626,18 +626,9 @@ the result will be a local, non-Tramp, file name."
 
 (defun tramp-sudoedit-handle-make-directory (dir &optional parents)
   "Like `make-directory' for Tramp files."
-  (setq dir (expand-file-name dir))
-  (with-parsed-tramp-file-name dir nil
-    (when (and (null parents) (file-exists-p dir))
-      (tramp-error v 'file-already-exists "Directory already exists %s" dir))
-    ;; When PARENTS is non-nil, DIR could be a chain of non-existent
-    ;; directories a/b/c/...  Instead of checking, we simply flush the
-    ;; whole cache.
-    (tramp-flush-directory-properties
-     v (if parents "/" (file-name-directory localname)))
+  (tramp-skeleton-make-directory dir parents
     (unless (tramp-sudoedit-send-command
-            v (if parents '("mkdir" "-p") "mkdir")
-            "-m" (format "%#o" (default-file-modes))
+            v "mkdir" "-m" (format "%#o" (default-file-modes))
             (tramp-compat-file-name-unquote localname))
       (tramp-error v 'file-error "Couldn't make directory %s" dir))))
 
diff --git a/lisp/net/tramp-uu.el b/lisp/net/tramp-uu.el
index 2bbdb299a69..e7527f06e81 100644
--- a/lisp/net/tramp-uu.el
+++ b/lisp/net/tramp-uu.el
@@ -1,6 +1,6 @@
 ;;; tramp-uu.el --- uuencode in Lisp  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <kai.grossjohann@gmx.net>
 ;; Maintainer: Michael Albinus <michael.albinus@gmx.de>
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index ca8963fbf54..e08d98b2b36 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -1,6 +1,6 @@
 ;;; tramp.el --- Transparent Remote Access, Multiple Protocol  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <kai.grossjohann@gmx.net>
 ;;         Michael Albinus <michael.albinus@gmx.de>
@@ -3537,6 +3537,27 @@ BODY is the backend specific code."
        ;; Trigger the `file-missing' error.
        (signal 'error nil)))))
 
+(defmacro tramp-skeleton-make-directory (dir &optional parents &rest body)
+  "Skeleton for `tramp-*-handle-make-directory'.
+BODY is the backend specific code."
+  ;; Since Emacs 29.1, PARENTS isn't propagated to the handlers
+  ;; anymore.  And the return values are specified since then as well.
+  (declare (indent 2) (debug t))
+  `(let* ((dir (directory-file-name (expand-file-name ,dir)))
+         (par (file-name-directory dir)))
+     (with-parsed-tramp-file-name dir nil
+       (when (and (null ,parents) (file-exists-p dir))
+        (tramp-error v 'file-already-exists dir))
+       ;; Make missing directory parts.
+       (when ,parents
+        (unless (file-directory-p par)
+          (make-directory par ,parents)))
+       ;; Just do it.
+       (if (file-exists-p dir) t
+        (tramp-flush-file-properties v localname)
+        ,@body
+        nil))))
+
 (defmacro tramp-skeleton-set-file-modes-times-uid-gid
     (filename &rest body)
   "Skeleton for `tramp-*-set-file-{modes,times,uid-gid}'.
@@ -5418,7 +5439,7 @@ Wait, until the connection buffer changes."
        ;; Hide message in buffer.
        (narrow-to-region (point-max) (point-max))
        ;; Wait for new output.
-       (while (not (tramp-compat-ignore-error 'file-error
+       (while (not (tramp-compat-ignore-error file-error
                      (tramp-wait-for-regexp
                       proc 0.1 tramp-security-key-confirmed-regexp)))
          (when (tramp-check-for-regexp proc tramp-security-key-timeout-regexp)
diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el
index caf6750c26d..7532c64f853 100644
--- a/lisp/net/trampver.el
+++ b/lisp/net/trampver.el
@@ -1,7 +1,7 @@
 ;;; trampver.el --- Transparent Remote Access, Multiple Protocol  -*- 
lexical-binding:t -*-
 ;;; lisp/trampver.el.  Generated from trampver.el.in by configure.
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <kai.grossjohann@gmx.net>
 ;; Maintainer: Michael Albinus <michael.albinus@gmx.de>
diff --git a/lisp/net/webjump.el b/lisp/net/webjump.el
index 9886a4c79d8..fe7c3679876 100644
--- a/lisp/net/webjump.el
+++ b/lisp/net/webjump.el
@@ -1,6 +1,6 @@
 ;;; webjump.el --- programmable Web hotlist  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1996-1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author:     Neil W. Van Dyke <nwv@acm.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/net/zeroconf.el b/lisp/net/zeroconf.el
index 8345748cbae..238bf20bb66 100644
--- a/lisp/net/zeroconf.el
+++ b/lisp/net/zeroconf.el
@@ -1,6 +1,6 @@
 ;;; zeroconf.el --- Service browser using Avahi.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, hardware
diff --git a/lisp/newcomment.el b/lisp/newcomment.el
index 385dd80beba..022bf3059be 100644
--- a/lisp/newcomment.el
+++ b/lisp/newcomment.el
@@ -1,6 +1,6 @@
 ;;; newcomment.el --- (un)comment regions of buffers -*- lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: code extracted from Emacs-20's simple.el
 ;; Maintainer: Stefan Monnier <monnier@gnu.org>
diff --git a/lisp/notifications.el b/lisp/notifications.el
index b58a1a02116..984ddbec5e9 100644
--- a/lisp/notifications.el
+++ b/lisp/notifications.el
@@ -1,6 +1,6 @@
 ;;; notifications.el --- Client interface to desktop notifications.  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <julien@danjou.info>
 ;; Keywords: comm desktop notifications
diff --git a/lisp/novice.el b/lisp/novice.el
index 3a3596e30f8..c3549acef3e 100644
--- a/lisp/novice.el
+++ b/lisp/novice.el
@@ -1,6 +1,6 @@
 ;;; novice.el --- handling of disabled commands ("novice mode") for Emacs  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985-1987, 1994, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1985-1987, 1994, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/nxml/nxml-enc.el b/lisp/nxml/nxml-enc.el
index 493808fcdb1..1fd7abef974 100644
--- a/lisp/nxml/nxml-enc.el
+++ b/lisp/nxml/nxml-enc.el
@@ -1,6 +1,6 @@
 ;;; nxml-enc.el --- XML encoding auto-detection  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-maint.el b/lisp/nxml/nxml-maint.el
index 974deef406e..24b38ed0635 100644
--- a/lisp/nxml/nxml-maint.el
+++ b/lisp/nxml/nxml-maint.el
@@ -1,6 +1,6 @@
 ;;; nxml-maint.el --- commands for maintainers of nxml-*.el  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el
index fb8d5322c07..3869d0327fd 100644
--- a/lisp/nxml/nxml-mode.el
+++ b/lisp/nxml/nxml-mode.el
@@ -1,6 +1,6 @@
 ;;; nxml-mode.el --- a new XML mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2003-2004, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-ns.el b/lisp/nxml/nxml-ns.el
index 509d88c7b16..2781ea87938 100644
--- a/lisp/nxml/nxml-ns.el
+++ b/lisp/nxml/nxml-ns.el
@@ -1,6 +1,6 @@
 ;;; nxml-ns.el --- XML namespace processing  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-outln.el b/lisp/nxml/nxml-outln.el
index 1518122a79d..5f1eec75ef9 100644
--- a/lisp/nxml/nxml-outln.el
+++ b/lisp/nxml/nxml-outln.el
@@ -1,6 +1,6 @@
 ;;; nxml-outln.el --- outline support for nXML mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2004, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-parse.el b/lisp/nxml/nxml-parse.el
index 56ba4480bfa..f2440065deb 100644
--- a/lisp/nxml/nxml-parse.el
+++ b/lisp/nxml/nxml-parse.el
@@ -1,6 +1,6 @@
 ;;; nxml-parse.el --- XML parser, sharing infrastructure with nxml-mode  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-rap.el b/lisp/nxml/nxml-rap.el
index 553ac57cc32..8e11707b9b7 100644
--- a/lisp/nxml/nxml-rap.el
+++ b/lisp/nxml/nxml-rap.el
@@ -1,6 +1,6 @@
 ;;; nxml-rap.el --- low-level support for random access parsing for nXML mode  
-*- lexical-binding:t -*-
 
-;; Copyright (C) 2003-2004, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/nxml-util.el b/lisp/nxml/nxml-util.el
index 241c54488fd..e9d04126400 100644
--- a/lisp/nxml/nxml-util.el
+++ b/lisp/nxml/nxml-util.el
@@ -1,6 +1,6 @@
 ;;; nxml-util.el --- utility functions for nxml-*.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/rng-cmpct.el b/lisp/nxml/rng-cmpct.el
index 85db33b9a9b..98aad8bd4dd 100644
--- a/lisp/nxml/rng-cmpct.el
+++ b/lisp/nxml/rng-cmpct.el
@@ -1,6 +1,6 @@
 ;;; rng-cmpct.el --- parsing of RELAX NG Compact Syntax schemas  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-dt.el b/lisp/nxml/rng-dt.el
index 0523e8132bf..577157687a3 100644
--- a/lisp/nxml/rng-dt.el
+++ b/lisp/nxml/rng-dt.el
@@ -1,6 +1,6 @@
 ;;; rng-dt.el --- datatype library interface for RELAX NG  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-loc.el b/lisp/nxml/rng-loc.el
index 40332aacd50..82e8494a49f 100644
--- a/lisp/nxml/rng-loc.el
+++ b/lisp/nxml/rng-loc.el
@@ -1,6 +1,6 @@
 ;;; rng-loc.el --- Locate the schema to use for validation  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-maint.el b/lisp/nxml/rng-maint.el
index 3b4593760b9..42feb221e81 100644
--- a/lisp/nxml/rng-maint.el
+++ b/lisp/nxml/rng-maint.el
@@ -1,6 +1,6 @@
 ;;; rng-maint.el --- commands for RELAX NG maintainers  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-match.el b/lisp/nxml/rng-match.el
index f3549681f25..51c197cd6c6 100644
--- a/lisp/nxml/rng-match.el
+++ b/lisp/nxml/rng-match.el
@@ -1,6 +1,6 @@
 ;;; rng-match.el --- matching of RELAX NG patterns against XML events  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-nxml.el b/lisp/nxml/rng-nxml.el
index b1beb195032..568cf24451b 100644
--- a/lisp/nxml/rng-nxml.el
+++ b/lisp/nxml/rng-nxml.el
@@ -1,6 +1,6 @@
 ;;; rng-nxml.el --- make nxml-mode take advantage of rng-validate-mode  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-parse.el b/lisp/nxml/rng-parse.el
index 1c08d77f56f..1728de7aadd 100644
--- a/lisp/nxml/rng-parse.el
+++ b/lisp/nxml/rng-parse.el
@@ -1,6 +1,6 @@
 ;;; rng-parse.el --- parse an XML file and validate it against a schema  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-pttrn.el b/lisp/nxml/rng-pttrn.el
index 614b59f8079..f37ace7f734 100644
--- a/lisp/nxml/rng-pttrn.el
+++ b/lisp/nxml/rng-pttrn.el
@@ -1,6 +1,6 @@
 ;;; rng-pttrn.el --- RELAX NG patterns  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-uri.el b/lisp/nxml/rng-uri.el
index 59e696e2cc9..4cfa212990d 100644
--- a/lisp/nxml/rng-uri.el
+++ b/lisp/nxml/rng-uri.el
@@ -1,6 +1,6 @@
 ;;; rng-uri.el --- URI parsing and manipulation  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/rng-util.el b/lisp/nxml/rng-util.el
index 7ac6db25f43..27c924d960f 100644
--- a/lisp/nxml/rng-util.el
+++ b/lisp/nxml/rng-util.el
@@ -1,6 +1,6 @@
 ;;; rng-util.el --- utility functions for RELAX NG library  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-valid.el b/lisp/nxml/rng-valid.el
index d82c8470d75..898fe204fd4 100644
--- a/lisp/nxml/rng-valid.el
+++ b/lisp/nxml/rng-valid.el
@@ -1,6 +1,6 @@
 ;;; rng-valid.el --- real-time validation of XML using RELAX NG  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/rng-xsd.el b/lisp/nxml/rng-xsd.el
index bca432d92b8..cd963534402 100644
--- a/lisp/nxml/rng-xsd.el
+++ b/lisp/nxml/rng-xsd.el
@@ -1,6 +1,6 @@
 ;;; rng-xsd.el --- W3C XML Schema datatypes library for RELAX NG  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
diff --git a/lisp/nxml/xmltok.el b/lisp/nxml/xmltok.el
index ecdf510782a..c36d225c7c9 100644
--- a/lisp/nxml/xmltok.el
+++ b/lisp/nxml/xmltok.el
@@ -1,6 +1,6 @@
 ;;; xmltok.el --- XML tokenization  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
diff --git a/lisp/nxml/xsd-regexp.el b/lisp/nxml/xsd-regexp.el
index 003410577a6..3c33c4c0170 100644
--- a/lisp/nxml/xsd-regexp.el
+++ b/lisp/nxml/xsd-regexp.el
@@ -1,6 +1,6 @@
 ;;; xsd-regexp.el --- translate W3C XML Schema regexps to Emacs regexps  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, regexp
diff --git a/lisp/obarray.el b/lisp/obarray.el
index dd62de01a8c..485627d51de 100644
--- a/lisp/obarray.el
+++ b/lisp/obarray.el
@@ -1,6 +1,6 @@
 ;;; obarray.el --- obarray functions -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: obarray functions
diff --git a/lisp/obsolete/autoarg.el b/lisp/obsolete/autoarg.el
index 8d5ded93421..cd4628be669 100644
--- a/lisp/obsolete/autoarg.el
+++ b/lisp/obsolete/autoarg.el
@@ -1,6 +1,6 @@
 ;;; autoarg.el --- make digit keys supply prefix args -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author:  Dave Love <fx@gnu.org>
 ;; Created: 1998-09-04
diff --git a/lisp/obsolete/autoload.el b/lisp/obsolete/autoload.el
index 680df739e0b..fae5db0fd52 100644
--- a/lisp/obsolete/autoload.el
+++ b/lisp/obsolete/autoload.el
@@ -1,6 +1,6 @@
 ;;; autoload.el --- maintain autoloads in loaddefs.el  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1991-1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991-1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Roland McGrath <roland@gnu.org>
 ;; Keywords: maint
diff --git a/lisp/obsolete/bruce.el b/lisp/obsolete/bruce.el
index 465cf429e97..83f91ab8816 100644
--- a/lisp/obsolete/bruce.el
+++ b/lisp/obsolete/bruce.el
@@ -1,7 +1,7 @@
 ;;; bruce.el --- bruce phrase utility for overloading the Communications  -*- 
lexical-binding: t; -*-
 ;;; Decency Act snoops, if any.
 
-;; Copyright (C) 1988, 1993, 1997, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1988, 1993, 1997, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/obsolete/cc-compat.el b/lisp/obsolete/cc-compat.el
index 19068e4bf21..33330623739 100644
--- a/lisp/obsolete/cc-compat.el
+++ b/lisp/obsolete/cc-compat.el
@@ -1,6 +1,6 @@
 ;;; cc-compat.el --- cc-mode compatibility with c-mode.el confusion  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2023 Free Software Foundation, Inc.
 
 ;; Authors:    1998- Martin Stjernholm
 ;;            1994-1999 Barry A. Warsaw
diff --git a/lisp/obsolete/cl-compat.el b/lisp/obsolete/cl-compat.el
index e58f475d1c2..255c3dc8277 100644
--- a/lisp/obsolete/cl-compat.el
+++ b/lisp/obsolete/cl-compat.el
@@ -1,6 +1,6 @@
 ;;; cl-compat.el --- Common Lisp extensions for GNU Emacs Lisp (compatibility) 
 -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 ;; Version: 2.02
diff --git a/lisp/obsolete/cl.el b/lisp/obsolete/cl.el
index 93f9dee4b4b..1b86ed259f7 100644
--- a/lisp/obsolete/cl.el
+++ b/lisp/obsolete/cl.el
@@ -1,6 +1,6 @@
 ;;; cl.el --- Compatibility aliases for the old CL library.  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Deprecated-since: 27.1
diff --git a/lisp/obsolete/crisp.el b/lisp/obsolete/crisp.el
index 5e1a278a2c2..c7e3919cdba 100644
--- a/lisp/obsolete/crisp.el
+++ b/lisp/obsolete/crisp.el
@@ -1,6 +1,6 @@
 ;;; crisp.el --- CRiSP/Brief Emacs emulator  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997-1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Gary D. Foster <Gary.Foster@Corp.Sun.COM>
 ;; Keywords: emulations brief crisp
diff --git a/lisp/obsolete/eieio-compat.el b/lisp/obsolete/eieio-compat.el
index ead9352695c..bb3d5ccb49c 100644
--- a/lisp/obsolete/eieio-compat.el
+++ b/lisp/obsolete/eieio-compat.el
@@ -1,6 +1,6 @@
 ;;; eieio-compat.el --- Compatibility with Older EIEIO versions  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1995-1996, 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: OO, lisp
diff --git a/lisp/obsolete/eudcb-ph.el b/lisp/obsolete/eudcb-ph.el
index 8f3928d5641..356987afebf 100644
--- a/lisp/obsolete/eudcb-ph.el
+++ b/lisp/obsolete/eudcb-ph.el
@@ -1,6 +1,6 @@
 ;;; eudcb-ph.el --- Emacs Unified Directory Client - CCSO PH/QI Backend  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <oscar@cpe.fr>
 ;;         Pavel Janík <Pavel@Janik.cz>
diff --git a/lisp/obsolete/gs.el b/lisp/obsolete/gs.el
index d5a87131298..07623acddc9 100644
--- a/lisp/obsolete/gs.el
+++ b/lisp/obsolete/gs.el
@@ -1,6 +1,6 @@
 ;;; gs.el --- interface to Ghostscript  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
diff --git a/lisp/obsolete/gulp.el b/lisp/obsolete/gulp.el
index b7002cd870e..0263c67df9e 100644
--- a/lisp/obsolete/gulp.el
+++ b/lisp/obsolete/gulp.el
@@ -1,6 +1,6 @@
 ;;; gulp.el --- ask for updates for Lisp packages  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Sam Shteingold <shteingd@math.ucla.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/obsolete/html2text.el b/lisp/obsolete/html2text.el
index 62b26973962..42ec65bc194 100644
--- a/lisp/obsolete/html2text.el
+++ b/lisp/obsolete/html2text.el
@@ -1,6 +1,6 @@
 ;;; html2text.el --- a simple html to plain text converter -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Joakim Hove <hove@phys.ntnu.no>
 ;; Obsolete-since: 26.1
diff --git a/lisp/obsolete/info-edit.el b/lisp/obsolete/info-edit.el
index b9cb83ed971..5b9bb4c253e 100644
--- a/lisp/obsolete/info-edit.el
+++ b/lisp/obsolete/info-edit.el
@@ -1,6 +1,6 @@
 ;;; info-edit.el --- Editing info files  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1992-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: help
diff --git a/lisp/obsolete/inversion.el b/lisp/obsolete/inversion.el
index 33eab910db2..03094825ecd 100644
--- a/lisp/obsolete/inversion.el
+++ b/lisp/obsolete/inversion.el
@@ -1,6 +1,6 @@
 ;;; inversion.el --- When you need something in version XX.XX  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Version: 1.3
diff --git a/lisp/obsolete/iswitchb.el b/lisp/obsolete/iswitchb.el
index 1929d1994e7..6d316fdf1cc 100644
--- a/lisp/obsolete/iswitchb.el
+++ b/lisp/obsolete/iswitchb.el
@@ -1,6 +1,6 @@
 ;;; iswitchb.el --- switch between buffers using substrings  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-1997, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Stephen Eglen <stephen@gnu.org>
 ;; Keywords: completion convenience
diff --git a/lisp/obsolete/landmark.el b/lisp/obsolete/landmark.el
index 29d069f48c0..57ca28e6d1d 100644
--- a/lisp/obsolete/landmark.el
+++ b/lisp/obsolete/landmark.el
@@ -1,6 +1,6 @@
 ;;; landmark.el --- Neural-network robot that learns landmarks  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1996-1997, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Terrence Brannon <metaperl@gmail.com>
 ;; Created: December 16, 1996 - first release to usenet
diff --git a/lisp/obsolete/linum.el b/lisp/obsolete/linum.el
index e94cf5086cc..017afe10c1a 100644
--- a/lisp/obsolete/linum.el
+++ b/lisp/obsolete/linum.el
@@ -1,6 +1,6 @@
 ;;; linum.el --- display line numbers in the left margin -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Markus Triska <markus.triska@gmx.at>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/obsolete/longlines.el b/lisp/obsolete/longlines.el
index 1e2ae698c6f..0f9f73d044b 100644
--- a/lisp/obsolete/longlines.el
+++ b/lisp/obsolete/longlines.el
@@ -1,6 +1,6 @@
 ;;; longlines.el --- automatically wrap long lines   -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2000-2001, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2001, 2004-2023 Free Software Foundation, Inc.
 
 ;; Authors:    Kai Grossjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
 ;;             Alex Schroeder <alex@gnu.org>
diff --git a/lisp/obsolete/makesum.el b/lisp/obsolete/makesum.el
index 3e343c95372..69f1820eaba 100644
--- a/lisp/obsolete/makesum.el
+++ b/lisp/obsolete/makesum.el
@@ -1,6 +1,6 @@
 ;;; makesum.el --- generate key binding summary for Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: help
diff --git a/lisp/obsolete/mantemp.el b/lisp/obsolete/mantemp.el
index f57361f9f87..5349ec32cab 100644
--- a/lisp/obsolete/mantemp.el
+++ b/lisp/obsolete/mantemp.el
@@ -1,6 +1,6 @@
 ;;; mantemp.el --- create manual template instantiations from g++ 2.7.2 output 
 -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Tom Houlder <thoulder@icor.fr>
 ;; Created: 10 Dec 1996
diff --git a/lisp/obsolete/messcompat.el b/lisp/obsolete/messcompat.el
index ca246ba60f2..a7d40e43f50 100644
--- a/lisp/obsolete/messcompat.el
+++ b/lisp/obsolete/messcompat.el
@@ -1,6 +1,6 @@
 ;;; messcompat.el --- making message mode compatible with mail mode  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: mail, news
diff --git a/lisp/obsolete/metamail.el b/lisp/obsolete/metamail.el
index ee53110bcd6..561c0dc4ebd 100644
--- a/lisp/obsolete/metamail.el
+++ b/lisp/obsolete/metamail.el
@@ -1,6 +1,6 @@
 ;;; metamail.el --- Metamail interface for GNU Emacs  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1993, 1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp>
 ;; Keywords: mail, news, mime, multimedia
diff --git a/lisp/obsolete/mh-compat.el b/lisp/obsolete/mh-compat.el
index a5be3bd7426..e45263bfd9f 100644
--- a/lisp/obsolete/mh-compat.el
+++ b/lisp/obsolete/mh-compat.el
@@ -1,6 +1,6 @@
 ;;; mh-compat.el --- make MH-E compatible with various versions of Emacs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
 ;; Keywords: mail
diff --git a/lisp/obsolete/netrc.el b/lisp/obsolete/netrc.el
index 0114dadbabf..07f7fb94833 100644
--- a/lisp/obsolete/netrc.el
+++ b/lisp/obsolete/netrc.el
@@ -1,6 +1,6 @@
 ;;; netrc.el --- .netrc parsing functionality  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/obsolete/nnir.el b/lisp/obsolete/nnir.el
index 4e24cf39a8b..a3c61490154 100644
--- a/lisp/obsolete/nnir.el
+++ b/lisp/obsolete/nnir.el
@@ -1,6 +1,6 @@
 ;;; nnir.el --- Search mail with various search engines  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <grossjohann@ls6.cs.uni-dortmund.de>
 ;; Swish-e and Swish++ backends by:
diff --git a/lisp/obsolete/otodo-mode.el b/lisp/obsolete/otodo-mode.el
index 82017f4dbcf..0077088a20b 100644
--- a/lisp/obsolete/otodo-mode.el
+++ b/lisp/obsolete/otodo-mode.el
@@ -1,6 +1,6 @@
 ;;; otodo-mode.el --- major mode for editing TODO list files  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997, 1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Oliver Seidel <privat@os10000.net>
 ;; Maintainer: Stephen Berman <stephen.berman@gmx.net>
diff --git a/lisp/obsolete/pgg-def.el b/lisp/obsolete/pgg-def.el
index 020fba36f5a..62f5368a730 100644
--- a/lisp/obsolete/pgg-def.el
+++ b/lisp/obsolete/pgg-def.el
@@ -1,6 +1,6 @@
 ;;; pgg-def.el --- functions/macros for defining PGG functions  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999, 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Created: 1999/11/02
diff --git a/lisp/obsolete/pgg-gpg.el b/lisp/obsolete/pgg-gpg.el
index 8d5015e01f6..6af59c8e3e5 100644
--- a/lisp/obsolete/pgg-gpg.el
+++ b/lisp/obsolete/pgg-gpg.el
@@ -1,6 +1,6 @@
 ;;; pgg-gpg.el --- GnuPG support for PGG.  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2000, 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Symmetric encryption and gpg-agent support added by:
diff --git a/lisp/obsolete/pgg-parse.el b/lisp/obsolete/pgg-parse.el
index 5542e995c02..ca713203b47 100644
--- a/lisp/obsolete/pgg-parse.el
+++ b/lisp/obsolete/pgg-parse.el
@@ -1,6 +1,6 @@
 ;;; pgg-parse.el --- OpenPGP packet parsing  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999, 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Created: 1999/10/28
diff --git a/lisp/obsolete/pgg-pgp.el b/lisp/obsolete/pgg-pgp.el
index 5b56e9001fa..e000e7ead59 100644
--- a/lisp/obsolete/pgg-pgp.el
+++ b/lisp/obsolete/pgg-pgp.el
@@ -1,6 +1,6 @@
 ;;; pgg-pgp.el --- PGP 2.* and 6.* support for PGG.  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1999-2000, 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Created: 1999/11/02
diff --git a/lisp/obsolete/pgg-pgp5.el b/lisp/obsolete/pgg-pgp5.el
index f04b5865b85..8871ab3f9e0 100644
--- a/lisp/obsolete/pgg-pgp5.el
+++ b/lisp/obsolete/pgg-pgp5.el
@@ -1,6 +1,6 @@
 ;;; pgg-pgp5.el --- PGP 5.* support for PGG.  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2000, 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Created: 1999/11/02
diff --git a/lisp/obsolete/pgg.el b/lisp/obsolete/pgg.el
index 16ca4e1431b..f2196c1b8eb 100644
--- a/lisp/obsolete/pgg.el
+++ b/lisp/obsolete/pgg.el
@@ -1,6 +1,6 @@
 ;;; pgg.el --- glue for the various PGP implementations.  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1999-2000, 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Symmetric encryption added by: Sascha Wilde <wilde@sha-bang.de>
diff --git a/lisp/obsolete/ps-def.el b/lisp/obsolete/ps-def.el
index 0f7f7609ca1..222f5622b7f 100644
--- a/lisp/obsolete/ps-def.el
+++ b/lisp/obsolete/ps-def.el
@@ -1,6 +1,6 @@
 ;;; ps-def.el --- Emacs definitions for ps-print -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;;     Kenichi Handa <handa@gnu.org> (multi-byte characters)
diff --git a/lisp/obsolete/quickurl.el b/lisp/obsolete/quickurl.el
index 5ac10323d18..65a4c06e163 100644
--- a/lisp/obsolete/quickurl.el
+++ b/lisp/obsolete/quickurl.el
@@ -1,6 +1,6 @@
 ;;; quickurl.el --- insert a URL based on text at point in buffer  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Pearson <davep@davep.org>
 ;; Created: 1999-05-28
diff --git a/lisp/obsolete/rcompile.el b/lisp/obsolete/rcompile.el
index ceffb072cb4..d9f498a313b 100644
--- a/lisp/obsolete/rcompile.el
+++ b/lisp/obsolete/rcompile.el
@@ -1,6 +1,6 @@
 ;;; rcompile.el --- run a compilation on a remote machine  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Alon Albert <alon@milcse.rtsg.mot.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/obsolete/rfc2368.el b/lisp/obsolete/rfc2368.el
index 0a75296e7dd..77a1a6d910f 100644
--- a/lisp/obsolete/rfc2368.el
+++ b/lisp/obsolete/rfc2368.el
@@ -1,6 +1,6 @@
 ;;; rfc2368.el --- support for rfc2368  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Sen Nagata <sen@eccosys.com>
 ;; Keywords: mail
diff --git a/lisp/obsolete/rlogin.el b/lisp/obsolete/rlogin.el
index 6a06300ae35..1afa50cb0ff 100644
--- a/lisp/obsolete/rlogin.el
+++ b/lisp/obsolete/rlogin.el
@@ -1,6 +1,6 @@
 ;;; rlogin.el --- remote login interface  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: Noah Friedman <friedman@splode.com>
 ;; Keywords: unix, comm
@@ -95,7 +95,7 @@ This variable becomes local to a buffer when set in any 
fashion for it.
 It is better to use the function of the same name to change the behavior of
 directory tracking in an rlogin session once it has begun, rather than
 simply setting this variable, since the function does the necessary
-re-synching of directories."
+re-syncing of directories."
   :type '(choice (const :tag "off" nil)
                 (const :tag "ftp" t)
                 (other :tag "local" local))
diff --git a/lisp/obsolete/sb-image.el b/lisp/obsolete/sb-image.el
index c6f2cfb588b..28926ac5d61 100644
--- a/lisp/obsolete/sb-image.el
+++ b/lisp/obsolete/sb-image.el
@@ -1,6 +1,6 @@
 ;;; sb-image.el --- Image management for speedbar  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2003, 2005-2019, 2021-2022 Free Software
+;; Copyright (C) 1999-2003, 2005-2019, 2021-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/obsolete/starttls.el b/lisp/obsolete/starttls.el
index 2f1f0e9773c..bbf70df82a4 100644
--- a/lisp/obsolete/starttls.el
+++ b/lisp/obsolete/starttls.el
@@ -1,6 +1,6 @@
 ;;; starttls.el --- STARTTLS functions  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Author: Simon Josefsson <simon@josefsson.org>
diff --git a/lisp/obsolete/sup-mouse.el b/lisp/obsolete/sup-mouse.el
index 44854dd9766..96a9d28f379 100644
--- a/lisp/obsolete/sup-mouse.el
+++ b/lisp/obsolete/sup-mouse.el
@@ -1,6 +1,6 @@
 ;;; sup-mouse.el --- supdup mouse support for lisp machines  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1985-1986, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Wolfgang Rupprecht
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/obsolete/terminal.el b/lisp/obsolete/terminal.el
index d8d0da4efbd..4a2ef680b09 100644
--- a/lisp/obsolete/terminal.el
+++ b/lisp/obsolete/terminal.el
@@ -1,6 +1,6 @@
 ;;; terminal.el --- terminal emulator for GNU Emacs  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1986-1989, 1993-1994, 2001-2022 Free Software
+;; Copyright (C) 1986-1989, 1993-1994, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Richard Mlynarik <mly@eddie.mit.edu>
diff --git a/lisp/obsolete/thumbs.el b/lisp/obsolete/thumbs.el
index a98b339b470..ddf734f22ea 100644
--- a/lisp/obsolete/thumbs.el
+++ b/lisp/obsolete/thumbs.el
@@ -1,6 +1,6 @@
 ;;; thumbs.el --- Thumbnails previewer for images files  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Jean-Philippe Theberge <jphiltheberge@videotron.ca>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/obsolete/tls.el b/lisp/obsolete/tls.el
index f2515baef83..9089684cd52 100644
--- a/lisp/obsolete/tls.el
+++ b/lisp/obsolete/tls.el
@@ -1,6 +1,6 @@
 ;;; tls.el --- TLS/SSL support via wrapper around GnuTLS  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1996-1999, 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;; Keywords: comm, tls, gnutls, ssl
diff --git a/lisp/obsolete/tpu-edt.el b/lisp/obsolete/tpu-edt.el
index 8c4ec8f7e09..4c8beb7dcff 100644
--- a/lisp/obsolete/tpu-edt.el
+++ b/lisp/obsolete/tpu-edt.el
@@ -1,6 +1,6 @@
 ;;; tpu-edt.el --- Emacs emulating TPU emulating EDT  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1993-1995, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Rob Riepel <riepel@networking.stanford.edu>
 ;; Version: 4.5
diff --git a/lisp/obsolete/tpu-extras.el b/lisp/obsolete/tpu-extras.el
index d631c47705d..f3b91ba878a 100644
--- a/lisp/obsolete/tpu-extras.el
+++ b/lisp/obsolete/tpu-extras.el
@@ -1,6 +1,6 @@
 ;;; tpu-extras.el --- scroll margins and free cursor mode for TPU-edt  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1993-1995, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Rob Riepel <riepel@networking.stanford.edu>
 ;; Keywords: emulations
diff --git a/lisp/obsolete/tpu-mapper.el b/lisp/obsolete/tpu-mapper.el
index 17aa73697bc..2c9836cc2ee 100644
--- a/lisp/obsolete/tpu-mapper.el
+++ b/lisp/obsolete/tpu-mapper.el
@@ -1,6 +1,6 @@
 ;;; tpu-mapper.el --- create a TPU-edt X-windows keymap file  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1993-1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Rob Riepel <riepel@networking.stanford.edu>
 ;; Keywords: emulations
diff --git a/lisp/obsolete/uce.el b/lisp/obsolete/uce.el
index 2cbbf5dc65d..58036cc6e01 100644
--- a/lisp/obsolete/uce.el
+++ b/lisp/obsolete/uce.el
@@ -1,6 +1,6 @@
 ;;; uce.el --- facilitate reply to unsolicited commercial email  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996, 1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: stanislav shalunov <shalunov@mccme.ru>
 ;; Created: 10 Dec 1996
diff --git a/lisp/obsolete/url-about.el b/lisp/obsolete/url-about.el
index b9f8732b28c..fe1c51cc10c 100644
--- a/lisp/obsolete/url-about.el
+++ b/lisp/obsolete/url-about.el
@@ -1,6 +1,6 @@
 ;;; url-about.el --- Show internal URLs  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 ;; Obsolete-since: 29.1
diff --git a/lisp/obsolete/url-dired.el b/lisp/obsolete/url-dired.el
index 40057fb1747..98af8e236e4 100644
--- a/lisp/obsolete/url-dired.el
+++ b/lisp/obsolete/url-dired.el
@@ -1,6 +1,6 @@
 ;;; url-dired.el --- URL Dired minor mode  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, files
 ;; Obsolete-since: 29.1
diff --git a/lisp/obsolete/url-ns.el b/lisp/obsolete/url-ns.el
index 0dee2864fc5..20318867634 100644
--- a/lisp/obsolete/url-ns.el
+++ b/lisp/obsolete/url-ns.el
@@ -1,6 +1,6 @@
 ;;; url-ns.el --- Various netscape-ish functions for proxy definitions  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 ;; Obsolete-since: 27.1
diff --git a/lisp/obsolete/vc-arch.el b/lisp/obsolete/vc-arch.el
index 20835a09d00..0b74d48d27d 100644
--- a/lisp/obsolete/vc-arch.el
+++ b/lisp/obsolete/vc-arch.el
@@ -1,6 +1,6 @@
 ;;; vc-arch.el --- VC backend for the Arch version-control system  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author:      FSF (see vc.el for full credits)
 ;; Maintainer:  Stefan Monnier <monnier@gnu.org>
diff --git a/lisp/obsolete/vc-mtn.el b/lisp/obsolete/vc-mtn.el
index 4fc496d5095..e1c96b5511b 100644
--- a/lisp/obsolete/vc-mtn.el
+++ b/lisp/obsolete/vc-mtn.el
@@ -1,6 +1,6 @@
 ;;; vc-mtn.el --- VC backend for Monotone  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: vc
diff --git a/lisp/obsolete/vip.el b/lisp/obsolete/vip.el
index d7518b10016..5b19f916c57 100644
--- a/lisp/obsolete/vip.el
+++ b/lisp/obsolete/vip.el
@@ -1,6 +1,6 @@
 ;;; vip.el --- a VI Package for GNU Emacs  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1986-1988, 1992-1993, 1998, 2001-2022 Free Software
+;; Copyright (C) 1986-1988, 1992-1993, 1998, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Masahiko Sato <ms@sail.stanford.edu>
diff --git a/lisp/obsolete/vt-control.el b/lisp/obsolete/vt-control.el
index 190ccbaa83c..179c03596b2 100644
--- a/lisp/obsolete/vt-control.el
+++ b/lisp/obsolete/vt-control.el
@@ -1,6 +1,6 @@
 ;;; vt-control.el --- Common VTxxx control functions  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Rob Riepel <riepel@networking.stanford.edu>
 ;; Keywords: terminals
diff --git a/lisp/obsolete/vt100-led.el b/lisp/obsolete/vt100-led.el
index d741a112aa7..cfdd07b513f 100644
--- a/lisp/obsolete/vt100-led.el
+++ b/lisp/obsolete/vt100-led.el
@@ -1,6 +1,6 @@
 ;;; vt100-led.el --- functions for LED control on VT-100 terminals & clones  
-*- lexical-binding:t -*-
 
-;; Copyright (C) 1988, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Howard Gayle
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/obsolete/ws-mode.el b/lisp/obsolete/ws-mode.el
index c1e7392d244..d41fd8ffc36 100644
--- a/lisp/obsolete/ws-mode.el
+++ b/lisp/obsolete/ws-mode.el
@@ -1,6 +1,6 @@
 ;;; ws-mode.el --- WordStar emulation mode for GNU Emacs -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 1991, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Juergen Nickelsen <nickel@cs.tu-berlin.de>
 ;; Version: 0.7
diff --git a/lisp/obsolete/yow.el b/lisp/obsolete/yow.el
index 88191b35a09..59ae9a6263b 100644
--- a/lisp/obsolete/yow.el
+++ b/lisp/obsolete/yow.el
@@ -1,6 +1,6 @@
 ;;; yow.el --- quote random zippyisms  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1993-1995, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Richard Mlynarik
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/org/ChangeLog.1 b/lisp/org/ChangeLog.1
index 4f51c6a1ebb..eb126df6334 100644
--- a/lisp/org/ChangeLog.1
+++ b/lisp/org/ChangeLog.1
@@ -10418,7 +10418,7 @@
        * org.el (org-adaptive-fill-function): Remove occasional spurious
        space character when auto-filling.
 
-       * org.el (org-mode): Call external initalizers.  Now both filling
+       * org.el (org-mode): Call external initializers.  Now both filling
        code and comments code have their own independent part in org.el.
        (org-setup-filling): Rename from `org-set-autofill-regexps'.
        (org-setup-comments-handling): New function.
@@ -15589,7 +15589,7 @@
 
        * ob-python.el (org-babel-python-evaluate-session): Introduced a
        new local function for sending input with a slight delay to allow
-       pythong to re-draw the prompt.  No longer removing newlines inside
+       python to re-draw the prompt.  No longer removing newlines inside
        code block bodies (was due to a defective regexp).
 
 2011-07-28  Bastien Guerry  <bzg@gnu.org>
@@ -17320,7 +17320,7 @@
 
        * ob-lisp.el (org-babel-execute:lisp): Turn vectors into lists
        before reading by elisp.
-       (org-bable-lisp-vector-to-list): Stub of a vector->list function,
+       (org-babel-lisp-vector-to-list): Stub of a vector->list function,
        should be replaced with a cl-vector->el-vector function.
 
 2011-07-28  Eric Schulte  <schulte.eric@gmail.com>
@@ -29935,7 +29935,7 @@
        inserted at the correct position.
 
        * org-publish.el (org-publish-project-alist)
-       (org-publish-projects, org-publish-org-index): Change default anme
+       (org-publish-projects, org-publish-org-index): Change default name
        for the index of file names to "sitemap.org".
 
        * org-latex.el (org-export-latex-tables):
@@ -32833,7 +32833,7 @@
 ;; add-log-time-zone-rule: t
 ;; End:
 
-       Copyright (C) 2008-2022 Free Software Foundation, Inc.
+       Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/org/ob-C.el b/lisp/org/ob-C.el
index 74309a0e979..3a6e99623f5 100644
--- a/lisp/org/ob-C.el
+++ b/lisp/org/ob-C.el
@@ -1,6 +1,6 @@
 ;;; ob-C.el --- Babel Functions for C and Similar Languages -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;;      Thierry Banel
diff --git a/lisp/org/ob-R.el b/lisp/org/ob-R.el
index b7f96a179a8..4ee091118e4 100644
--- a/lisp/org/ob-R.el
+++ b/lisp/org/ob-R.el
@@ -1,6 +1,6 @@
 ;;; ob-R.el --- Babel Functions for R                -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;;     Dan Davison
diff --git a/lisp/org/ob-awk.el b/lisp/org/ob-awk.el
index 1db9c6b00c5..e5e42a91d14 100644
--- a/lisp/org/ob-awk.el
+++ b/lisp/org/ob-awk.el
@@ -1,6 +1,6 @@
 ;;; ob-awk.el --- Babel Functions for Awk            -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Maintainer: Tyler Smith <tyler@plantarum.ca>
diff --git a/lisp/org/ob-calc.el b/lisp/org/ob-calc.el
index 2d52da34417..5572ce818bd 100644
--- a/lisp/org/ob-calc.el
+++ b/lisp/org/ob-calc.el
@@ -1,6 +1,6 @@
 ;;; ob-calc.el --- Babel Functions for Calc          -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Maintainer: Tom Gillespie <tgbugs@gmail.com>
diff --git a/lisp/org/ob-clojure.el b/lisp/org/ob-clojure.el
index b045b4e6e54..d993e0cb79e 100644
--- a/lisp/org/ob-clojure.el
+++ b/lisp/org/ob-clojure.el
@@ -1,6 +1,6 @@
 ;;; ob-clojure.el --- Babel Functions for Clojure    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Joel Boehland, Eric Schulte, Oleh Krehel, Frederick Giasson
 ;; Maintainer: Daniel Kraus <daniel@kraus.my>
diff --git a/lisp/org/ob-comint.el b/lisp/org/ob-comint.el
index 064ba94464f..54bf5127e16 100644
--- a/lisp/org/ob-comint.el
+++ b/lisp/org/ob-comint.el
@@ -1,6 +1,6 @@
 ;;; ob-comint.el --- Babel Functions for Interaction with Comint Buffers -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research, comint
diff --git a/lisp/org/ob-core.el b/lisp/org/ob-core.el
index f69538f78c9..9bb77f7920b 100644
--- a/lisp/org/ob-core.el
+++ b/lisp/org/ob-core.el
@@ -1,6 +1,6 @@
 ;;; ob-core.el --- Working with Code Blocks          -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;     Dan Davison
@@ -2461,10 +2461,19 @@ INFO may provide the values of these header arguments 
(in the
                    (insert
                     (org-trim
                      (org-list-to-org
+                       ;; We arbitrarily choose to format non-strings
+                       ;; as %S.
                       (cons 'unordered
                             (mapcar
                              (lambda (e)
-                               (list (if (stringp e) e (format "%S" e))))
+                                (cond
+                                 ((stringp e) (list e))
+                                 ((listp e)
+                                  (mapcar
+                                   (lambda (x)
+                                     (if (stringp x) x (format "%S" x)))
+                                   e))
+                                 (t (list (format "%S" e)))))
                              (if (listp result) result
                                (split-string result "\n" t))))
                       '(:splicep nil :istart "- " :iend "\n")))
@@ -3183,8 +3192,8 @@ situations in which is it not appropriate."
          (if (and (memq (string-to-char cell) '(?\( ?`))
                   (not (org-babel-confirm-evaluate
                       ;; See `org-babel-get-src-block-info'.
-                      (list "emacs-lisp" (format "%S" cell)
-                            '((:eval . yes)) nil (format "%S" cell)
+                      (list "emacs-lisp" cell
+                            '((:eval . yes)) nil (format "%s" cell)
                             nil nil))))
              ;; Not allowed.
              (user-error "Evaluation of elisp code %S aborted." cell)
diff --git a/lisp/org/ob-css.el b/lisp/org/ob-css.el
index c132cb2c77b..f93c576fc5c 100644
--- a/lisp/org/ob-css.el
+++ b/lisp/org/ob-css.el
@@ -1,6 +1,6 @@
 ;;; ob-css.el --- Babel Functions for CSS            -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-ditaa.el b/lisp/org/ob-ditaa.el
index 1f82aea6be4..62200082851 100644
--- a/lisp/org/ob-ditaa.el
+++ b/lisp/org/ob-ditaa.el
@@ -1,6 +1,6 @@
 ;;; ob-ditaa.el --- Babel Functions for ditaa        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-dot.el b/lisp/org/ob-dot.el
index 2d2003bf539..ecef071a780 100644
--- a/lisp/org/ob-dot.el
+++ b/lisp/org/ob-dot.el
@@ -1,6 +1,6 @@
 ;;; ob-dot.el --- Babel Functions for dot            -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Maintainer: Justin Abrahms <justin@abrah.ms>
diff --git a/lisp/org/ob-emacs-lisp.el b/lisp/org/ob-emacs-lisp.el
index b8e6ef29854..f2111d6493c 100644
--- a/lisp/org/ob-emacs-lisp.el
+++ b/lisp/org/ob-emacs-lisp.el
@@ -1,6 +1,6 @@
 ;;; ob-emacs-lisp.el --- Babel Functions for Emacs-lisp Code -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-eshell.el b/lisp/org/ob-eshell.el
index 937db69dc5a..95f5777ae7d 100644
--- a/lisp/org/ob-eshell.el
+++ b/lisp/org/ob-eshell.el
@@ -1,6 +1,6 @@
 ;;; ob-eshell.el --- Babel Functions for Eshell      -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: stardiviner <numbchild@gmail.com>
 ;; Maintainer: stardiviner <numbchild@gmail.com>
diff --git a/lisp/org/ob-eval.el b/lisp/org/ob-eval.el
index f57566079d7..6f6edb949cc 100644
--- a/lisp/org/ob-eval.el
+++ b/lisp/org/ob-eval.el
@@ -1,6 +1,6 @@
 ;;; ob-eval.el --- Babel Functions for External Code Evaluation -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research, comint
diff --git a/lisp/org/ob-exp.el b/lisp/org/ob-exp.el
index 60f2a931588..4d1b084be01 100644
--- a/lisp/org/ob-exp.el
+++ b/lisp/org/ob-exp.el
@@ -1,6 +1,6 @@
 ;;; ob-exp.el --- Exportation of Babel Source Blocks -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;     Dan Davison
diff --git a/lisp/org/ob-forth.el b/lisp/org/ob-forth.el
index a67d3384f60..e5dcad6d038 100644
--- a/lisp/org/ob-forth.el
+++ b/lisp/org/ob-forth.el
@@ -1,6 +1,6 @@
 ;;; ob-forth.el --- Babel Functions for Forth        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research, forth
diff --git a/lisp/org/ob-fortran.el b/lisp/org/ob-fortran.el
index ad84314fcfb..2c050cb18a8 100644
--- a/lisp/org/ob-fortran.el
+++ b/lisp/org/ob-fortran.el
@@ -1,6 +1,6 @@
 ;;; ob-fortran.el --- Babel Functions for Fortran    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Authors: Sergey Litvinov
 ;;       Eric Schulte
diff --git a/lisp/org/ob-gnuplot.el b/lisp/org/ob-gnuplot.el
index 59913e70fc6..e3e42918c75 100644
--- a/lisp/org/ob-gnuplot.el
+++ b/lisp/org/ob-gnuplot.el
@@ -1,6 +1,6 @@
 ;;; ob-gnuplot.el --- Babel Functions for Gnuplot    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Maintainer: Ihor Radchenko <yantar92@gmail.com>
diff --git a/lisp/org/ob-groovy.el b/lisp/org/ob-groovy.el
index f1689ef12d6..c0da69fcbf1 100644
--- a/lisp/org/ob-groovy.el
+++ b/lisp/org/ob-groovy.el
@@ -1,6 +1,6 @@
 ;;; ob-groovy.el --- Babel Functions for Groovy      -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Miro Bezjak <bezjak.miro@gmail.com>
 ;; Maintainer: Palak Mathur <palakmathur@gmail.com>
diff --git a/lisp/org/ob-haskell.el b/lisp/org/ob-haskell.el
index 095286c79aa..7185ed61ffe 100644
--- a/lisp/org/ob-haskell.el
+++ b/lisp/org/ob-haskell.el
@@ -1,6 +1,6 @@
 ;;; ob-haskell.el --- Babel Functions for Haskell    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Maintainer: Lawrence Bottorff <borgauf@gmail.com>
diff --git a/lisp/org/ob-java.el b/lisp/org/ob-java.el
index 59bd487880d..89386052666 100644
--- a/lisp/org/ob-java.el
+++ b/lisp/org/ob-java.el
@@ -1,6 +1,6 @@
 ;;; ob-java.el --- org-babel functions for java evaluation -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;          Dan Davison
diff --git a/lisp/org/ob-js.el b/lisp/org/ob-js.el
index 04eb77bd4ae..910c1168667 100644
--- a/lisp/org/ob-js.el
+++ b/lisp/org/ob-js.el
@@ -1,6 +1,6 @@
 ;;; ob-js.el --- Babel Functions for Javascript      -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research, js
diff --git a/lisp/org/ob-julia.el b/lisp/org/ob-julia.el
index 314d24596f4..cb5c7fa3b02 100644
--- a/lisp/org/ob-julia.el
+++ b/lisp/org/ob-julia.el
@@ -1,6 +1,6 @@
 ;;; ob-julia.el --- org-babel functions for julia code evaluation  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 ;; Authors: G. Jay Kerns
 ;; Maintainer: Pedro Bruel <pedro.bruel@gmail.com>
 ;; Keywords: literate programming, reproducible research, scientific computing
diff --git a/lisp/org/ob-latex.el b/lisp/org/ob-latex.el
index 332ace765bb..428907a270d 100644
--- a/lisp/org/ob-latex.el
+++ b/lisp/org/ob-latex.el
@@ -1,6 +1,6 @@
 ;;; ob-latex.el --- Babel Functions for LaTeX        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-lilypond.el b/lisp/org/ob-lilypond.el
index d8016641ceb..9693b89e23b 100644
--- a/lisp/org/ob-lilypond.el
+++ b/lisp/org/ob-lilypond.el
@@ -1,6 +1,6 @@
 ;;; ob-lilypond.el --- Babel Functions for Lilypond  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Martyn Jago
 ;; Keywords: babel language, literate programming
diff --git a/lisp/org/ob-lisp.el b/lisp/org/ob-lisp.el
index d3ed569ecde..048ef883ca1 100644
--- a/lisp/org/ob-lisp.el
+++ b/lisp/org/ob-lisp.el
@@ -1,6 +1,6 @@
 ;;; ob-lisp.el --- Babel Functions for Common Lisp   -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Authors: Joel Boehland
 ;;      Eric Schulte
diff --git a/lisp/org/ob-lob.el b/lisp/org/ob-lob.el
index fb279975555..f77bda73dd6 100644
--- a/lisp/org/ob-lob.el
+++ b/lisp/org/ob-lob.el
@@ -1,6 +1,6 @@
 ;;; ob-lob.el --- Functions Supporting the Library of Babel -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;      Dan Davison
diff --git a/lisp/org/ob-lua.el b/lisp/org/ob-lua.el
index 52aa0599aed..81521d9e0a5 100644
--- a/lisp/org/ob-lua.el
+++ b/lisp/org/ob-lua.el
@@ -1,6 +1,6 @@
 ;;; ob-lua.el --- Org Babel functions for Lua evaluation -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2014, 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014, 2016-2023 Free Software Foundation, Inc.
 
 ;; Authors: Dieter Schoen
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-makefile.el b/lisp/org/ob-makefile.el
index 194fcdb01ba..25306159bbb 100644
--- a/lisp/org/ob-makefile.el
+++ b/lisp/org/ob-makefile.el
@@ -1,6 +1,6 @@
 ;;; ob-makefile.el --- Babel Functions for Makefile  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;;        Thomas S. Dye
diff --git a/lisp/org/ob-matlab.el b/lisp/org/ob-matlab.el
index 8e4d02b2a83..43344495df2 100644
--- a/lisp/org/ob-matlab.el
+++ b/lisp/org/ob-matlab.el
@@ -1,6 +1,6 @@
 ;;; ob-matlab.el --- Babel support for Matlab        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Dan Davison
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-maxima.el b/lisp/org/ob-maxima.el
index e3dfbb6684e..d1d7c742440 100644
--- a/lisp/org/ob-maxima.el
+++ b/lisp/org/ob-maxima.el
@@ -1,6 +1,6 @@
 ;;; ob-maxima.el --- Babel Functions for Maxima      -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric S Fraga
 ;;     Eric Schulte
diff --git a/lisp/org/ob-ocaml.el b/lisp/org/ob-ocaml.el
index 804551ba57e..09224b98ba7 100644
--- a/lisp/org/ob-ocaml.el
+++ b/lisp/org/ob-ocaml.el
@@ -1,6 +1,6 @@
 ;;; ob-ocaml.el --- Babel Functions for Ocaml        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-octave.el b/lisp/org/ob-octave.el
index 8953b675132..9bf16b9849c 100644
--- a/lisp/org/ob-octave.el
+++ b/lisp/org/ob-octave.el
@@ -1,6 +1,6 @@
 ;;; ob-octave.el --- Babel Functions for Octave and Matlab -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Dan Davison
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-org.el b/lisp/org/ob-org.el
index df7f85d0803..1bf02b461cd 100644
--- a/lisp/org/ob-org.el
+++ b/lisp/org/ob-org.el
@@ -1,6 +1,6 @@
 ;;; ob-org.el --- Babel Functions for Org Code Blocks -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-perl.el b/lisp/org/ob-perl.el
index 5762642b78c..c8cff5da559 100644
--- a/lisp/org/ob-perl.el
+++ b/lisp/org/ob-perl.el
@@ -1,6 +1,6 @@
 ;;; ob-perl.el --- Babel Functions for Perl          -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Authors: Dan Davison
 ;;      Eric Schulte
diff --git a/lisp/org/ob-plantuml.el b/lisp/org/ob-plantuml.el
index e95db50cd59..3202c6e415d 100644
--- a/lisp/org/ob-plantuml.el
+++ b/lisp/org/ob-plantuml.el
@@ -1,6 +1,6 @@
 ;;; ob-plantuml.el --- Babel Functions for Plantuml  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Zhang Weize
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-processing.el b/lisp/org/ob-processing.el
index 644006b9ce2..4eeaf98e0a2 100644
--- a/lisp/org/ob-processing.el
+++ b/lisp/org/ob-processing.el
@@ -1,6 +1,6 @@
 ;;; ob-processing.el --- Babel functions for processing -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Jarmo Hurri (adapted from ob-asymptote.el written by Eric Schulte)
 ;; Maintainer: Jarmo Hurri <jarmo.hurri@iki.fi>
diff --git a/lisp/org/ob-python.el b/lisp/org/ob-python.el
index 1829ab149a2..c19af0ab331 100644
--- a/lisp/org/ob-python.el
+++ b/lisp/org/ob-python.el
@@ -1,6 +1,6 @@
 ;;; ob-python.el --- Babel Functions for Python      -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;      Dan Davison
diff --git a/lisp/org/ob-ref.el b/lisp/org/ob-ref.el
index 2bba2071ee3..2eae3690d93 100644
--- a/lisp/org/ob-ref.el
+++ b/lisp/org/ob-ref.el
@@ -1,6 +1,6 @@
 ;;; ob-ref.el --- Babel Functions for Referencing External Data -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;      Dan Davison
diff --git a/lisp/org/ob-ruby.el b/lisp/org/ob-ruby.el
index 6ece63b4dca..03c94b1ba99 100644
--- a/lisp/org/ob-ruby.el
+++ b/lisp/org/ob-ruby.el
@@ -1,6 +1,6 @@
 ;;; ob-ruby.el --- Babel Functions for Ruby          -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-sass.el b/lisp/org/ob-sass.el
index 400f9b326e0..1498b931efd 100644
--- a/lisp/org/ob-sass.el
+++ b/lisp/org/ob-sass.el
@@ -1,6 +1,6 @@
 ;;; ob-sass.el --- Babel Functions for the Sass CSS generation language -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-scheme.el b/lisp/org/ob-scheme.el
index cfeb1a0adcb..ef41a2ec4a5 100644
--- a/lisp/org/ob-scheme.el
+++ b/lisp/org/ob-scheme.el
@@ -1,6 +1,6 @@
 ;;; ob-scheme.el --- Babel Functions for Scheme      -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;         Michael Gauland
diff --git a/lisp/org/ob-screen.el b/lisp/org/ob-screen.el
index 294a40cbfeb..269538e7967 100644
--- a/lisp/org/ob-screen.el
+++ b/lisp/org/ob-screen.el
@@ -1,6 +1,6 @@
 ;;; ob-screen.el --- Babel Support for Interactive Terminal -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Benjamin Andresen
 ;; Maintainer: Ken Mankoff <mankoff@gmail.com>
diff --git a/lisp/org/ob-sed.el b/lisp/org/ob-sed.el
index f9ea2ac0cb6..6469901fd07 100644
--- a/lisp/org/ob-sed.el
+++ b/lisp/org/ob-sed.el
@@ -1,6 +1,6 @@
 ;;; ob-sed.el --- Babel Functions for Sed Scripts    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Bjarte Johansen
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-shell.el b/lisp/org/ob-shell.el
index d38d2d33530..4a60186cd5d 100644
--- a/lisp/org/ob-shell.el
+++ b/lisp/org/ob-shell.el
@@ -1,6 +1,6 @@
 ;;; ob-shell.el --- Babel Functions for Shell Evaluation -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-sql.el b/lisp/org/ob-sql.el
index 9f4fa1d7863..39a4573a54e 100644
--- a/lisp/org/ob-sql.el
+++ b/lisp/org/ob-sql.el
@@ -1,6 +1,6 @@
 ;;; ob-sql.el --- Babel Functions for SQL            -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Maintainer: Daniel Kraus <daniel@kraus.my>
diff --git a/lisp/org/ob-sqlite.el b/lisp/org/ob-sqlite.el
index f22f9883f1f..526b73ebd9b 100644
--- a/lisp/org/ob-sqlite.el
+++ b/lisp/org/ob-sqlite.el
@@ -1,6 +1,6 @@
 ;;; ob-sqlite.el --- Babel Functions for SQLite Databases -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Maintainer: Nick Savage <nick@nicksavage.ca>
diff --git a/lisp/org/ob-table.el b/lisp/org/ob-table.el
index e14117cd3bb..5c91f33f877 100644
--- a/lisp/org/ob-table.el
+++ b/lisp/org/ob-table.el
@@ -1,6 +1,6 @@
 ;;; ob-table.el --- Support for Calling Babel Functions from Tables -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-tangle.el b/lisp/org/ob-tangle.el
index bd17bda32ba..27443fc2e81 100644
--- a/lisp/org/ob-tangle.el
+++ b/lisp/org/ob-tangle.el
@@ -1,6 +1,6 @@
 ;;; ob-tangle.el --- Extract Source Code From Org Files -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
@@ -500,7 +500,8 @@ The PARAMS are the 3rd element of the info for the same src 
block."
                  (cl-letf (((symbol-function 'org-store-link-functions)
                             (lambda () nil)))
                    (org-store-link nil))))
-             (bare (and (string-match org-link-bracket-re l)
+             (bare (and l
+                        (string-match org-link-bracket-re l)
                         (match-string 1 l))))
         (when bare
           (if (and org-babel-tangle-use-relative-file-links
diff --git a/lisp/org/ob.el b/lisp/org/ob.el
index 83fc5b23e12..4444ced5864 100644
--- a/lisp/org/ob.el
+++ b/lisp/org/ob.el
@@ -1,6 +1,6 @@
 ;;; ob.el --- Working with Code Blocks in Org        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/oc-basic.el b/lisp/org/oc-basic.el
index 3ef7a37e3b3..1c8c37aa941 100644
--- a/lisp/org/oc-basic.el
+++ b/lisp/org/oc-basic.el
@@ -1,6 +1,6 @@
 ;;; oc-basic.el --- basic back-end for citations  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 
@@ -162,17 +162,17 @@ Return a hash table with citation references as keys and 
fields alist as values.
         (puthash (cdr (assq 'id item))
                  (mapcar (pcase-lambda (`(,field . ,value))
                            (pcase field
-                             ('author
-                              ;; Author is an array of objects, each
-                              ;; of them designing a person.  These
-                              ;; objects may contain multiple
-                              ;; properties, but for this basic
-                              ;; processor, we'll focus on `given' and
-                              ;; `family'.
+                             ((or 'author 'editors)
+                              ;; Author and editors are arrays of
+                              ;; objects, each of them designing a
+                              ;; person.  These objects may contain
+                              ;; multiple properties, but for this
+                              ;; basic processor, we'll focus on
+                              ;; `given' and `family'.
                               ;;
                               ;; For compatibility with BibTeX, add
-                              ;; "and" between authors.
-                              (cons 'author
+                              ;; "and" between authors and editors.
+                              (cons field
                                     (mapconcat
                                      (lambda (alist)
                                        (concat (alist-get 'family alist)
diff --git a/lisp/org/oc-biblatex.el b/lisp/org/oc-biblatex.el
index e8f677b7a05..b2d31f0f635 100644
--- a/lisp/org/oc-biblatex.el
+++ b/lisp/org/oc-biblatex.el
@@ -1,6 +1,6 @@
 ;;; oc-biblatex.el --- biblatex citation processor for Org  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 
diff --git a/lisp/org/oc-bibtex.el b/lisp/org/oc-bibtex.el
index 4d2297a8290..d5e5490ede2 100644
--- a/lisp/org/oc-bibtex.el
+++ b/lisp/org/oc-bibtex.el
@@ -1,6 +1,6 @@
 ;;; oc-bibtex.el --- Vanilla citation processor for LaTeX -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 
diff --git a/lisp/org/oc-csl.el b/lisp/org/oc-csl.el
index 1ccb74e925f..2b00cb59904 100644
--- a/lisp/org/oc-csl.el
+++ b/lisp/org/oc-csl.el
@@ -1,6 +1,6 @@
 ;;; oc-csl.el --- csl citation processor for Org -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;; Maintainer: András Simonyi <andras.simonyi@gmail.com>
diff --git a/lisp/org/oc-natbib.el b/lisp/org/oc-natbib.el
index 00c069e157e..855be2a5c12 100644
--- a/lisp/org/oc-natbib.el
+++ b/lisp/org/oc-natbib.el
@@ -1,6 +1,6 @@
 ;;; oc-natbib.el --- Citation processor using natbib LaTeX package  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 
diff --git a/lisp/org/oc.el b/lisp/org/oc.el
index 43eb86224f9..260a4d3e1a7 100644
--- a/lisp/org/oc.el
+++ b/lisp/org/oc.el
@@ -1,6 +1,6 @@
 ;;; oc.el --- Org Cite library                  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 
diff --git a/lisp/org/ol-bbdb.el b/lisp/org/ol-bbdb.el
index ec1d755e826..47bd9d98cb5 100644
--- a/lisp/org/ol-bbdb.el
+++ b/lisp/org/ol-bbdb.el
@@ -1,6 +1,6 @@
 ;;; ol-bbdb.el --- Links to BBDB entries             -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Authors: Carsten Dominik <carsten.dominik@gmail.com>
 ;;       Thomas Baumann <thomas dot baumann at ch dot tum dot de>
diff --git a/lisp/org/ol-bibtex.el b/lisp/org/ol-bibtex.el
index 313b1cde88c..7d6ed85345f 100644
--- a/lisp/org/ol-bibtex.el
+++ b/lisp/org/ol-bibtex.el
@@ -1,6 +1,6 @@
 ;;; ol-bibtex.el --- Links to BibTeX entries        -*- lexical-binding: t; -*-
 ;;
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 ;;
 ;; Authors: Bastien Guerry <bzg@gnu.org>
 ;;       Carsten Dominik <carsten dot dominik at gmail dot com>
diff --git a/lisp/org/ol-docview.el b/lisp/org/ol-docview.el
index 7dbeb0ada5c..a9cd9b9950f 100644
--- a/lisp/org/ol-docview.el
+++ b/lisp/org/ol-docview.el
@@ -1,6 +1,6 @@
 ;;; ol-docview.el --- Links to Docview mode buffers  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Jan Böcker <jan.boecker at jboecker dot de>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/ol-doi.el b/lisp/org/ol-doi.el
index 93be1d90abc..971b0508787 100644
--- a/lisp/org/ol-doi.el
+++ b/lisp/org/ol-doi.el
@@ -1,6 +1,6 @@
 ;;; ol-doi.el --- DOI links support in Org           -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 
diff --git a/lisp/org/ol-eshell.el b/lisp/org/ol-eshell.el
index 3be63601ddd..b7d3baf3895 100644
--- a/lisp/org/ol-eshell.el
+++ b/lisp/org/ol-eshell.el
@@ -1,6 +1,6 @@
 ;;; ol-eshell.el --- Links to Working Directories in Eshell  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Konrad Hinsen <konrad.hinsen AT fastmail.net>
 
diff --git a/lisp/org/ol-eww.el b/lisp/org/ol-eww.el
index c3992fa0767..ee970b6aaa1 100644
--- a/lisp/org/ol-eww.el
+++ b/lisp/org/ol-eww.el
@@ -1,6 +1,6 @@
 ;;; ol-eww.el --- Store URL and kill from Eww mode    -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Marco Wahl <marcowahlsoft>a<gmailcom>
 ;; Keywords: link, eww
diff --git a/lisp/org/ol-gnus.el b/lisp/org/ol-gnus.el
index 185218ab772..7c07ce0454d 100644
--- a/lisp/org/ol-gnus.el
+++ b/lisp/org/ol-gnus.el
@@ -1,6 +1,6 @@
 ;;; ol-gnus.el --- Links to Gnus Groups and Messages -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;;         Tassilo Horn <tassilo at member dot fsf dot org>
diff --git a/lisp/org/ol-info.el b/lisp/org/ol-info.el
index d332b2837bd..ad9e4a12bd7 100644
--- a/lisp/org/ol-info.el
+++ b/lisp/org/ol-info.el
@@ -1,6 +1,6 @@
 ;;; ol-info.el --- Links to Info Nodes               -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/ol-irc.el b/lisp/org/ol-irc.el
index 25d11ca13e4..3760644e858 100644
--- a/lisp/org/ol-irc.el
+++ b/lisp/org/ol-irc.el
@@ -1,6 +1,6 @@
 ;;; ol-irc.el --- Links to IRC Sessions              -*- lexical-binding: t; 
-*-
 ;;
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Philip Jackson <emacs@shellarchive.co.uk>
 ;; Keywords: erc, irc, link, org
diff --git a/lisp/org/ol-man.el b/lisp/org/ol-man.el
index a85ed9badfb..40fdc8f9237 100644
--- a/lisp/org/ol-man.el
+++ b/lisp/org/ol-man.el
@@ -1,6 +1,6 @@
 ;;; ol-man.el --- Links to man pages -*- lexical-binding: t; -*-
 ;;
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Maintainer: Bastien Guerry <bzg@gnu.org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/ol-mhe.el b/lisp/org/ol-mhe.el
index 8bd8aa6bfdc..403b5a25483 100644
--- a/lisp/org/ol-mhe.el
+++ b/lisp/org/ol-mhe.el
@@ -1,6 +1,6 @@
 ;;; ol-mhe.el --- Links to MH-E Messages             -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Thomas Baumann <thomas dot baumann at ch dot tum dot de>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/ol-rmail.el b/lisp/org/ol-rmail.el
index 4d6f82c9b4d..2877798281d 100644
--- a/lisp/org/ol-rmail.el
+++ b/lisp/org/ol-rmail.el
@@ -1,6 +1,6 @@
 ;;; ol-rmail.el --- Links to Rmail Messages          -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/ol-w3m.el b/lisp/org/ol-w3m.el
index 7bd241080bd..6fb01a60d59 100644
--- a/lisp/org/ol-w3m.el
+++ b/lisp/org/ol-w3m.el
@@ -1,6 +1,6 @@
 ;;; ol-w3m.el --- Copy and Paste From W3M            -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Andy Stewart <lazycat dot manatee at gmail dot com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/ol.el b/lisp/org/ol.el
index 3ae8f887554..9ad191c8f78 100644
--- a/lisp/org/ol.el
+++ b/lisp/org/ol.el
@@ -1,6 +1,6 @@
 ;;; ol.el --- Org links library                      -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-agenda.el b/lisp/org/org-agenda.el
index eda24893843..66b08adf535 100644
--- a/lisp/org/org-agenda.el
+++ b/lisp/org/org-agenda.el
@@ -1,6 +1,6 @@
 ;;; org-agenda.el --- Dynamic task and appointment lists for Org  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -3477,14 +3477,14 @@ This ensures the export commands can easily use it."
       (setq props (plist-put props 'tags (mapconcat #'identity tmp ":"))))
     (when (setq tmp (plist-get props 'date))
       (when (integerp tmp) (setq tmp (calendar-gregorian-from-absolute tmp)))
-      (let ((calendar-date-display-form '(year "-" month "-" day)))
-       '((format "%4d, %9s %2s, %4s" dayname monthname day year))
-
+      (let ((calendar-date-display-form
+             '(year "-" (string-pad month 2 ?0 'left) "-" (string-pad day 2 ?0 
'left))))
        (setq tmp (calendar-date-string tmp)))
       (setq props (plist-put props 'date tmp)))
     (when (setq tmp (plist-get props 'day))
       (when (integerp tmp) (setq tmp (calendar-gregorian-from-absolute tmp)))
-      (let ((calendar-date-display-form '(year "-" month "-" day)))
+      (let ((calendar-date-display-form
+             '(year "-" (string-pad month 2 ?0 'left) "-" (string-pad day 2 ?0 
'left))))
        (setq tmp (calendar-date-string tmp)))
       (setq props (plist-put props 'day tmp))
       (setq props (plist-put props 'agenda-day tmp)))
@@ -4678,7 +4678,7 @@ is active."
         (org-agenda-text-search-extra-files org-agenda-text-search-extra-files)
         regexp rtn rtnall files file pos inherited-tags
         marker category level tags c neg re boolean
-        ee txt beg end words regexps+ regexps- hdl-only buffer beg1 str)
+        ee txt beg end last-search-end words regexps+ regexps- hdl-only buffer 
beg1 str)
     (unless (and (not edit-at)
                 (stringp string)
                 (string-match "\\S-" string))
@@ -4817,6 +4817,7 @@ is active."
                      (throw 'nextfile t))
                    (goto-char (max (point-min) (1- (point))))
                    (while (re-search-forward regexp nil t)
+                      (setq last-search-end (point))
                      (org-back-to-heading t)
                      (while (and (not (zerop 
org-agenda-search-view-max-outline-level))
                                  (> (org-reduced-level (org-outline-level))
@@ -4878,7 +4879,7 @@ is active."
                          'priority 1000
                          'type "search")
                        (push txt ee)
-                       (goto-char (1- end))))))))))
+                       (goto-char (max (1- end) last-search-end))))))))))
        (setq rtn (nreverse ee))
        (setq rtnall (append rtnall rtn)))
       (org-agenda--insert-overriding-header
diff --git a/lisp/org/org-archive.el b/lisp/org/org-archive.el
index d08afa457ae..e74c59a51d9 100644
--- a/lisp/org/org-archive.el
+++ b/lisp/org/org-archive.el
@@ -1,6 +1,6 @@
 ;;; org-archive.el --- Archiving for Org             -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-attach-git.el b/lisp/org/org-attach-git.el
index 95a2359c3b7..4763aefd45c 100644
--- a/lisp/org/org-attach-git.el
+++ b/lisp/org/org-attach-git.el
@@ -1,6 +1,6 @@
 ;;; org-attach-git.el --- Automatic git commit extension to org-attach -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Original Author: John Wiegley <johnw@newartisans.com>
 ;; Restructurer: Gustav Wikström <gustav@whil.se>
diff --git a/lisp/org/org-attach.el b/lisp/org/org-attach.el
index 41f3a568c0b..e8b27751e76 100644
--- a/lisp/org/org-attach.el
+++ b/lisp/org/org-attach.el
@@ -1,6 +1,6 @@
 ;;; org-attach.el --- Manage file attachments to Org outlines -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@newartisans.com>
 ;; Keywords: org data attachment
diff --git a/lisp/org/org-capture.el b/lisp/org/org-capture.el
index b26afeb036a..a696c615b2a 100644
--- a/lisp/org/org-capture.el
+++ b/lisp/org/org-capture.el
@@ -1,6 +1,6 @@
 ;;; org-capture.el --- Fast note taking in Org       -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -1700,7 +1700,7 @@ Expansion occurs in a temporary Org mode buffer."
              (condition-case error
                  (insert-file-contents filename)
                (error
-                (insert (format "%%![couldn not insert %s: %s]"
+                (insert (format "%%![could not insert %s: %s]"
                                 filename
                                 error))))))))
       ;; Mark %() embedded elisp for later evaluation.
diff --git a/lisp/org/org-clock.el b/lisp/org/org-clock.el
index 02cddddb304..4e72141cdc9 100644
--- a/lisp/org/org-clock.el
+++ b/lisp/org/org-clock.el
@@ -1,6 +1,6 @@
 ;;; org-clock.el --- The time clocking code for Org mode -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-colview.el b/lisp/org/org-colview.el
index 20bf2b7e9c9..92a3b473d15 100644
--- a/lisp/org/org-colview.el
+++ b/lisp/org/org-colview.el
@@ -1,6 +1,6 @@
 ;;; org-colview.el --- Column View in Org            -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-compat.el b/lisp/org/org-compat.el
index 483f8844c34..6c50852553c 100644
--- a/lisp/org/org-compat.el
+++ b/lisp/org/org-compat.el
@@ -1,6 +1,6 @@
 ;;; org-compat.el --- Compatibility Code for Older Emacsen -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-crypt.el b/lisp/org/org-crypt.el
index 0d2ce593d78..b5df115cf90 100644
--- a/lisp/org/org-crypt.el
+++ b/lisp/org/org-crypt.el
@@ -1,6 +1,6 @@
 ;;; org-crypt.el --- Public Key Encryption for Org Entries -*- 
lexical-binding: t; -*-
 ;;
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/org/org-ctags.el b/lisp/org/org-ctags.el
index cba99fca218..5dd2bfd59cd 100644
--- a/lisp/org/org-ctags.el
+++ b/lisp/org/org-ctags.el
@@ -1,6 +1,6 @@
 ;;; org-ctags.el --- Integrate Emacs "tags" Facility with Org -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Paul Sexton <eeeickythump@gmail.com>
 ;; Keywords: org, wp
diff --git a/lisp/org/org-cycle.el b/lisp/org/org-cycle.el
index 9531ac4c8c7..828c84cd0ac 100644
--- a/lisp/org/org-cycle.el
+++ b/lisp/org/org-cycle.el
@@ -1,6 +1,6 @@
 ;;; org-cycle.el --- Visibility cycling of Org entries -*- lexical-binding: t; 
-*-
 ;;
-;; Copyright (C) 2020-2020 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 ;;
 ;; Maintainer: Ihor Radchenko <yantar92 at gmail dot com>
 ;; Keywords: folding, visibility cycling, invisible text
diff --git a/lisp/org/org-datetree.el b/lisp/org/org-datetree.el
index fb4df3cbe81..035ef047a9d 100644
--- a/lisp/org/org-datetree.el
+++ b/lisp/org/org-datetree.el
@@ -1,6 +1,6 @@
 ;;; org-datetree.el --- Create date entries in a tree -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-duration.el b/lisp/org/org-duration.el
index 6d6b8b5cf1d..2919efd4c77 100644
--- a/lisp/org/org-duration.el
+++ b/lisp/org/org-duration.el
@@ -1,6 +1,6 @@
 ;;; org-duration.el --- Library handling durations   -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-element.el b/lisp/org/org-element.el
index 71c242ea658..f787fb1f713 100644
--- a/lisp/org/org-element.el
+++ b/lisp/org/org-element.el
@@ -1,6 +1,6 @@
 ;;; org-element.el --- Parser for Org Syntax         -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -1365,7 +1365,16 @@ Assume point is at beginning of the inline task."
           (priority (and (looking-at "\\[#.\\][ \t]*")
                          (progn (goto-char (match-end 0))
                                 (aref (match-string 0) 2))))
-          (title-start (point))
+           (commentedp
+           (and (let ((case-fold-search nil))
+                   (looking-at org-element-comment-string))
+                (goto-char (match-end 0))
+                 (when (looking-at-p "\\(?:[ \t]\\|$\\)")
+                   (point))))
+          (title-start (prog1 (point)
+                          (unless (or todo priority commentedp)
+                            ;; Headline like "* :tag:"
+                            (skip-chars-backward " \t"))))
           (tags (when (re-search-forward
                        "[ \t]+\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$"
                        (line-end-position)
@@ -1375,6 +1384,7 @@ Assume point is at beginning of the inline task."
           (title-end (point))
           (raw-value (org-trim
                       (buffer-substring-no-properties title-start title-end)))
+           (archivedp (member org-element-archive-tag tags))
           (task-end (save-excursion
                       (end-of-line)
                       (and (re-search-forward org-element-headline-re limit t)
@@ -1410,7 +1420,9 @@ Assume point is at beginning of the inline task."
                         :todo-keyword todo
                         :todo-type todo-type
                         :post-blank (1- (count-lines (or task-end begin) end))
-                        :post-affiliated begin)
+                        :post-affiliated begin
+                         :archivedp archivedp
+                        :commentedp commentedp)
                   time-props
                   standard-props))))
       (org-element-put-property
@@ -5287,7 +5299,7 @@ indentation removed from its contents."
 ;; mechanism is robust enough to preserve total order among elements
 ;; even when the tree is only partially synchronized.
 ;;
-;; The cache code debuggin is fairly complex because cache request
+;; The cache code debugging is fairly complex because cache request
 ;; state is often hard to reproduce.  An extensive diagnostics
 ;; functionality is built into the cache code to assist hunting bugs.
 ;; See `org-element--cache-self-verify', 
`org-element--cache-self-verify-frequency',
@@ -7260,18 +7272,18 @@ Each element indicates the latest 
`org-element--cache-change-tic' when
 change did not contain gaps.")
 
 ;;;###autoload
-(defun org-element-cache-reset (&optional all no-persistance)
+(defun org-element-cache-reset (&optional all no-persistence)
   "Reset cache in current buffer.
 When optional argument ALL is non-nil, reset cache in all Org
 buffers.
-When optional argument NO-PERSISTANCE is non-nil, do not try to update
+When optional argument NO-PERSISTENCE is non-nil, do not try to update
 the cache persistence in the buffer."
   (interactive "P")
   (dolist (buffer (if all (buffer-list) (list (current-buffer))))
     (org-with-base-buffer buffer
       (when (and org-element-use-cache (derived-mode-p 'org-mode))
         ;; Only persist cache in file buffers.
-        (when (and (buffer-file-name) (not no-persistance))
+        (when (and (buffer-file-name) (not no-persistence))
           (when (not org-element-cache-persistent)
             (org-persist-unregister 'org-element--headline-cache 
(current-buffer))
             (org-persist-unregister 'org-element--cache (current-buffer)))
diff --git a/lisp/org/org-entities.el b/lisp/org/org-entities.el
index 153aa2b6767..61083022b82 100644
--- a/lisp/org/org-entities.el
+++ b/lisp/org/org-entities.el
@@ -1,6 +1,6 @@
 ;;; org-entities.el --- Support for Special Entities -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>,
 ;;         Ulf Stegemann <ulf at zeitform dot de>
diff --git a/lisp/org/org-faces.el b/lisp/org/org-faces.el
index 0effa13a1d6..594c9a6e738 100644
--- a/lisp/org/org-faces.el
+++ b/lisp/org/org-faces.el
@@ -1,6 +1,6 @@
 ;;; org-faces.el --- Face definitions -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -517,7 +517,7 @@ content of these blocks will still be treated as Org 
syntax."
 (defface org-agenda-structure-filter '((t (:inherit (org-warning 
org-agenda-structure))))
   "Face used for the current type of task filter in the agenda.
 It inherits from `org-agenda-structure' so it can adapt to
-it (e.g. if that is assigned a diffent font height or family)."
+it (e.g. if that is assigned a different font height or family)."
   :group 'org-faces)
 
 (defface org-agenda-date '((t (:inherit org-agenda-structure)))
diff --git a/lisp/org/org-feed.el b/lisp/org/org-feed.el
index 3523a6c5ba0..f0b294b4a59 100644
--- a/lisp/org/org-feed.el
+++ b/lisp/org/org-feed.el
@@ -1,6 +1,6 @@
 ;;; org-feed.el --- Add RSS feed items to Org files  -*- lexical-binding: t; 
-*-
 ;;
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-fold-core.el b/lisp/org/org-fold-core.el
index ffa689d4fa1..0855e6f39ce 100644
--- a/lisp/org/org-fold-core.el
+++ b/lisp/org/org-fold-core.el
@@ -1,6 +1,6 @@
 ;;; org-fold-core.el --- Folding buffer text -*- lexical-binding: t; -*-
 ;;
-;; Copyright (C) 2020-2020 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Ihor Radchenko <yantar92 at gmail dot com>
 ;; Keywords: folding, invisible text
@@ -145,7 +145,7 @@
 
 ;; All the folding specs can be specified by symbol representing their
 ;; name.  However, this is not always convenient, especially if the
-;; same spec can be used for fold different syntaxical structures.
+;; same spec can be used for fold different syntactical structures.
 ;; Any folding spec can be additionally referenced by a symbol listed
 ;; in the spec's `:alias' folding spec property.  For example, Org
 ;; mode's `org-fold-outline' folding spec can be referenced as any
@@ -189,9 +189,9 @@
 ;; all the processing related to buffer modifications.
 
 ;; The library also provides a way to unfold the text after some
-;; destructive changes breaking syntaxical structure of the buffer.
+;; destructive changes breaking syntactical structure of the buffer.
 ;; For example, Org mode automatically reveals folded drawers when the
-;; drawer becomes syntaxically incorrect:
+;; drawer becomes syntactically incorrect:
 ;; ------- before modification -------
 ;; :DRAWER:<begin fold>
 ;; Some folded text inside drawer
@@ -321,7 +321,7 @@ following symbols:
   functions relying on this package might not be able to unfold the
   edited text.  For example, removed leading stars from a folded
   headline in Org mode will break visibility cycling since Org mode
-  will not be avare that the following folded text belonged to
+  will not be aware that the following folded text belonged to
   headline.
 
 - `ignore-modification-checks': Do not try to detect insertions in the
diff --git a/lisp/org/org-fold.el b/lisp/org/org-fold.el
index 4d213e9648a..1b7ca22b044 100644
--- a/lisp/org/org-fold.el
+++ b/lisp/org/org-fold.el
@@ -1,6 +1,6 @@
 ;;; org-fold.el --- Folding of Org entries -*- lexical-binding: t; -*-
 ;;
-;; Copyright (C) 2020-2020 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Ihor Radchenko <yantar92 at gmail dot com>
 ;; Keywords: folding, invisible text
diff --git a/lisp/org/org-footnote.el b/lisp/org/org-footnote.el
index ac78360aeff..c83026d1d8f 100644
--- a/lisp/org/org-footnote.el
+++ b/lisp/org/org-footnote.el
@@ -1,6 +1,6 @@
 ;;; org-footnote.el --- Footnote support in Org      -*- lexical-binding: t; 
-*-
 ;;
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-goto.el b/lisp/org/org-goto.el
index 6801303840b..00bf5d46aaa 100644
--- a/lisp/org/org-goto.el
+++ b/lisp/org/org-goto.el
@@ -1,6 +1,6 @@
 ;;; org-goto.el --- Fast navigation in an Org buffer  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-habit.el b/lisp/org/org-habit.el
index 677b7adb6f0..fb6a48b5f55 100644
--- a/lisp/org/org-habit.el
+++ b/lisp/org/org-habit.el
@@ -1,6 +1,6 @@
 ;;; org-habit.el --- The habit tracking code for Org -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw at gnu dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-id.el b/lisp/org/org-id.el
index 8cb5666a299..490e4ddee5b 100644
--- a/lisp/org/org-id.el
+++ b/lisp/org/org-id.el
@@ -1,6 +1,6 @@
 ;;; org-id.el --- Global identifiers for Org entries -*- lexical-binding: t; 
-*-
 ;;
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-indent.el b/lisp/org/org-indent.el
index de237415cc8..fe52338788c 100644
--- a/lisp/org/org-indent.el
+++ b/lisp/org/org-indent.el
@@ -1,6 +1,6 @@
 ;;; org-indent.el --- Dynamic indentation for Org    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-inlinetask.el b/lisp/org/org-inlinetask.el
index 1c4124d4c72..cb7fdf88bde 100644
--- a/lisp/org/org-inlinetask.el
+++ b/lisp/org/org-inlinetask.el
@@ -1,6 +1,6 @@
 ;;; org-inlinetask.el --- Tasks Independent of Outline Hierarchy -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-keys.el b/lisp/org/org-keys.el
index 95f64a3f9eb..37a150bb7bf 100644
--- a/lisp/org/org-keys.el
+++ b/lisp/org/org-keys.el
@@ -1,6 +1,6 @@
 ;;; org-keys.el --- Key bindings for Org mode        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 
diff --git a/lisp/org/org-lint.el b/lisp/org/org-lint.el
index ff2999cb8fa..0e2967b6cb6 100644
--- a/lisp/org/org-lint.el
+++ b/lisp/org/org-lint.el
@@ -1,6 +1,6 @@
 ;;; org-lint.el --- Linting for Org documents        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-list.el b/lisp/org/org-list.el
index 606bdb3d8e7..1fc99d0708a 100644
--- a/lisp/org/org-list.el
+++ b/lisp/org/org-list.el
@@ -1,6 +1,6 @@
 ;;; org-list.el --- Plain lists for Org              -*- lexical-binding: t; 
-*-
 ;;
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;;        Bastien Guerry <bzg@gnu.org>
diff --git a/lisp/org/org-macro.el b/lisp/org/org-macro.el
index a7fb8f858eb..481e431c2f9 100644
--- a/lisp/org/org-macro.el
+++ b/lisp/org/org-macro.el
@@ -1,6 +1,6 @@
 ;;; org-macro.el --- Macro Replacement Code for Org  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-macs.el b/lisp/org/org-macs.el
index 0c6a2173d26..72929cdd26c 100644
--- a/lisp/org/org-macs.el
+++ b/lisp/org/org-macs.el
@@ -1,6 +1,6 @@
 ;;; org-macs.el --- Top-level Definitions for Org -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -74,11 +74,15 @@ Version mismatch is commonly encountered in the following 
situations:
    loading of the newer Org version.
 
    It is recommended to put
-    (straight-use-package 'org)
+
+    %s
+
    early in the config.  Ideally, right after the straight.el
    bootstrap.  Moving `use-package' :straight declaration may not be
    sufficient if the corresponding `use-package' statement is
-   deferring the loading.")
+   deferring the loading."
+           ;; Avoid `warn' replacing "'" with "’" (see `format-message').
+           "(straight-use-package 'org)")
      (error "Org version mismatch.  Make sure that correct `load-path' is set 
early in init.el")))
 
 ;; We rely on org-macs when generating Org version.  Checking Org
diff --git a/lisp/org/org-mobile.el b/lisp/org/org-mobile.el
index a95c4e4769d..01395a4b616 100644
--- a/lisp/org/org-mobile.el
+++ b/lisp/org/org-mobile.el
@@ -1,5 +1,5 @@
 ;;; org-mobile.el --- Code for Asymmetric Sync With a Mobile Device -*- 
lexical-binding: t; -*-
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-mouse.el b/lisp/org/org-mouse.el
index 817a2d1b05e..6a733f09db7 100644
--- a/lisp/org/org-mouse.el
+++ b/lisp/org/org-mouse.el
@@ -1,6 +1,6 @@
 ;;; org-mouse.el --- Better mouse support for Org -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Piotr Zielinski <piotr dot zielinski at gmail dot com>
 ;; Maintainer: Carsten Dominik <carsten.dominik@gmail.com>
diff --git a/lisp/org/org-num.el b/lisp/org/org-num.el
index 4a57e6a9e3d..cbe5e455ea6 100644
--- a/lisp/org/org-num.el
+++ b/lisp/org/org-num.el
@@ -1,6 +1,6 @@
 ;;; org-num.el --- Dynamic Headlines Numbering  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-pcomplete.el b/lisp/org/org-pcomplete.el
index 5e5e48d3f42..0567052c089 100644
--- a/lisp/org/org-pcomplete.el
+++ b/lisp/org/org-pcomplete.el
@@ -1,6 +1,6 @@
 ;;; org-pcomplete.el --- In-buffer Completion Code -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;;         John Wiegley <johnw at gnu dot org>
diff --git a/lisp/org/org-persist.el b/lisp/org/org-persist.el
index 6ccf357784e..c3650c167e2 100644
--- a/lisp/org/org-persist.el
+++ b/lisp/org/org-persist.el
@@ -1,6 +1,6 @@
 ;;; org-persist.el --- Persist cached data across Emacs sessions         -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Ihor Radchenko <yantar92 at gmail dot com>
 ;; Keywords: cache, storage
@@ -161,7 +161,7 @@
 (declare-function org-at-heading-p "org" (&optional invisible-not-ok))
 
 
-(defconst org-persist--storage-version "2.7"
+(defconst org-persist--storage-version "3.1"
   "Persistent storage layout version.")
 
 (defgroup org-persist nil
@@ -431,25 +431,27 @@ Return PLIST."
           (when key (remhash (cons cont (list :key key)) 
org-persist--index-hash))))
       (setq org-persist--index (delq existing org-persist--index)))))
 
-(defun org-persist--get-collection (container &optional associated &rest misc)
+(defun org-persist--get-collection (container &optional associated misc)
   "Return or create collection used to store CONTAINER for ASSOCIATED.
 When ASSOCIATED is nil, it is a global CONTAINER.
 ASSOCIATED can also be a (:buffer buffer) or buffer, (:file file-path)
 or file-path, (:inode inode), (:hash hash), or or (:key key).
-MISC, if non-nil will be appended to the collection."
+MISC, if non-nil will be appended to the collection.  It must be a plist."
   (unless (and (listp container) (listp (car container)))
     (setq container (list container)))
   (setq associated (org-persist--normalize-associated associated))
-  (unless (equal misc '(nil))
-    (setq associated (append associated misc)))
+  (when (and misc (or (not (listp misc)) (= 1 (% (length misc) 2))))
+    (error "org-persist: Not a plist: %S" misc))
   (or (org-persist--find-index
        `( :container ,(org-persist--normalize-container container)
           :associated ,associated))
       (org-persist--add-to-index
-       (list :container (org-persist--normalize-container container)
-             :persist-file
-             (replace-regexp-in-string "^.." "\\&/" (org-id-uuid))
-             :associated associated))))
+       (nconc
+        (list :container (org-persist--normalize-container container)
+              :persist-file
+              (replace-regexp-in-string "^.." "\\&/" (org-id-uuid))
+              :associated associated)
+        misc))))
 
 ;;;; Reading container data.
 
@@ -650,9 +652,10 @@ COLLECTION is the plist holding data collection."
              (file-copy (org-file-name-concat
                          org-persist-directory
                          (format "%s-%s.%s" persist-file (md5 path) ext))))
-        (unless (file-exists-p (file-name-directory file-copy))
-          (make-directory (file-name-directory file-copy) t))
-        (copy-file path file-copy 'overwrite)
+        (unless (file-exists-p file-copy)
+          (unless (file-exists-p (file-name-directory file-copy))
+            (make-directory (file-name-directory file-copy) t))
+          (copy-file path file-copy 'overwrite))
         (format "%s-%s.%s" persist-file (md5 path) ext)))))
 
 (defun org-persist-write:url (c collection)
@@ -719,7 +722,8 @@ last access, or a function accepting a single argument - 
collection.
 EXPIRY key has no effect when INHERIT is non-nil.
 Optional key WRITE-IMMEDIATELY controls whether to save the container
 data immediately.
-MISC will be appended to CONTAINER.
+MISC will be appended to the collection.  It must be alternating :KEY
+VALUE pairs.
 When WRITE-IMMEDIATELY is non-nil, the return value will be the same
 with `org-persist-write'."
   (unless org-persist--index (org-persist--load-index))
@@ -874,15 +878,21 @@ When IGNORE-RETURN is non-nil, just return t on success 
without calling
 When ASSOCIATED is non-nil, only save the matching data."
   (unless org-persist--index (org-persist--load-index))
   (setq associated (org-persist--normalize-associated associated))
-  (unless
+  (if
       (and (equal 1 (length org-persist--index))
            ;; The single collection only contains a single container
            ;; in the container list.
            (equal 1 (length (plist-get (car org-persist--index) :container)))
            ;; The container is an `index' container.
            (eq 'index (caar (plist-get (car org-persist--index) :container)))
-           ;; No `org-persist-directory' exists yet.
-           (not (file-exists-p org-persist-directory)))
+           (or (not (file-exists-p org-persist-directory))
+               (org-directory-empty-p org-persist-directory)))
+      ;; Do not write anything, and clear up `org-persist-directory' to reduce
+      ;; clutter.
+      (when (and (file-exists-p org-persist-directory)
+                 (org-directory-empty-p org-persist-directory))
+        (delete-directory org-persist-directory))
+    ;; Write the data.
     (let (all-containers)
       (dolist (collection org-persist--index)
         (if associated
@@ -963,6 +973,30 @@ Also, remove containers associated with non-existing 
files."
             (push collection new-index)))))
     (setq org-persist--index (nreverse new-index))))
 
+(defun org-persist-clear-storage-maybe ()
+  "Clear `org-persist-directory' according to 
`org-persist--disable-when-emacs-Q'.
+
+When `org-persist--disable-when-emacs-Q' is non-nil and Emacs is called with -Q
+command line argument, `org-persist-directory' is created in potentially public
+system temporary directory.  Remove everything upon existing Emacs in
+such scenario."
+  (when (and org-persist--disable-when-emacs-Q
+             ;; FIXME: This is relying on undocumented fact that
+             ;; Emacs sets `user-init-file' to nil when loaded with
+             ;; "-Q" argument.
+             (not user-init-file)
+             (file-exists-p org-persist-directory))
+    (delete-directory org-persist-directory 'recursive)))
+
+;; Point to temp directory when `org-persist--disable-when-emacs-Q' is set.
+(when (and org-persist--disable-when-emacs-Q
+           ;; FIXME: This is relying on undocumented fact that
+           ;; Emacs sets `user-init-file' to nil when loaded with
+           ;; "-Q" argument.
+           (not user-init-file))
+  (setq org-persist-directory
+        (make-temp-file "org-persist-" 'dir)))
+
 ;; Automatically write the data, but only when we have write access.
 (let ((dir (directory-file-name
             (file-name-as-directory org-persist-directory))))
@@ -972,20 +1006,12 @@ Also, remove containers associated with non-existing 
files."
   (if (not (file-writable-p dir))
       (message "Missing write access rights to org-persist-directory: %S"
                org-persist-directory)
+    (add-hook 'kill-emacs-hook #'org-persist-clear-storage-maybe) ; Run last.
     (add-hook 'kill-emacs-hook #'org-persist-write-all)
     ;; `org-persist-gc' should run before `org-persist-write-all'.
     ;; So we are adding the hook after `org-persist-write-all'.
     (add-hook 'kill-emacs-hook #'org-persist-gc)))
 
-;; Point to temp directory when `org-persist--disable-when-emacs-Q' is set.
-(if (and org-persist--disable-when-emacs-Q
-         ;; FIXME: This is relying on undocumented fact that
-         ;; Emacs sets `user-init-file' to nil when loaded with
-         ;; "-Q" argument.
-         (not user-init-file))
-    (setq org-persist-directory
-          (make-temp-file "org-persist-" 'dir)))
-
 (add-hook 'after-init-hook #'org-persist-load-all)
 
 (provide 'org-persist)
diff --git a/lisp/org/org-plot.el b/lisp/org/org-plot.el
index ef6b5aa057d..fe61e9ace7e 100644
--- a/lisp/org/org-plot.el
+++ b/lisp/org/org-plot.el
@@ -1,6 +1,6 @@
 ;;; org-plot.el --- Support for Plotting from Org -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Eric Schulte <schulte dot eric at gmail dot com>
 ;; Maintainer: TEC <orgmode@tec.tecosaur.net>
diff --git a/lisp/org/org-protocol.el b/lisp/org/org-protocol.el
index 9ce21cf2ac2..2b07a377e2a 100644
--- a/lisp/org/org-protocol.el
+++ b/lisp/org/org-protocol.el
@@ -1,6 +1,6 @@
 ;;; org-protocol.el --- Intercept Calls from Emacsclient to Trigger Custom 
Actions -*- lexical-binding: t; -*-
 ;;
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 ;;
 ;; Authors: Bastien Guerry <bzg@gnu.org>
 ;;       Daniel M German <dmg AT uvic DOT org>
diff --git a/lisp/org/org-refile.el b/lisp/org/org-refile.el
index 8c514b9d0b2..5a41c022fee 100644
--- a/lisp/org/org-refile.el
+++ b/lisp/org/org-refile.el
@@ -1,6 +1,6 @@
 ;;; org-refile.el --- Refile Org Subtrees             -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-src.el b/lisp/org/org-src.el
index 7d5f5d5431e..9e439281118 100644
--- a/lisp/org/org-src.el
+++ b/lisp/org/org-src.el
@@ -1,6 +1,6 @@
 ;;; org-src.el --- Source code examples in Org       -*- lexical-binding: t; 
-*-
 ;;
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;;        Bastien Guerry <bzg@gnu.org>
@@ -629,83 +629,83 @@ Leave point in edit buffer."
   "Fontify code block between START and END using LANG's syntax.
 This function is called by Emacs' automatic fontification, as long
 as `org-src-fontify-natively' is non-nil."
-  (let ((lang-mode (org-src-get-lang-mode lang)))
-    (when (fboundp lang-mode)
-      (let ((string (buffer-substring-no-properties start end))
-           (modified (buffer-modified-p))
-           (org-buffer (current-buffer)))
-       (remove-text-properties start end '(face nil))
-       (with-current-buffer
-           (get-buffer-create
-            (format " *org-src-fontification:%s*" lang-mode))
-         (let ((inhibit-modification-hooks nil))
-           (erase-buffer)
-           ;; Add string and a final space to ensure property change.
-           (insert string " "))
-         (unless (eq major-mode lang-mode) (funcall lang-mode))
-          (font-lock-ensure)
-         (let ((pos (point-min)) next)
-           (while (setq next (next-property-change pos))
-             ;; Handle additional properties from font-lock, so as to
-             ;; preserve, e.g., composition.
-              ;; FIXME: We copy 'font-lock-face property explicitly because
-              ;; `font-lock-mode' is not enabled in the buffers starting from
-              ;; space and the remapping between 'font-lock-face and 'face
-              ;; text properties may thus not be set.  See commit
-              ;; 453d634bc.
-             (dolist (prop (append '(font-lock-face face) 
font-lock-extra-managed-props))
-               (let ((new-prop (get-text-property pos prop)))
-                  (when new-prop
-                    (if (not (eq prop 'invisible))
-                       (put-text-property
-                        (+ start (1- pos)) (1- (+ start next)) prop new-prop
-                        org-buffer)
-                      ;; Special case.  `invisible' text property may
-                      ;; clash with Org folding.  Do not assign
-                      ;; `invisible' text property directly.  Use
-                      ;; property alias instead.
-                      (let ((invisibility-spec
-                             (or
-                              ;; ATOM spec.
-                              (and (memq new-prop buffer-invisibility-spec)
-                                   new-prop)
-                              ;; (ATOM . ELLIPSIS) spec.
-                              (assq new-prop buffer-invisibility-spec))))
-                        (with-current-buffer org-buffer
-                          ;; Add new property alias.
-                          (unless (memq 'org-src-invisible
-                                        (cdr (assq 'invisible 
char-property-alias-alist)))
-                            (setq-local
-                             char-property-alias-alist
-                             (cons (cons 'invisible
-                                        (nconc (cdr (assq 'invisible 
char-property-alias-alist))
-                                                '(org-src-invisible)))
-                                  (remove (assq 'invisible 
char-property-alias-alist)
-                                          char-property-alias-alist))))
-                          ;; Carry over the invisibility spec, unless
-                          ;; already present.  Note that there might
-                          ;; be conflicting invisibility specs from
-                          ;; different major modes.  We cannot do much
-                          ;; about this then.
-                          (when invisibility-spec
-                            (add-to-invisibility-spec invisibility-spec))
-                          (put-text-property
-                          (+ start (1- pos)) (1- (+ start next))
-                           'org-src-invisible new-prop
-                          org-buffer)))))))
-             (setq pos next)))
-          (set-buffer-modified-p nil))
-       ;; Add Org faces.
-       (let ((src-face (nth 1 (assoc-string lang org-src-block-faces t))))
-          (when (or (facep src-face) (listp src-face))
-            (font-lock-append-text-property start end 'face src-face))
-         (font-lock-append-text-property start end 'face 'org-block))
-        ;; Clear abbreviated link folding.
-        (org-fold-region start end nil 'org-link)
-       (add-text-properties
-        start end
-        '(font-lock-fontified t fontified t font-lock-multiline t))
-       (set-buffer-modified-p modified)))))
+  (let ((modified (buffer-modified-p)))
+    (remove-text-properties start end '(face nil))
+    (let ((lang-mode (org-src-get-lang-mode lang)))
+      (when (fboundp lang-mode)
+        (let ((string (buffer-substring-no-properties start end))
+             (org-buffer (current-buffer)))
+         (with-current-buffer
+             (get-buffer-create
+              (format " *org-src-fontification:%s*" lang-mode))
+           (let ((inhibit-modification-hooks nil))
+             (erase-buffer)
+             ;; Add string and a final space to ensure property change.
+             (insert string " "))
+           (unless (eq major-mode lang-mode) (funcall lang-mode))
+            (font-lock-ensure)
+           (let ((pos (point-min)) next)
+             (while (setq next (next-property-change pos))
+               ;; Handle additional properties from font-lock, so as to
+               ;; preserve, e.g., composition.
+                ;; FIXME: We copy 'font-lock-face property explicitly because
+                ;; `font-lock-mode' is not enabled in the buffers starting from
+                ;; space and the remapping between 'font-lock-face and 'face
+                ;; text properties may thus not be set.  See commit
+                ;; 453d634bc.
+               (dolist (prop (append '(font-lock-face face) 
font-lock-extra-managed-props))
+                 (let ((new-prop (get-text-property pos prop)))
+                    (when new-prop
+                      (if (not (eq prop 'invisible))
+                         (put-text-property
+                          (+ start (1- pos)) (1- (+ start next)) prop new-prop
+                          org-buffer)
+                        ;; Special case.  `invisible' text property may
+                        ;; clash with Org folding.  Do not assign
+                        ;; `invisible' text property directly.  Use
+                        ;; property alias instead.
+                        (let ((invisibility-spec
+                               (or
+                                ;; ATOM spec.
+                                (and (memq new-prop buffer-invisibility-spec)
+                                     new-prop)
+                                ;; (ATOM . ELLIPSIS) spec.
+                                (assq new-prop buffer-invisibility-spec))))
+                          (with-current-buffer org-buffer
+                            ;; Add new property alias.
+                            (unless (memq 'org-src-invisible
+                                          (cdr (assq 'invisible 
char-property-alias-alist)))
+                              (setq-local
+                               char-property-alias-alist
+                               (cons (cons 'invisible
+                                          (nconc (cdr (assq 'invisible 
char-property-alias-alist))
+                                                  '(org-src-invisible)))
+                                    (remove (assq 'invisible 
char-property-alias-alist)
+                                            char-property-alias-alist))))
+                            ;; Carry over the invisibility spec, unless
+                            ;; already present.  Note that there might
+                            ;; be conflicting invisibility specs from
+                            ;; different major modes.  We cannot do much
+                            ;; about this then.
+                            (when invisibility-spec
+                              (add-to-invisibility-spec invisibility-spec))
+                            (put-text-property
+                            (+ start (1- pos)) (1- (+ start next))
+                             'org-src-invisible new-prop
+                            org-buffer)))))))
+               (setq pos next)))
+            (set-buffer-modified-p nil)))))
+    ;; Add Org faces.
+    (let ((src-face (nth 1 (assoc-string lang org-src-block-faces t))))
+      (when (or (facep src-face) (listp src-face))
+        (font-lock-append-text-property start end 'face src-face))
+      (font-lock-append-text-property start end 'face 'org-block))
+    ;; Clear abbreviated link folding.
+    (org-fold-region start end nil 'org-link)
+    (add-text-properties
+     start end
+     '(font-lock-fontified t fontified t font-lock-multiline t))
+    (set-buffer-modified-p modified)))
 
 (defun org-fontify-inline-src-blocks (limit)
   "Try to apply `org-fontify-inline-src-blocks-1'."
diff --git a/lisp/org/org-table.el b/lisp/org/org-table.el
index fa9a0319be2..06cf919db76 100644
--- a/lisp/org/org-table.el
+++ b/lisp/org/org-table.el
@@ -1,6 +1,6 @@
 ;;; org-table.el --- The Table Editor for Org        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-tempo.el b/lisp/org/org-tempo.el
index 0902a45e8ac..81ec8fdccfe 100644
--- a/lisp/org/org-tempo.el
+++ b/lisp/org/org-tempo.el
@@ -1,6 +1,6 @@
 ;;; org-tempo.el --- Template expansion for Org structures -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Rasmus Pank Roulund <emacs at pank dot eu>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-timer.el b/lisp/org/org-timer.el
index 9741ac67973..919630e696f 100644
--- a/lisp/org/org-timer.el
+++ b/lisp/org/org-timer.el
@@ -1,6 +1,6 @@
 ;;; org-timer.el --- Timer code for Org mode         -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index 8de0d1a4a97..dd6d92d8e58 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -11,7 +11,7 @@ Inserted by installing Org mode or when a release is made."
 (defun org-git-version ()
   "The Git version of Org mode.
 Inserted by installing Org or when a release is made."
-   (let ((org-git-version "release_9.6-49-g47d129"))
+   (let ((org-git-version "release_9.6-81-g563a43"))
      org-git-version))
 
 (provide 'org-version)
diff --git a/lisp/org/org.el b/lisp/org/org.el
index 6aa2a16219d..21764f3d434 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -1,7 +1,7 @@
 ;;; org.el --- Outline-based notes management and organizer -*- 
lexical-binding: t; -*-
 
 ;; Carstens outline-mode for keeping track of everything.
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Maintainer: Bastien Guerry <bzg@gnu.org>
@@ -20213,7 +20213,10 @@ interactive command with similar behavior."
 (defun org-back-to-heading (&optional invisible-ok)
   "Go back to beginning of heading."
   (beginning-of-line)
-  (or (org-at-heading-p (not invisible-ok))
+  (or (and (org-at-heading-p (not invisible-ok))
+           (not (and (featurep 'org-inlinetask)
+                   (fboundp 'org-inlinetask-end-p)
+                   (org-inlinetask-end-p))))
       (if (org-element--cache-active-p)
           (let ((heading (org-element-lineage (org-element-at-point)
                                            '(headline inlinetask)
diff --git a/lisp/org/ox-ascii.el b/lisp/org/ox-ascii.el
index 7e5ba104ff6..9c4424b14f1 100644
--- a/lisp/org/ox-ascii.el
+++ b/lisp/org/ox-ascii.el
@@ -1,6 +1,6 @@
 ;;; ox-ascii.el --- ASCII Back-End for Org Export Engine -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;; Maintainer: Nicolas Goaziou <mail@nicolasgoaziou.fr>
diff --git a/lisp/org/ox-beamer.el b/lisp/org/ox-beamer.el
index 51684448d68..689bf1559b4 100644
--- a/lisp/org/ox-beamer.el
+++ b/lisp/org/ox-beamer.el
@@ -1,6 +1,6 @@
 ;;; ox-beamer.el --- Beamer Back-End for Org Export Engine -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik AT gmail DOT com>
 ;;         Nicolas Goaziou <n.goaziou AT gmail DOT com>
diff --git a/lisp/org/ox-html.el b/lisp/org/ox-html.el
index 86b10cbf785..7b79c57d4a4 100644
--- a/lisp/org/ox-html.el
+++ b/lisp/org/ox-html.el
@@ -1,6 +1,6 @@
 ;;; ox-html.el --- HTML Back-End for Org Export Engine -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;;      Jambunathan K <kjambunathan at gmail dot com>
@@ -3337,7 +3337,7 @@ INFO is a plist holding contextual information.  See
                      ((org-html-standalone-image-p destination info)
                       (org-export-get-ordinal
                        (org-element-map destination 'link #'identity info t)
-                       info 'link 'org-html-standalone-image-p))
+                       info '(link) 'org-html-standalone-image-p))
                      (t (org-export-get-ordinal
                          destination info nil counter-predicate))))
                     (desc
diff --git a/lisp/org/ox-icalendar.el b/lisp/org/ox-icalendar.el
index cfbfabafb07..81a77a77056 100644
--- a/lisp/org/ox-icalendar.el
+++ b/lisp/org/ox-icalendar.el
@@ -1,6 +1,6 @@
 ;;; ox-icalendar.el --- iCalendar Back-End for Org Export Engine -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;;      Nicolas Goaziou <mail@nicolasgoaziou.fr>
diff --git a/lisp/org/ox-koma-letter.el b/lisp/org/ox-koma-letter.el
index a6cfb24a9e8..33eb0597b08 100644
--- a/lisp/org/ox-koma-letter.el
+++ b/lisp/org/ox-koma-letter.el
@@ -1,6 +1,6 @@
 ;;; ox-koma-letter.el --- KOMA Scrlttr2 Back-End for Org Export Engine  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou AT gmail DOT com>
 ;;         Alan Schmitt <alan.schmitt AT polytechnique DOT org>
diff --git a/lisp/org/ox-latex.el b/lisp/org/ox-latex.el
index 5b29a284c9f..5ac9c378133 100644
--- a/lisp/org/ox-latex.el
+++ b/lisp/org/ox-latex.el
@@ -1,6 +1,6 @@
 ;;; ox-latex.el --- LaTeX Back-End for Org Export Engine -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;; Maintainer: Daniel Fleischer <danflscr@gmail.com>
diff --git a/lisp/org/ox-man.el b/lisp/org/ox-man.el
index 111c46aed9c..bb716f7b9f2 100644
--- a/lisp/org/ox-man.el
+++ b/lisp/org/ox-man.el
@@ -1,6 +1,6 @@
 ;;; ox-man.el --- Man Back-End for Org Export Engine -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;;      Luis R Anaya <papoanaya aroba hot mail punto com>
diff --git a/lisp/org/ox-md.el b/lisp/org/ox-md.el
index dcd95e98711..5cb79ef2396 100644
--- a/lisp/org/ox-md.el
+++ b/lisp/org/ox-md.el
@@ -1,6 +1,6 @@
 ;;; ox-md.el --- Markdown Back-End for Org Export Engine -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou@gmail.com>
 ;; Maintainer: Nicolas Goaziou <mail@nicolasgoaziou.fr>
diff --git a/lisp/org/ox-odt.el b/lisp/org/ox-odt.el
index 402c754471b..1c233a266a1 100644
--- a/lisp/org/ox-odt.el
+++ b/lisp/org/ox-odt.el
@@ -1,6 +1,6 @@
 ;;; ox-odt.el --- OpenDocument Text Exporter for Org Mode -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Jambunathan K <kjambunathan at gmail dot com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/ox-org.el b/lisp/org/ox-org.el
index 159a41b9835..ed72cf4f2ba 100644
--- a/lisp/org/ox-org.el
+++ b/lisp/org/ox-org.el
@@ -1,6 +1,6 @@
 ;;; ox-org.el --- Org Back-End for Org Export Engine -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou@gmail.com>
 ;; Maintainer: Nicolas Goaziou <mail@nicolasgoaziou.fr>
diff --git a/lisp/org/ox-publish.el b/lisp/org/ox-publish.el
index a5999ef7bd7..f9c3877d7df 100644
--- a/lisp/org/ox-publish.el
+++ b/lisp/org/ox-publish.el
@@ -1,5 +1,5 @@
 ;;; ox-publish.el --- Publish Related Org Mode Files as a Website -*- 
lexical-binding: t; -*-
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: David O'Toole <dto@gnu.org>
 ;; Maintainer: Nicolas Goaziou <mail@nicolasgoaziou.fr>
diff --git a/lisp/org/ox-texinfo.el b/lisp/org/ox-texinfo.el
index 73ba349b1bb..8e3a0456299 100644
--- a/lisp/org/ox-texinfo.el
+++ b/lisp/org/ox-texinfo.el
@@ -1,6 +1,6 @@
 ;;; ox-texinfo.el --- Texinfo Back-End for Org Export Engine -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 ;; Author: Jonathan Leech-Pepin <jonathan.leechpepin at gmail dot com>
 ;; Maintainer: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/ox.el b/lisp/org/ox.el
index 737703f11d3..62fc8d583e4 100644
--- a/lisp/org/ox.el
+++ b/lisp/org/ox.el
@@ -1,6 +1,6 @@
 ;;; ox.el --- Export Framework for Org Mode          -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;; Maintainer: Nicolas Goaziou <mail@nicolasgoaziou.fr>
diff --git a/lisp/outline.el b/lisp/outline.el
index 53bfc4d556f..91f6040687b 100644
--- a/lisp/outline.el
+++ b/lisp/outline.el
@@ -1,6 +1,6 @@
 ;;; outline.el --- outline mode commands for Emacs  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1986-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1986-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: outlines
@@ -1868,6 +1868,7 @@ With a prefix argument, show headings up to that LEVEL."
 
 
 (defvar-keymap outline-navigation-repeat-map
+  :repeat t
   "C-b" #'outline-backward-same-level
   "b"   #'outline-backward-same-level
   "C-f" #'outline-forward-same-level
@@ -1879,14 +1880,8 @@ With a prefix argument, show headings up to that LEVEL."
   "C-u" #'outline-up-heading
   "u"   #'outline-up-heading)
 
-(dolist (command '(outline-backward-same-level
-                   outline-forward-same-level
-                   outline-next-visible-heading
-                   outline-previous-visible-heading
-                   outline-up-heading))
-  (put command 'repeat-map 'outline-navigation-repeat-map))
-
 (defvar-keymap outline-editing-repeat-map
+  :repeat t
   "C-v" #'outline-move-subtree-down
   "v"   #'outline-move-subtree-down
   "C-^" #'outline-move-subtree-up
@@ -1896,12 +1891,6 @@ With a prefix argument, show headings up to that LEVEL."
   "C-<" #'outline-promote
   "<"   #'outline-promote)
 
-(dolist (command '(outline-move-subtree-down
-                   outline-move-subtree-up
-                   outline-demote
-                   outline-promote))
-  (put command 'repeat-map 'outline-editing-repeat-map))
-
 
 (provide 'outline)
 (provide 'noutline)
diff --git a/lisp/paren.el b/lisp/paren.el
index eeda95809a5..b2a79624c0f 100644
--- a/lisp/paren.el
+++ b/lisp/paren.el
@@ -1,6 +1,6 @@
 ;;; paren.el --- highlight matching paren  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1993, 1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: rms@gnu.org
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/password-cache.el b/lisp/password-cache.el
index 7840ea0a8ad..b131a6eb63f 100644
--- a/lisp/password-cache.el
+++ b/lisp/password-cache.el
@@ -1,6 +1,6 @@
 ;;; password-cache.el --- Read passwords, possibly using a password cache.  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1999-2000, 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;; Created: 2003-12-21
diff --git a/lisp/pcmpl-cvs.el b/lisp/pcmpl-cvs.el
index 2fcd3d14a8f..0ad70e96b27 100644
--- a/lisp/pcmpl-cvs.el
+++ b/lisp/pcmpl-cvs.el
@@ -1,6 +1,6 @@
 ;;; pcmpl-cvs.el --- functions for dealing with cvs completions  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Package: pcomplete
diff --git a/lisp/pcmpl-git.el b/lisp/pcmpl-git.el
index 3584fa06732..698d2e747b5 100644
--- a/lisp/pcmpl-git.el
+++ b/lisp/pcmpl-git.el
@@ -1,6 +1,6 @@
 ;;; pcmpl-git.el --- Completions for Git -*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Package: pcomplete
 
diff --git a/lisp/pcmpl-gnu.el b/lisp/pcmpl-gnu.el
index cdfde5640a7..7d270ea789f 100644
--- a/lisp/pcmpl-gnu.el
+++ b/lisp/pcmpl-gnu.el
@@ -1,6 +1,6 @@
 ;;; pcmpl-gnu.el --- completions for GNU project tools -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Package: pcomplete
 
diff --git a/lisp/pcmpl-linux.el b/lisp/pcmpl-linux.el
index 023c655a2a8..082072d87d2 100644
--- a/lisp/pcmpl-linux.el
+++ b/lisp/pcmpl-linux.el
@@ -1,6 +1,6 @@
 ;;; pcmpl-linux.el --- functions for dealing with GNU/Linux completions  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Package: pcomplete
 
diff --git a/lisp/pcmpl-rpm.el b/lisp/pcmpl-rpm.el
index ebb6b72600c..f8f43a505ea 100644
--- a/lisp/pcmpl-rpm.el
+++ b/lisp/pcmpl-rpm.el
@@ -1,6 +1,6 @@
 ;;; pcmpl-rpm.el --- functions for dealing with rpm completions  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Package: pcomplete
 
diff --git a/lisp/pcmpl-unix.el b/lisp/pcmpl-unix.el
index 0c32f814d0e..1a77e3b248f 100644
--- a/lisp/pcmpl-unix.el
+++ b/lisp/pcmpl-unix.el
@@ -1,6 +1,6 @@
 ;;; pcmpl-unix.el --- standard UNIX completions  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Package: pcomplete
 
diff --git a/lisp/pcmpl-x.el b/lisp/pcmpl-x.el
index 1ede867c5fb..4ee7b4aa52b 100644
--- a/lisp/pcmpl-x.el
+++ b/lisp/pcmpl-x.el
@@ -1,6 +1,6 @@
 ;;; pcmpl-x.el --- completion for miscellaneous tools  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Leo Liu <sdl.web@gmail.com>
 ;; Keywords: processes, tools, convenience
diff --git a/lisp/pcomplete.el b/lisp/pcomplete.el
index 4e3a88bbda8..5bee5152463 100644
--- a/lisp/pcomplete.el
+++ b/lisp/pcomplete.el
@@ -1,6 +1,6 @@
 ;;; pcomplete.el --- programmable completion -*- lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Keywords: processes abbrev
@@ -645,13 +645,26 @@ parts of the list.
 
 The OFFSET argument is added to/taken away from the index that will be
 used.  This is really only useful with `first' and `last', for
-accessing absolute argument positions."
-  (nth (+ (pcase index
-          ('first 0)
-          ('last  pcomplete-last)
-          (_      (- pcomplete-index (or index 0))))
-         (or offset 0))
-       pcomplete-args))
+accessing absolute argument positions.
+
+When the argument has been transformed into something that is not
+a string by `pcomplete-parse-arguments-function', the text
+representation of the argument, namely what the user actually
+typed in, is returned, and the value of the argument is stored in
+the pcomplete-arg-value text property of that string."
+  (let ((arg
+         (nth (+ (pcase index
+                  ('first 0)
+                  ('last  pcomplete-last)
+                  (_      (- pcomplete-index (or index 0))))
+                (or offset 0))
+              pcomplete-args)))
+    (if (stringp arg)
+        arg
+      (propertize
+       (buffer-substring (pcomplete-begin index offset)
+                         (pcomplete-begin (1- (or index 0)) offset))
+       'pcomplete-arg-value arg))))
 
 (defun pcomplete-begin (&optional index offset)
   "Return the beginning position of the INDEXth argument.
diff --git a/lisp/pgtk-dnd.el b/lisp/pgtk-dnd.el
index b37bf9ba60a..f2998fd1e67 100644
--- a/lisp/pgtk-dnd.el
+++ b/lisp/pgtk-dnd.el
@@ -1,6 +1,6 @@
 ;;; pgtk-dnd.el --- drag and drop support for GDK -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: window, drag, drop
diff --git a/lisp/pixel-scroll.el b/lisp/pixel-scroll.el
index 10da9cb9abd..487144144f5 100644
--- a/lisp/pixel-scroll.el
+++ b/lisp/pixel-scroll.el
@@ -1,6 +1,6 @@
 ;;; pixel-scroll.el --- Scroll a line smoothly  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 ;; Author: Tak Kunihiro <tkk@misasa.okayama-u.ac.jp>
 ;; Keywords: mouse
 ;; Package: emacs
diff --git a/lisp/play/5x5.el b/lisp/play/5x5.el
index fb944f4d76a..772c252512d 100644
--- a/lisp/play/5x5.el
+++ b/lisp/play/5x5.el
@@ -1,6 +1,6 @@
 ;;; 5x5.el --- simple little puzzle game  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Pearson <davep@davep.org>
 ;; Created: 1998-10-03
diff --git a/lisp/play/animate.el b/lisp/play/animate.el
index 4f4c936cd67..01e7a91f03c 100644
--- a/lisp/play/animate.el
+++ b/lisp/play/animate.el
@@ -1,6 +1,6 @@
 ;;; animate.el --- make text dance  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: Richard Stallman <rms@gnu.org>
 ;; Keywords: games
diff --git a/lisp/play/blackbox.el b/lisp/play/blackbox.el
index 8db24c91276..dff585a5983 100644
--- a/lisp/play/blackbox.el
+++ b/lisp/play/blackbox.el
@@ -1,6 +1,6 @@
 ;;; blackbox.el --- blackbox game in Emacs Lisp  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1987, 1992, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1985-1987, 1992, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: F. Thomas May <uw-nsr!uw-warp!tom@beaver.cs.washington.edu>
diff --git a/lisp/play/bubbles.el b/lisp/play/bubbles.el
index 808fc82d19a..e68778d28b2 100644
--- a/lisp/play/bubbles.el
+++ b/lisp/play/bubbles.el
@@ -1,6 +1,6 @@
 ;;; bubbles.el --- Puzzle game for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; URL:         http://ulf.epplejasper.de/
diff --git a/lisp/play/cookie1.el b/lisp/play/cookie1.el
index 7ede8e358aa..559b74084e1 100644
--- a/lisp/play/cookie1.el
+++ b/lisp/play/cookie1.el
@@ -1,6 +1,6 @@
 ;;; cookie1.el --- retrieve random phrases from fortune cookie files  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/play/decipher.el b/lisp/play/decipher.el
index c9bd8ea9fe1..88300c1d818 100644
--- a/lisp/play/decipher.el
+++ b/lisp/play/decipher.el
@@ -1,6 +1,6 @@
 ;;; decipher.el --- cryptanalyze monoalphabetic substitution ciphers  -*- 
lexical-binding: t; -*-
 ;;
-;; Copyright (C) 1995-1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 2001-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Christopher J. Madsen <chris_madsen@geocities.com>
 ;; Keywords: games
diff --git a/lisp/play/dissociate.el b/lisp/play/dissociate.el
index 1606e6ae9fd..0c655281192 100644
--- a/lisp/play/dissociate.el
+++ b/lisp/play/dissociate.el
@@ -1,6 +1,6 @@
 ;;; dissociate.el --- scramble text amusingly for Emacs  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: games
diff --git a/lisp/play/doctor.el b/lisp/play/doctor.el
index f87068e113c..dcf36c5c330 100644
--- a/lisp/play/doctor.el
+++ b/lisp/play/doctor.el
@@ -1,6 +1,6 @@
 ;;; doctor.el --- psychological help for frustrated users  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: games
diff --git a/lisp/play/dunnet.el b/lisp/play/dunnet.el
index 94392901be1..837508779e7 100644
--- a/lisp/play/dunnet.el
+++ b/lisp/play/dunnet.el
@@ -1,6 +1,6 @@
 ;;; dunnet.el --- text adventure for Emacs -*- lexical-binding: t -*-
 
-;; Copyright (C) 1992-1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Ron Schnell <ronnie@driver-aces.com>
 ;; Created: 25 Jul 1992
diff --git a/lisp/play/fortune.el b/lisp/play/fortune.el
index 0973f2bc5f2..36551321a56 100644
--- a/lisp/play/fortune.el
+++ b/lisp/play/fortune.el
@@ -1,6 +1,6 @@
 ;;; fortune.el --- use fortune to create signatures  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Holger Schauer <Holger.Schauer@gmx.de>
 ;; Keywords: games utils mail
diff --git a/lisp/play/gamegrid.el b/lisp/play/gamegrid.el
index 4e4982e7b0d..54df983740e 100644
--- a/lisp/play/gamegrid.el
+++ b/lisp/play/gamegrid.el
@@ -1,6 +1,6 @@
 ;;; gamegrid.el --- library for implementing grid-based games on Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Glynn Clements <glynn@sensei.co.uk>
 ;; Old-Version: 1.02
diff --git a/lisp/play/gametree.el b/lisp/play/gametree.el
index 6a0dc6a623c..971d8ea70ca 100644
--- a/lisp/play/gametree.el
+++ b/lisp/play/gametree.el
@@ -1,6 +1,6 @@
 ;;; gametree.el --- manage game analysis trees in Emacs  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 1997, 1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Ian T Zimmerman <itz@rahul.net>
 ;; Created: Wed Dec 10 07:41:46 PST 1997
diff --git a/lisp/play/gomoku.el b/lisp/play/gomoku.el
index fee242be981..7d57b15673a 100644
--- a/lisp/play/gomoku.el
+++ b/lisp/play/gomoku.el
@@ -1,6 +1,6 @@
 ;;; gomoku.el --- Gomoku game between you and Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1988, 1994, 1996, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1988, 1994, 1996, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Philippe Schnoebelen <phs@lsv.ens-cachan.fr>
diff --git a/lisp/play/handwrite.el b/lisp/play/handwrite.el
index 68a82f5a9ef..735874e8da6 100644
--- a/lisp/play/handwrite.el
+++ b/lisp/play/handwrite.el
@@ -1,6 +1,6 @@
 ;;; handwrite.el --- turns your emacs buffer into a handwritten document  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Danny Roozendaal (was: <danny@tvs.kun.nl>)
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/play/life.el b/lisp/play/life.el
index 8c66c0e8a9a..2796a92d4dd 100644
--- a/lisp/play/life.el
+++ b/lisp/play/life.el
@@ -1,6 +1,6 @@
 ;;; life.el --- John Horton Conway's Game of Life  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1988, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Kyle Jones <kyleuunet.uu.net>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/play/morse.el b/lisp/play/morse.el
index 5b7d343a79e..4b2f2cfb4a8 100644
--- a/lisp/play/morse.el
+++ b/lisp/play/morse.el
@@ -1,6 +1,6 @@
 ;;; morse.el --- convert text to morse code and back  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Rick Farnbach <rick_farnbach@MENTORG.COM>
 ;; Keywords: games
diff --git a/lisp/play/mpuz.el b/lisp/play/mpuz.el
index 177b6eecf01..f9811f91172 100644
--- a/lisp/play/mpuz.el
+++ b/lisp/play/mpuz.el
@@ -1,6 +1,6 @@
 ;;; mpuz.el --- multiplication puzzle for GNU Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1990, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Philippe Schnoebelen <phs@lsv.ens-cachan.fr>
 ;; Overhauled: Daniel Pfeiffer <occitan@esperanto.org>
diff --git a/lisp/play/pong.el b/lisp/play/pong.el
index 79beeb72e2b..bb9611f0b48 100644
--- a/lisp/play/pong.el
+++ b/lisp/play/pong.el
@@ -1,6 +1,6 @@
 ;;; pong.el --- classical implementation of pong  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Benjamin Drieu <bdrieu@april.org>
 ;; Keywords: games
diff --git a/lisp/play/snake.el b/lisp/play/snake.el
index d8074edfc4c..17a90817e72 100644
--- a/lisp/play/snake.el
+++ b/lisp/play/snake.el
@@ -1,6 +1,6 @@
 ;;; snake.el --- implementation of Snake for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Glynn Clements <glynn@sensei.co.uk>
 ;; Created: 1997-09-10
diff --git a/lisp/play/solitaire.el b/lisp/play/solitaire.el
index 3c6d85b4094..f5788593794 100644
--- a/lisp/play/solitaire.el
+++ b/lisp/play/solitaire.el
@@ -1,6 +1,6 @@
 ;;; solitaire.el --- game of solitaire in Emacs Lisp  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Jan Schormann <Jan.Schormann@rechen-gilde.de>
 ;; Created: Fri afternoon, Jun  3,  1994
diff --git a/lisp/play/spook.el b/lisp/play/spook.el
index ccff2e75b0a..3fa8444b167 100644
--- a/lisp/play/spook.el
+++ b/lisp/play/spook.el
@@ -1,6 +1,6 @@
 ;;; spook.el --- spook phrase utility for overloading the NSA line eater  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1988, 1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: games
diff --git a/lisp/play/tetris.el b/lisp/play/tetris.el
index a6bfea81ee1..41276f1dbca 100644
--- a/lisp/play/tetris.el
+++ b/lisp/play/tetris.el
@@ -1,6 +1,6 @@
 ;;; tetris.el --- implementation of Tetris for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Glynn Clements <glynn@sensei.co.uk>
 ;; Old-Version: 2.01
diff --git a/lisp/play/zone.el b/lisp/play/zone.el
index 6e27ba51653..235c6f4e7b5 100644
--- a/lisp/play/zone.el
+++ b/lisp/play/zone.el
@@ -1,6 +1,6 @@
 ;;; zone.el --- idle display hacks  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Victor Zandy <zandy@cs.wisc.edu>
 ;; Maintainer: Thien-Thi Nguyen <ttn@gnu.org>
diff --git a/lisp/plstore.el b/lisp/plstore.el
index de3f828016a..0276a752a0f 100644
--- a/lisp/plstore.el
+++ b/lisp/plstore.el
@@ -1,6 +1,6 @@
 ;;; plstore.el --- secure plist store -*- lexical-binding: t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@gnu.org>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/printing.el b/lisp/printing.el
index 767648df4d5..4a6d14260a0 100644
--- a/lisp/printing.el
+++ b/lisp/printing.el
@@ -1,6 +1,6 @@
 ;;; printing.el --- printing utilities  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2000-2001, 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2001, 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: wp, print, PostScript
diff --git a/lisp/proced.el b/lisp/proced.el
index c09ee18a8be..839b36b528f 100644
--- a/lisp/proced.el
+++ b/lisp/proced.el
@@ -1,6 +1,6 @@
 ;;; proced.el --- operate on system processes like dired  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Roland Winkler <winkler@gnu.org>
 ;; Keywords: Processes, Unix
diff --git a/lisp/profiler.el b/lisp/profiler.el
index e66b1ff42ad..634cdaf09ea 100644
--- a/lisp/profiler.el
+++ b/lisp/profiler.el
@@ -1,6 +1,6 @@
 ;;; profiler.el --- UI and helper functions for Emacs's native profiler -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Tomohiro Matsuyama <tomo@cx4a.org>
 ;; Keywords: lisp
diff --git a/lisp/progmodes/antlr-mode.el b/lisp/progmodes/antlr-mode.el
index efee400681a..7574ef86a6e 100644
--- a/lisp/progmodes/antlr-mode.el
+++ b/lisp/progmodes/antlr-mode.el
@@ -1,6 +1,6 @@
 ;;; antlr-mode.el --- major mode for ANTLR grammar files  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Christoph Wedler <Christoph.Wedler@sap.com>
 ;; Keywords: languages, ANTLR, code generator
diff --git a/lisp/progmodes/asm-mode.el b/lisp/progmodes/asm-mode.el
index 2a63c100027..2a5105fe164 100644
--- a/lisp/progmodes/asm-mode.el
+++ b/lisp/progmodes/asm-mode.el
@@ -1,6 +1,6 @@
 ;;; asm-mode.el --- mode for editing assembler code  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1991, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/progmodes/autoconf.el b/lisp/progmodes/autoconf.el
index fd8bf1f7ec8..61e764c2bdc 100644
--- a/lisp/progmodes/autoconf.el
+++ b/lisp/progmodes/autoconf.el
@@ -1,6 +1,6 @@
 ;;; autoconf.el --- mode for editing Autoconf configure.ac files  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: languages
diff --git a/lisp/progmodes/bat-mode.el b/lisp/progmodes/bat-mode.el
index 5e833047af1..9eab9fd41a6 100644
--- a/lisp/progmodes/bat-mode.el
+++ b/lisp/progmodes/bat-mode.el
@@ -1,6 +1,6 @@
 ;;; bat-mode.el --- Major mode for editing DOS/Windows scripts  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2003, 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Arni Magnusson <arnima@hafro.is>
 ;; Keywords: languages
diff --git a/lisp/progmodes/bug-reference.el b/lisp/progmodes/bug-reference.el
index 5143af7dded..d7dd3ed1c9a 100644
--- a/lisp/progmodes/bug-reference.el
+++ b/lisp/progmodes/bug-reference.el
@@ -1,6 +1,6 @@
 ;;; bug-reference.el --- buttonize bug references  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <tromey@redhat.com>
 ;; Created: 21 Mar 2007
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
index cf941236f82..8d1c1103abb 100644
--- a/lisp/progmodes/c-ts-mode.el
+++ b/lisp/progmodes/c-ts-mode.el
@@ -1,6 +1,6 @@
 ;;; c-ts-mode.el --- tree-sitter support for C and C++  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author     : Theodor Thornhill <theo@thornhill.no>
 ;; Maintainer : Theodor Thornhill <theo@thornhill.no>
@@ -39,6 +39,8 @@
 (declare-function treesit-node-child-by-field-name "treesit.c")
 (declare-function treesit-node-type "treesit.c")
 
+;;; Custom variables
+
 (defcustom c-ts-mode-indent-offset 2
   "Number of spaces for each indentation step in `c-ts-mode'."
   :version "29.1"
@@ -61,6 +63,8 @@ follows the form of `treesit-simple-indent-rules'."
                  (function :tag "A function for user customized style" ignore))
   :group 'c)
 
+;;; Syntax table
+
 (defvar c-ts-mode--syntax-table
   (let ((table (make-syntax-table)))
     ;; Taken from the cc-langs version
@@ -83,13 +87,29 @@ follows the form of `treesit-simple-indent-rules'."
     table)
   "Syntax table for `c-ts-mode'.")
 
-(defvar c++-ts-mode--syntax-table
-  (let ((table (make-syntax-table c-ts-mode--syntax-table)))
-    ;; Template delimiters.
-    (modify-syntax-entry ?<  "("     table)
-    (modify-syntax-entry ?>  ")"     table)
-    table)
-  "Syntax table for `c++-ts-mode'.")
+(defun c-ts-mode--syntax-propertize (beg end)
+  "Apply syntax text property to template delimiters between BEG and END.
+
+< and > are usually punctuation, e.g., in ->.  But when used for
+templates, they should be considered pairs.
+
+This function checks for < and > in the changed RANGES and apply
+appropriate text property to alter the syntax of template
+delimiters < and >'s."
+  (goto-char beg)
+  (while (re-search-forward (rx (or "<" ">")) end t)
+    (pcase (treesit-node-type
+            (treesit-node-parent
+             (treesit-node-at (match-beginning 0))))
+      ("template_argument_list"
+       (put-text-property (match-beginning 0)
+                          (match-end 0)
+                          'syntax-table
+                          (pcase (char-before)
+                            (?< '(4 . ?>))
+                            (?> '(5 . ?<))))))))
+
+;;; Indent
 
 (defun c-ts-mode--indent-styles (mode)
   "Indent rules supported by `c-ts-mode'.
@@ -98,11 +118,13 @@ MODE is either `c' or `cpp'."
          `(((parent-is "translation_unit") parent-bol 0)
            ((node-is ")") parent 1)
            ((node-is "]") parent-bol 0)
-           ((node-is "}") (and parent parent-bol) 0)
+           ((node-is "}") c-ts-mode--bracket-children-anchor 0)
            ((node-is "else") parent-bol 0)
            ((node-is "case") parent-bol 0)
            ((node-is "preproc_arg") no-indent)
-           ((and (parent-is "comment") comment-end) comment-start -1)
+           ((and (parent-is "comment") c-ts-mode--looking-at-star)
+            c-ts-mode--comment-start-after-first-star -1)
+           ((parent-is "comment") prev-adaptive-prefix 0)
            ((node-is "labeled_statement") parent-bol 0)
            ((parent-is "labeled_statement") parent-bol c-ts-mode-indent-offset)
            ((match "preproc_ifdef" "compound_statement") point-min 0)
@@ -111,7 +133,8 @@ MODE is either `c' or `cpp'."
            ((match "#endif" "preproc_if") point-min 0)
            ((match "preproc_function_def" "compound_statement") point-min 0)
            ((match "preproc_call" "compound_statement") point-min 0)
-           ((parent-is "compound_statement") (and parent parent-bol) 
c-ts-mode-indent-offset)
+           ((parent-is "compound_statement")
+            c-ts-mode--bracket-children-anchor c-ts-mode-indent-offset)
            ((parent-is "function_definition") parent-bol 0)
            ((parent-is "conditional_expression") first-sibling 0)
            ((parent-is "assignment_expression") parent-bol 
c-ts-mode-indent-offset)
@@ -167,6 +190,39 @@ MODE is either `c' or `cpp'."
              ('linux (alist-get 'linux (c-ts-mode--indent-styles mode)))))))
     `((,mode ,@style))))
 
+(defun c-ts-mode--bracket-children-anchor (_n parent &rest _)
+  "This anchor is used for children of a compound_statement.
+So anything inside a {} block.  PARENT should be the
+compound_statement.  This anchor looks at the {, if itson its own
+line, anchor at it, if it has stuff before it, anchor at the
+beginning of grandparent."
+  (save-excursion
+    (goto-char (treesit-node-start parent))
+    (let ((bol (line-beginning-position)))
+      (skip-chars-backward " \t")
+      (treesit-node-start
+       (if (< bol (point))
+           (treesit-node-parent parent)
+         parent)))))
+
+(defun c-ts-mode--looking-at-star (&rest _)
+  "A tree-sitter simple indent matcher.
+Matches if there is a \"*\" after point (ignoring whitespace in
+between)."
+  (looking-at (rx (* (syntax whitespace)) "*")))
+
+(defun c-ts-mode--comment-start-after-first-star (_n parent &rest _)
+  "A tree-sitter simple indent anchor.
+Finds the \"/*\" and returns the point after the \"*\".
+Assumes PARENT is a comment node."
+  (save-excursion
+    (goto-char (treesit-node-start parent))
+    (if (looking-at (rx "/*"))
+        (match-end 0)
+      (point))))
+
+;;; Font-lock
+
 (defvar c-ts-mode--preproc-keywords
   '("#define" "#if" "#ifdef" "#ifndef"
     "#else" "#elif" "#endif" "#include")
@@ -361,28 +417,34 @@ MODE is either `c' or `cpp'."
        @c-ts-mode--fontify-defun)
       (:match "^DEFUN$" @fn)))))
 
-(defun c-ts-mode--fontify-declarator (node override start end &rest args)
-  "Fontify a declarator (whatever under the \"declarator\" field).
-For NODE, OVERRIDE, START, END, and ARGS, see
-`treesit-font-lock-rules'."
+;;; Font-lock helpers
+
+(defun c-ts-mode--declarator-identifier (node)
+  "Return the identifier of the declarator node NODE."
   (pcase (treesit-node-type node)
+    ;; Recurse.
     ((or "attributed_declarator" "parenthesized_declarator")
-     (apply #'c-ts-mode--fontify-declarator
-            (treesit-node-child node 0 t) override start end args))
-    ("pointer_declarator"
-     (apply #'c-ts-mode--fontify-declarator
-            (treesit-node-child node -1) override start end args))
+     (c-ts-mode--declarator-identifier (treesit-node-child node 0 t)))
+    ((or "pointer_declarator" "reference_declarator")
+     (c-ts-mode--declarator-identifier (treesit-node-child node -1)))
     ((or "function_declarator" "array_declarator" "init_declarator")
-     (apply #'c-ts-mode--fontify-declarator
-            (treesit-node-child-by-field-name node "declarator")
-            override start end args))
+     (c-ts-mode--declarator-identifier
+      (treesit-node-child-by-field-name node "declarator")))
+    ;; Terminal case.
     ((or "identifier" "field_identifier")
-     (treesit-fontify-with-override
-      (treesit-node-start node) (treesit-node-end node)
-      (pcase (treesit-node-type (treesit-node-parent node))
-        ("function_declarator" 'font-lock-function-name-face)
-        (_ 'font-lock-variable-name-face))
-      override start end))))
+     node)))
+
+(defun c-ts-mode--fontify-declarator (node override start end &rest _args)
+  "Fontify a declarator (whatever under the \"declarator\" field).
+For NODE, OVERRIDE, START, END, and ARGS, see
+`treesit-font-lock-rules'."
+  (let* ((identifier (c-ts-mode--declarator-identifier node))
+         (face (pcase (treesit-node-type (treesit-node-parent identifier))
+                 ("function_declarator" 'font-lock-function-name-face)
+                 (_ 'font-lock-variable-name-face))))
+    (treesit-fontify-with-override
+     (treesit-node-start identifier) (treesit-node-end identifier)
+     face override start end)))
 
 (defun c-ts-mode--fontify-variable (node override start end &rest _)
   "Fontify an identifier node if it is a variable.
@@ -453,94 +515,48 @@ For NODE, OVERRIDE, START, and END, see
       (t 'font-lock-warning-face))
      override start end)))
 
-(defun c-ts-mode--imenu-1 (node)
-  "Helper for `c-ts-mode--imenu'.
-Find string representation for NODE and set marker, then recurse
-the subtrees."
-  (let* ((ts-node (car node))
-         (subtrees (mapcan #'c-ts-mode--imenu-1 (cdr node)))
-         (name (when ts-node
-                 (treesit-node-text
-                  (pcase (treesit-node-type ts-node)
-                    ("function_definition"
-                     (treesit-node-child-by-field-name
-                      (treesit-node-child-by-field-name
-                       ts-node "declarator")
-                      "declarator"))
-                    ("declaration"
-                     (let ((child (treesit-node-child ts-node -1 t)))
-                       (pcase (treesit-node-type child)
-                         ("identifier" child)
-                         (_ (treesit-node-child-by-field-name
-                             child "declarator")))))
-                    ("struct_specifier"
-                     (treesit-node-child-by-field-name
-                      ts-node "name"))))))
-         (marker (when ts-node
-                   (set-marker (make-marker)
-                               (treesit-node-start ts-node)))))
-    (cond
-     ;; A struct_specifier could be inside a parameter list, another
-     ;; struct definition, a variable declaration, a function
-     ;; declaration.  In those cases we don't include it.
-     ((string-match-p
-       (rx (or "parameter_declaration" "field_declaration"
-               "declaration" "function_definition"))
-       (or (treesit-node-type (treesit-node-parent ts-node))
-           ""))
-      nil)
-     ;; Ignore function local variable declarations.
-     ((and (equal (treesit-node-type ts-node) "declaration")
-           (not (equal (treesit-node-type (treesit-node-parent ts-node))
-                       "translation_unit")))
-      nil)
-     ((or (null ts-node) (null name)) subtrees)
-     (subtrees
-      `((,name ,(cons name marker) ,@subtrees)))
-     (t
-      `((,name . ,marker))))))
-
-(defun c-ts-mode--imenu ()
-  "Return Imenu alist for the current buffer."
-  (let* ((node (treesit-buffer-root-node))
-         (func-tree (treesit-induce-sparse-tree
-                     node "^function_definition$" nil 1000))
-         (var-tree (treesit-induce-sparse-tree
-                    node "^declaration$" nil 1000))
-         (struct-tree (treesit-induce-sparse-tree
-                       node "^struct_specifier$" nil 1000))
-         (func-index (c-ts-mode--imenu-1 func-tree))
-         (var-index (c-ts-mode--imenu-1 var-tree))
-         (struct-index (c-ts-mode--imenu-1 struct-tree)))
-    (append
-     (when struct-index `(("Struct" . ,struct-index)))
-     (when var-index `(("Variable" . ,var-index)))
-     (when func-index `(("Function" . ,func-index))))))
-
-(defun c-ts-mode--end-of-defun ()
-  "`end-of-defun-function' of `c-ts-mode'."
-  ;; A struct/enum/union_specifier node doesn't include the ; at the
-  ;; end, so we manually skip it.
-  (treesit-end-of-defun)
-  (when (looking-at (rx (* " ") ";"))
-    (goto-char (match-end 0))
-    ;; This part is copied from `end-of-defun'.
-    (unless (bolp)
-      (skip-chars-forward " \t")
-      (if (looking-at "\\s<\\|\n")
-         (forward-line 1)))))
+;;; Imenu
+
+(defun c-ts-mode--defun-name (node)
+  "Return the name of the defun NODE.
+Return nil if NODE is not a defun node or doesn't have a name."
+  (treesit-node-text
+   (pcase (treesit-node-type node)
+     ((or "function_definition" "declaration")
+      (c-ts-mode--declarator-identifier
+       (treesit-node-child-by-field-name node "declarator")))
+     ((or "struct_specifier" "enum_specifier"
+          "union_specifier" "class_specifier")
+      (treesit-node-child-by-field-name node "name")))
+   t))
+
+;;; Defun navigation
 
 (defun c-ts-mode--defun-valid-p (node)
-  (if (string-match-p
-       (rx (or "struct_specifier"
-               "enum_specifier"
-               "union_specifier"))
-       (treesit-node-type node))
-      (null
-       (treesit-node-top-level
-        node (rx (or "function_definition"
-                     "type_definition"))))
-    t))
+  "Return non-nil if NODE is a valid defun node.
+Ie, NODE is not nested."
+  (not (or (and (member (treesit-node-type node)
+                        '("struct_specifier"
+                          "enum_specifier"
+                          "union_specifier"
+                          "declaration"))
+                ;; If NODE's type is one of the above, make sure it is
+                ;; top-level.
+                (treesit-node-top-level
+                 node (rx (or "function_definition"
+                              "type_definition"
+                              "struct_specifier"
+                              "enum_specifier"
+                              "union_specifier"
+                              "declaration"))))
+
+           (and (equal (treesit-node-type node) "declaration")
+                ;; If NODE is a declaration, make sure it is not a
+                ;; function declaration.
+                (equal (treesit-node-type
+                        (treesit-node-child-by-field-name
+                         node "declarator"))
+                       "function_declarator")))))
 
 (defun c-ts-mode--defun-skipper ()
   "Custom defun skipper for `c-ts-mode' and friends.
@@ -556,15 +572,146 @@ the semicolon.  This function skips the semicolon."
 
 `treesit-defun-type-regexp' defines what constructs to indent."
   (interactive "*")
-  (let ((orig-point (point-marker)))
-    ;; If `treesit-beginning-of-defun' returns nil, we are not in a
-    ;; defun, so don't indent anything.
-    (when (treesit-beginning-of-defun)
-      (let ((start (point)))
-        (treesit-end-of-defun)
-        (indent-region start (point))))
+  (when-let ((orig-point (point-marker))
+             (node (treesit-defun-at-point)))
+    (indent-region (treesit-node-start node)
+                   (treesit-node-end node))
     (goto-char orig-point)))
 
+;;; Filling
+
+(defun c-ts-mode--fill-paragraph (&optional arg)
+  "Fillling function for `c-ts-mode'.
+ARG is passed to `fill-paragraph'."
+  (interactive "*P")
+  (save-restriction
+    (widen)
+    (let* ((node (treesit-node-at (point)))
+           (start (treesit-node-start node))
+           (end (treesit-node-end node))
+           ;; Bind to nil to avoid infinite recursion.
+           (fill-paragraph-function nil)
+           (orig-point (point-marker))
+           (start-marker nil)
+           (end-marker nil)
+           (end-len 0))
+      ;; These covers C/C++, Java, JavaScript, TypeScript, Rust, C#.
+      (when (member (treesit-node-type node)
+                    '("comment" "line_comment" "block_comment"))
+        ;; We mask "/*" and the space before "*/" like
+        ;; `c-fill-paragraph' does.
+        (atomic-change-group
+          ;; Mask "/*".
+          (goto-char start)
+          (when (looking-at (rx (* (syntax whitespace))
+                                (group "/") "*"))
+            (goto-char (match-beginning 1))
+            (setq start-marker (point-marker))
+            (replace-match " " nil nil nil 1))
+          ;; Include whitespaces before /*.
+          (goto-char start)
+          (beginning-of-line)
+          (setq start (point))
+          ;; Mask spaces before "*/" if it is attached at the end
+          ;; of a sentence rather than on its own line.
+          (goto-char end)
+          (when (looking-back (rx (not (syntax whitespace))
+                                  (group (+ (syntax whitespace)))
+                                  "*/")
+                              (line-beginning-position))
+            (goto-char (match-beginning 1))
+            (setq end-marker (point-marker))
+            (setq end-len (- (match-end 1) (match-beginning 1)))
+            (replace-match (make-string end-len ?x)
+                           nil nil nil 1))
+          ;; If "*/" is on its own line, don't included it in the
+          ;; filling region.
+          (when (not end-marker)
+            (goto-char end)
+            (when (looking-back (rx "*/") 2)
+              (backward-char 2)
+              (skip-syntax-backward "-")
+              (setq end (point))))
+          ;; Let `fill-paragraph' do its thing.
+          (goto-char orig-point)
+          (narrow-to-region start end)
+          (funcall #'fill-paragraph arg)
+          ;; Unmask.
+          (when start-marker
+            (goto-char start-marker)
+            (delete-char 1)
+            (insert "/"))
+          (when end-marker
+            (goto-char end-marker)
+            (delete-region (point) (+ end-len (point)))
+            (insert (make-string end-len ?\s))))
+        (goto-char orig-point))
+      ;; Return t so `fill-paragraph' doesn't attempt to fill by
+      ;; itself.
+      t)))
+
+(defun c-ts-mode-comment-setup ()
+  "Set up local variables for C-like comment.
+
+Set up:
+ - `comment-start'
+ - `comment-end'
+ - `comment-start-skip'
+ - `comment-end-skip'
+ - `adaptive-fill-mode'
+ - `adaptive-fill-first-line-regexp'
+ - `paragraph-start'
+ - `paragraph-separate'
+ - `fill-paragraph-function'"
+  (setq-local comment-start "// ")
+  (setq-local comment-end "")
+  (setq-local comment-start-skip (rx (or (seq "/" (+ "/"))
+                                         (seq "/" (+ "*")))
+                                     (* (syntax whitespace))))
+  (setq-local comment-end-skip
+              (rx (* (syntax whitespace))
+                  (group (or (syntax comment-end)
+                             (seq (+ "*") "/")))))
+  (setq-local adaptive-fill-mode t)
+  ;; This matches (1) empty spaces (the default), (2) "//", (3) "*",
+  ;; but do not match "/*", because we don't want to use "/*" as
+  ;; prefix when filling.  (Actually, it doesn't matter, because
+  ;; `comment-start-skip' matches "/*" which will cause
+  ;; `fill-context-prefix' to use "/*" as a prefix for filling, that's
+  ;; why we mask the "/*" in `c-ts-mode--fill-paragraph'.)
+  (setq-local adaptive-fill-regexp
+              (concat (rx (* (syntax whitespace))
+                          (group (or (seq "/" (+ "/")) (* "*"))))
+                      adaptive-fill-regexp))
+  ;; Note the missing * comparing to `adaptive-fill-regexp'.  The
+  ;; reason for its absence is a bit convoluted to explain.  Suffice
+  ;; to say that without it, filling a single line paragraph that
+  ;; starts with /* doesn't insert * at the beginning of each
+  ;; following line, and filling a multi-line paragraph whose first
+  ;; two lines start with * does insert * at the beginning of each
+  ;; following line.  If you know how does adaptive filling works, you
+  ;; know what I mean.
+  (setq-local adaptive-fill-first-line-regexp
+              (rx bos
+                  (seq (* (syntax whitespace))
+                       (group (seq "/" (+ "/")))
+                       (* (syntax whitespace)))
+                  eos))
+  ;; Same as `adaptive-fill-regexp'.
+  (setq-local paragraph-start
+              (rx (or (seq (* (syntax whitespace))
+                           (group (or (seq "/" (+ "/")) (* "*")))
+                           (* (syntax whitespace))
+                           ;; Add this eol so that in
+                           ;; `fill-context-prefix', `paragraph-start'
+                           ;; doesn't match the prefix.
+                           eol)
+                      "\f")))
+  (setq-local paragraph-separate paragraph-start)
+  (setq-local fill-paragraph-function #'c-ts-mode--fill-paragraph))
+
+;;; Modes
+
 (defvar-keymap c-ts-mode-map
   :doc "Keymap for the C language with tree-sitter"
   :parent prog-mode-map
@@ -587,6 +734,7 @@ the semicolon.  This function skips the semicolon."
                                   "class_specifier"))
                     #'c-ts-mode--defun-valid-p))
   (setq-local treesit-defun-skipper #'c-ts-mode--defun-skipper)
+  (setq-local treesit-defun-name-function #'c-ts-mode--defun-name)
 
   ;; Nodes like struct/enum/union_specifier can appear in
   ;; function_definitions, so we need to find the top-level node.
@@ -596,13 +744,25 @@ the semicolon.  This function skips the semicolon."
   (when (eq c-ts-mode-indent-style 'linux)
     (setq-local indent-tabs-mode t))
 
+  ;; Comment
+  (c-ts-mode-comment-setup)
+
   ;; Electric
   (setq-local electric-indent-chars
               (append "{}():;," electric-indent-chars))
 
   ;; Imenu.
-  (setq-local imenu-create-index-function #'c-ts-mode--imenu)
-  (setq-local which-func-functions nil)
+  (setq-local treesit-simple-imenu-settings
+              (let ((pred #'c-ts-mode--defun-valid-p))
+                `(("Struct" ,(rx bos (or "struct" "enum" "union")
+                                 "_specifier" eos)
+                   ,pred nil)
+                  ("Variable" ,(rx bos "declaration" eos) ,pred nil)
+                  ("Function" "\\`function_definition\\'" ,pred nil)
+                  ("Class" ,(rx bos (or "class_specifier"
+                                        "function_definition")
+                                eos)
+                   ,pred nil))))
 
   (setq-local treesit-font-lock-feature-list
               '(( comment definition)
@@ -623,13 +783,6 @@ the semicolon.  This function skips the semicolon."
   ;; Comments.
   (setq-local comment-start "/* ")
   (setq-local comment-end " */")
-  (setq-local comment-start-skip (rx (or (seq "/" (+ "/"))
-                                         (seq "/" (+ "*")))
-                                     (* (syntax whitespace))))
-  (setq-local comment-end-skip
-              (rx (* (syntax whitespace))
-                  (group (or (syntax comment-end)
-                             (seq (+ "*") "/")))))
 
   (setq-local treesit-simple-indent-rules
               (c-ts-mode--set-indent-style 'c))
@@ -637,37 +790,23 @@ the semicolon.  This function skips the semicolon."
   ;; Font-lock.
   (setq-local treesit-font-lock-settings (c-ts-mode--font-lock-settings 'c))
 
-  (treesit-major-mode-setup)
-
-  ;; Override default value of end-of-defun-function set by
-  ;; `treesit-major-mode-setup'.
-  (setq-local end-of-defun-function #'c-ts-mode--end-of-defun))
+  (treesit-major-mode-setup))
 
 ;;;###autoload
 (define-derived-mode c++-ts-mode c-ts-base-mode "C++"
   "Major mode for editing C++, powered by tree-sitter."
   :group 'c++
-  :syntax-table c++-ts-mode--syntax-table
 
   (unless (treesit-ready-p 'cpp)
     (error "Tree-sitter for C++ isn't available"))
 
-  ;; Comments.
-  (setq-local comment-start "// ")
-  (setq-local comment-end "")
-  (setq-local comment-start-skip (rx (or (seq "/" (+ "/"))
-                                         (seq "/" (+ "*")))
-                                     (* (syntax whitespace))))
-  (setq-local comment-end-skip
-              (rx (* (syntax whitespace))
-                  (group (or (syntax comment-end)
-                             (seq (+ "*") "/")))))
-
   (setq-local treesit-text-type-regexp
               (regexp-opt '("comment"
                             "raw_string_literal")))
 
   (treesit-parser-create 'cpp)
+  (setq-local syntax-propertize-function
+              #'c-ts-mode--syntax-propertize)
 
   (setq-local treesit-simple-indent-rules
               (c-ts-mode--set-indent-style 'cpp))
@@ -675,11 +814,7 @@ the semicolon.  This function skips the semicolon."
   ;; Font-lock.
   (setq-local treesit-font-lock-settings (c-ts-mode--font-lock-settings 'cpp))
 
-  (treesit-major-mode-setup)
-
-  ;; Override default value of end-of-defun-function set by
-  ;; `treesit-major-mode-setup'.
-  (setq-local end-of-defun-function #'c-ts-mode--end-of-defun))
+  (treesit-major-mode-setup))
 
 (provide 'c-ts-mode)
 
diff --git a/lisp/progmodes/cc-align.el b/lisp/progmodes/cc-align.el
index 7b45be3c5c1..34ef0b9c1af 100644
--- a/lisp/progmodes/cc-align.el
+++ b/lisp/progmodes/cc-align.el
@@ -1,6 +1,6 @@
 ;;; cc-align.el --- custom indentation functions for CC Mode -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2023 Free Software Foundation, Inc.
 
 ;; Authors:    2004- Alan Mackenzie
 ;;             1998- Martin Stjernholm
diff --git a/lisp/progmodes/cc-awk.el b/lisp/progmodes/cc-awk.el
index 089fa9ffe4f..c367341345d 100644
--- a/lisp/progmodes/cc-awk.el
+++ b/lisp/progmodes/cc-awk.el
@@ -1,6 +1,6 @@
 ;;; cc-awk.el --- AWK specific code within cc-mode. -*- lexical-binding: t -*-
 
-;; Copyright (C) 1988, 1994, 1996, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1988, 1994, 1996, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Alan Mackenzie <acm@muc.de> (originally based on awk-mode.el)
diff --git a/lisp/progmodes/cc-bytecomp.el b/lisp/progmodes/cc-bytecomp.el
index 735d829769b..c3caffbe8d2 100644
--- a/lisp/progmodes/cc-bytecomp.el
+++ b/lisp/progmodes/cc-bytecomp.el
@@ -1,6 +1,6 @@
 ;;; cc-bytecomp.el --- compile time setup for proper compilation -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author:     Martin Stjernholm
 ;; Maintainer: bug-cc-mode@gnu.org
diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el
index 7bfd6bdbd91..4c2340bfc2c 100644
--- a/lisp/progmodes/cc-cmds.el
+++ b/lisp/progmodes/cc-cmds.el
@@ -1,6 +1,6 @@
 ;;; cc-cmds.el --- user level commands for CC Mode -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2023 Free Software Foundation, Inc.
 
 ;; Authors:    2003- Alan Mackenzie
 ;;             1998- Martin Stjernholm
diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el
index dd6d33009db..493035d38b4 100644
--- a/lisp/progmodes/cc-defs.el
+++ b/lisp/progmodes/cc-defs.el
@@ -1,6 +1,6 @@
 ;;; cc-defs.el --- compile time definitions for CC Mode -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2023 Free Software Foundation, Inc.
 
 ;; Authors:    2003- Alan Mackenzie
 ;;             1998- Martin Stjernholm
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index edb873f5a62..8ac3ef6808d 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -1,6 +1,6 @@
 ;;; cc-engine.el --- core syntax guessing engine for CC mode -*- 
lexical-binding:t; coding: utf-8 -*-
 
-;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2023 Free Software Foundation, Inc.
 
 ;; Authors:    2001- Alan Mackenzie
 ;;             1998- Martin Stjernholm
@@ -7757,7 +7757,7 @@ multi-line strings (but not C++, for example)."
                               (1- (match-end 1)) ; 1- For the inserted ".
                             eoll))))
 
-             ;; ...and clear `syntax-table' text propertes from the
+             ;; ...and clear `syntax-table' text properties from the
              ;; following raw strings.
              (c-depropertize-ml-strings-in-region (point) (1+ eoll)))
          ;; Remove the temporary string delimiter.
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index 9444828a0ed..d84c4f8ad8a 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -1,6 +1,6 @@
 ;; cc-fonts.el --- font lock support for CC Mode -*- lexical-binding: t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Authors:    2003- Alan Mackenzie
 ;;             2002- Martin Stjernholm
diff --git a/lisp/progmodes/cc-guess.el b/lisp/progmodes/cc-guess.el
index 584db86539e..797e0a1939b 100644
--- a/lisp/progmodes/cc-guess.el
+++ b/lisp/progmodes/cc-guess.el
@@ -1,6 +1,6 @@
 ;;; cc-guess.el --- guess indentation values by scanning existing code -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985, 1987, 1992-2006, 2011-2022 Free Software
+;; Copyright (C) 1985, 1987, 1992-2006, 2011-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author:     1994-1995 Barry A. Warsaw
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index 581685cad70..daa23bd14fa 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -1,6 +1,6 @@
 ;;; cc-langs.el --- language specific settings for CC Mode -*- 
lexical-binding: t; coding: utf-8 -*-
 
-;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2023 Free Software Foundation, Inc.
 
 ;; Authors:    2002- Alan Mackenzie
 ;;             1998- Martin Stjernholm
diff --git a/lisp/progmodes/cc-menus.el b/lisp/progmodes/cc-menus.el
index 51d7f4f5ca4..8d9864c4f6d 100644
--- a/lisp/progmodes/cc-menus.el
+++ b/lisp/progmodes/cc-menus.el
@@ -1,6 +1,6 @@
 ;;; cc-menus.el --- imenu support for CC Mode -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2023 Free Software Foundation, Inc.
 
 ;; Authors:    1998- Martin Stjernholm
 ;;             1992-1999 Barry A. Warsaw
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index 6a2c2f2911e..b04ed7584c4 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -1,6 +1,6 @@
 ;;; cc-mode.el --- major mode for editing C and similar languages -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2023 Free Software Foundation, Inc.
 
 ;; Authors:    2003- Alan Mackenzie
 ;;             1998- Martin Stjernholm
diff --git a/lisp/progmodes/cc-styles.el b/lisp/progmodes/cc-styles.el
index 1cf14d52d55..fc4f723915c 100644
--- a/lisp/progmodes/cc-styles.el
+++ b/lisp/progmodes/cc-styles.el
@@ -1,6 +1,6 @@
 ;;; cc-styles.el --- support for styles in CC Mode -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2023 Free Software Foundation, Inc.
 
 ;; Authors:    2004- Alan Mackenzie
 ;;             1998- Martin Stjernholm
diff --git a/lisp/progmodes/cc-vars.el b/lisp/progmodes/cc-vars.el
index 60d568add56..2206e0fcab6 100644
--- a/lisp/progmodes/cc-vars.el
+++ b/lisp/progmodes/cc-vars.el
@@ -1,6 +1,6 @@
 ;;; cc-vars.el --- user customization variables for CC Mode -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2023 Free Software Foundation, Inc.
 
 ;; Authors:    2002- Alan Mackenzie
 ;;             1998- Martin Stjernholm
diff --git a/lisp/progmodes/cfengine.el b/lisp/progmodes/cfengine.el
index 7d7e9265380..639c1fe7947 100644
--- a/lisp/progmodes/cfengine.el
+++ b/lisp/progmodes/cfengine.el
@@ -1,6 +1,6 @@
 ;;; cfengine.el --- mode for editing Cfengine files  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Maintainer: Ted Zlatanov <tzz@lifelogs.com>
diff --git a/lisp/progmodes/cl-font-lock.el b/lisp/progmodes/cl-font-lock.el
index 595027642b8..5febf7ff15f 100644
--- a/lisp/progmodes/cl-font-lock.el
+++ b/lisp/progmodes/cl-font-lock.el
@@ -1,5 +1,5 @@
 ;;; cl-font-lock.el --- Pretty Common Lisp font locking -*- lexical-binding: 
t; -*-
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Yue Daian <sheepduke@gmail.com>
 ;; Maintainer: Spenser Truex <web@spensertruex.com>
diff --git a/lisp/progmodes/cmacexp.el b/lisp/progmodes/cmacexp.el
index 7fe529615fe..110726fa362 100644
--- a/lisp/progmodes/cmacexp.el
+++ b/lisp/progmodes/cmacexp.el
@@ -1,6 +1,6 @@
 ;;; cmacexp.el --- expand C macros in a region  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: Francesco Potortì <pot@gnu.org>
 ;; Adapted-By: ESR
diff --git a/lisp/progmodes/cmake-ts-mode.el b/lisp/progmodes/cmake-ts-mode.el
index fc25d2ba5fd..a31250f68be 100644
--- a/lisp/progmodes/cmake-ts-mode.el
+++ b/lisp/progmodes/cmake-ts-mode.el
@@ -1,6 +1,6 @@
 ;;; cmake-ts-mode.el --- tree-sitter support for CMake  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author     : Randy Taylor <dev@rjt.dev>
 ;; Maintainer : Randy Taylor <dev@rjt.dev>
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index 319dc97e699..5758eadf996 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -1,6 +1,6 @@
 ;;; compile.el --- run compiler as inferior of Emacs, parse error messages  
-*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1987, 1993-1999, 2001-2022 Free Software
+;; Copyright (C) 1985-1987, 1993-1999, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Authors: Roland McGrath <roland@gnu.org>,
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index b36896ae7ce..412283f3488 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -1,6 +1,6 @@
 ;;; cperl-mode.el --- Perl code editing commands for Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Author: Ilya Zakharevich <ilyaz@cpan.org>
 ;;     Bob Olson
diff --git a/lisp/progmodes/cpp.el b/lisp/progmodes/cpp.el
index 43e430d40c9..ebc76c10fdb 100644
--- a/lisp/progmodes/cpp.el
+++ b/lisp/progmodes/cpp.el
@@ -1,6 +1,6 @@
 ;;; cpp.el --- highlight or hide text according to cpp conditionals -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: c, faces, tools
diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el
index 9e8b22c6aba..eb1d578daae 100644
--- a/lisp/progmodes/csharp-mode.el
+++ b/lisp/progmodes/csharp-mode.el
@@ -1,6 +1,6 @@
 ;;; csharp-mode.el --- Support for editing C#  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2022  Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author     : Theodor Thornhill <theo@thornhill.no>
 ;;              Jostein Kjønigsen <jostein@kjonigsen.net>
@@ -34,6 +34,7 @@
 (require 'cc-mode)
 (require 'cc-langs)
 (require 'treesit)
+(require 'c-ts-mode) ; For comment indenting and filling.
 
 (eval-when-compile
   (require 'cc-fonts)
@@ -42,6 +43,7 @@
 (declare-function treesit-parser-create "treesit.c")
 (declare-function treesit-induce-sparse-tree "treesit.c")
 (declare-function treesit-node-start "treesit.c")
+(declare-function treesit-node-type "treesit.c")
 (declare-function treesit-node-child-by-field-name "treesit.c")
 
 (defgroup csharp nil
@@ -632,6 +634,9 @@ compilation and evaluation time conflicts."
      ((node-is "}") parent-bol 0)
      ((node-is ")") parent-bol 0)
      ((node-is "]") parent-bol 0)
+     ((and (parent-is "comment") c-ts-mode--looking-at-star)
+      c-ts-mode--comment-start-after-first-star -1)
+     ((parent-is "comment") prev-adaptive-prefix 0)
      ((parent-is "namespace_declaration") parent-bol 0)
      ((parent-is "class_declaration") parent-bol 0)
      ((parent-is "constructor_declaration") parent-bol 0)
@@ -687,25 +692,47 @@ compilation and evaluation time conflicts."
 
 (defvar csharp-ts-mode--font-lock-settings
   (treesit-font-lock-rules
+   :language 'c-sharp
+   :feature 'expression
+   '((conditional_expression (identifier) @font-lock-variable-name-face)
+     (postfix_unary_expression (identifier)* @font-lock-variable-name-face)
+     (initializer_expression (assignment_expression left: (identifier) 
@font-lock-variable-name-face)))
+
+   :language 'c-sharp
+   :feature 'bracket
+   '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face)
+
+   :language 'c-sharp
+   :feature 'delimiter
+   '((["," ":" ";"]) @font-lock-delimiter-face)
+
+   :language 'c-sharp
+   :feature 'error
+   '((ERROR) @font-lock-warning-face)
+
    :language 'c-sharp
    :override t
    :feature 'comment
-   '((comment)  @font-lock-comment-face)
+   '((comment) @font-lock-comment-face)
+
    :language 'c-sharp
    :override t
    :feature 'keyword
    `([,@csharp-ts-mode--keywords] @font-lock-keyword-face
      (modifier) @font-lock-keyword-face
      (this_expression) @font-lock-keyword-face)
+
    :language 'c-sharp
    :override t
-   :feature 'attribute
+   :feature 'property
    `((attribute (identifier) @font-lock-property-face 
(attribute_argument_list))
      (attribute (identifier) @font-lock-property-face))
+
    :language 'c-sharp
    :override t
    :feature 'escape-sequence
    '((escape_sequence) @font-lock-escape-face)
+
    :language 'c-sharp
    :override t
    :feature 'literal
@@ -713,6 +740,7 @@ compilation and evaluation time conflicts."
      (real_literal) @font-lock-number-face
      (null_literal) @font-lock-constant-face
      (boolean_literal) @font-lock-constant-face)
+
    :language 'c-sharp
    :override t
    :feature 'string
@@ -725,6 +753,7 @@ compilation and evaluation time conflicts."
       "$\""
       "@$\""
       "$@\""] @font-lock-string-face)
+
    :language 'c-sharp
    :override t
    :feature 'type
@@ -735,8 +764,12 @@ compilation and evaluation time conflicts."
       (identifier) @font-lock-type-face)
      (type_argument_list
       (identifier) @font-lock-type-face)
-     (generic_name
-      (identifier) @font-lock-type-face)
+     (type_argument_list
+      (generic_name
+       (identifier) @font-lock-type-face))
+     (base_list
+      (generic_name
+       (identifier) @font-lock-type-face))
      (array_type
       (identifier) @font-lock-type-face)
      (cast_expression (identifier) @font-lock-type-face)
@@ -744,15 +777,20 @@ compilation and evaluation time conflicts."
      (type_parameter_constraints_clause
       target: (identifier) @font-lock-type-face)
      (type_of_expression (identifier) @font-lock-type-face)
-     (object_creation_expression (identifier) @font-lock-type-face))
+     (object_creation_expression
+      type: (identifier) @font-lock-type-face)
+     (object_creation_expression
+      type: (generic_name (identifier) @font-lock-type-face))
+     (as_expression right: (identifier) @font-lock-type-face)
+     (as_expression right: (generic_name (identifier) @font-lock-type-face)))
+
    :language 'c-sharp
    :feature 'definition
    :override t
    '((qualified_name (identifier) @font-lock-type-face)
      (using_directive (identifier) @font-lock-type-face)
      (using_directive (name_equals
-                       (identifier) @font-lock-type-face
-                       ["="] @default-face))
+                       (identifier) @font-lock-type-face))
 
      (enum_declaration (identifier) @font-lock-type-face)
      (enum_member_declaration (identifier) @font-lock-variable-name-face)
@@ -764,7 +802,6 @@ compilation and evaluation time conflicts."
      (record_declaration (identifier) @font-lock-type-face)
      (namespace_declaration (identifier) @font-lock-type-face)
      (base_list (identifier) @font-lock-type-face)
-     (property_declaration (generic_name))
      (property_declaration
       type: (nullable_type) @font-lock-type-face
       name: (identifier) @font-lock-variable-name-face)
@@ -778,29 +815,10 @@ compilation and evaluation time conflicts."
 
      (constructor_declaration name: (_) @font-lock-type-face)
 
-     (method_declaration type: (_) @font-lock-type-face)
+     (method_declaration type: [(identifier) (void_keyword)] 
@font-lock-type-face)
+     (method_declaration type: (generic_name (identifier) 
@font-lock-type-face))
      (method_declaration name: (_) @font-lock-function-name-face)
 
-     (invocation_expression
-      (member_access_expression
-       (generic_name (identifier) @font-lock-function-name-face)))
-     (invocation_expression
-      (member_access_expression
-       ((identifier) @font-lock-variable-name-face
-        (identifier) @font-lock-function-name-face)))
-     (invocation_expression
-      (identifier) @font-lock-function-name-face)
-     (invocation_expression
-      (member_access_expression
-       expression: (identifier) @font-lock-variable-name-face))
-     (invocation_expression
-      function: [(generic_name (identifier)) @font-lock-function-name-face
-                 (generic_name (type_argument_list
-                                ["<"] @font-lock-bracket-face
-                                (identifier) @font-lock-type-face
-                                [">"] @font-lock-bracket-face)
-                               )])
-
      (catch_declaration
       ((identifier) @font-lock-type-face))
      (catch_declaration
@@ -808,85 +826,54 @@ compilation and evaluation time conflicts."
        (identifier) @font-lock-variable-name-face))
 
      (variable_declaration (identifier) @font-lock-type-face)
+     (variable_declaration (generic_name (identifier) @font-lock-type-face))
      (variable_declarator (identifier) @font-lock-variable-name-face)
 
      (parameter type: (identifier) @font-lock-type-face)
+     (parameter type: (generic_name (identifier) @font-lock-type-face))
      (parameter name: (identifier) @font-lock-variable-name-face)
 
-     (binary_expression (identifier) @font-lock-variable-name-face)
-     (argument (identifier) @font-lock-variable-name-face))
-   :language 'c-sharp
-   :feature 'expression
-   '((conditional_expression (identifier) @font-lock-variable-name-face)
-     (postfix_unary_expression (identifier)* @font-lock-variable-name-face)
-     (assignment_expression (identifier) @font-lock-variable-name-face))
-   :language 'c-sharp
-   :feature 'bracket
-   '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face)
+     (lambda_expression (identifier) @font-lock-variable-name-face)
+
+     (declaration_expression type: (identifier) @font-lock-type-face)
+     (declaration_expression name: (identifier) @font-lock-variable-name-face))
 
    :language 'c-sharp
-   :feature 'delimiter
-   '((["," ":" ";"]) @font-lock-delimiter-face)
+   :feature 'function
+   '((invocation_expression
+      function: (member_access_expression
+                 name: (identifier) @font-lock-function-name-face))
+     (invocation_expression
+      function: (identifier) @font-lock-function-name-face)
+     (invocation_expression
+      function: (member_access_expression
+                 name: (generic_name (identifier) 
@font-lock-function-name-face)))
+     (invocation_expression
+      function: (generic_name (identifier) @font-lock-function-name-face)))
 
    :language 'c-sharp
    :feature 'escape-sequence
    :override t
-   '((escape_sequence) @font-lock-escape-face
-     (ERROR) @font-lock-warning-face)))
+   '((escape_sequence) @font-lock-escape-face)))
 
 ;;;###autoload
 (add-to-list 'auto-mode-alist '("\\.cs\\'" . csharp-mode))
 
-(defun csharp-ts-mode--imenu-1 (node)
-  "Helper for `csharp-ts-mode--imenu'.
-Find string representation for NODE and set marker, then recurse
-the subtrees."
-  (let* ((ts-node (car node))
-         (subtrees (mapcan #'csharp-ts-mode--imenu-1 (cdr node)))
-         (name (when ts-node
-                 (or (treesit-node-text
-                      (or (treesit-node-child-by-field-name
-                           ts-node "name"))
-                      t)
-                     "Unnamed node")))
-         (marker (when ts-node
-                   (set-marker (make-marker)
-                               (treesit-node-start ts-node)))))
-    (cond
-     ((null ts-node) subtrees)
-     (subtrees
-      `((,name ,(cons name marker) ,@subtrees)))
-     (t
-      `((,name . ,marker))))))
-
-(defun csharp-ts-mode--imenu ()
-  "Return Imenu alist for the current buffer."
-  (let* ((node (treesit-buffer-root-node))
-         (class-tree (treesit-induce-sparse-tree
-                      node "^class_declaration$" nil 1000))
-         (interface-tree (treesit-induce-sparse-tree
-                          node "^interface_declaration$" nil 1000))
-         (enum-tree (treesit-induce-sparse-tree
-                     node "^enum_declaration$" nil 1000))
-         (struct-tree (treesit-induce-sparse-tree
-                       node "^struct_declaration$"  nil 1000))
-         (record-tree (treesit-induce-sparse-tree
-                       node "^record_declaration$"  nil 1000))
-         (method-tree (treesit-induce-sparse-tree
-                       node "^method_declaration$" nil 1000))
-         (class-index (csharp-ts-mode--imenu-1 class-tree))
-         (interface-index (csharp-ts-mode--imenu-1 interface-tree))
-         (enum-index (csharp-ts-mode--imenu-1 enum-tree))
-         (record-index (csharp-ts-mode--imenu-1 record-tree))
-         (struct-index (csharp-ts-mode--imenu-1 struct-tree))
-         (method-index (csharp-ts-mode--imenu-1 method-tree)))
-    (append
-     (when class-index `(("Class" . ,class-index)))
-     (when interface-index `(("Interface" . ,interface-index)))
-     (when enum-index `(("Enum" . ,enum-index)))
-     (when record-index `(("Record" . ,record-index)))
-     (when struct-index `(("Struct" . ,struct-index)))
-     (when method-index `(("Method" . ,method-index))))))
+(defun csharp-ts-mode--defun-name (node)
+  "Return the defun name of NODE.
+Return nil if there is no name or if NODE is not a defun node."
+  (pcase (treesit-node-type node)
+    ((or "method_declaration"
+         "record_declaration"
+         "struct_declaration"
+         "enum_declaration"
+         "interface_declaration"
+         "class_declaration"
+         "class_declaration")
+     (treesit-node-text
+      (treesit-node-child-by-field-name
+       node "name")
+      t))))
 
 ;;;###autoload
 (add-to-list 'auto-mode-alist '("\\.cs\\'" . csharp-mode))
@@ -916,15 +903,7 @@ Key bindings:
   (treesit-parser-create 'c-sharp)
 
   ;; Comments.
-  (setq-local comment-start "// ")
-  (setq-local comment-end "")
-  (setq-local comment-start-skip (rx (or (seq "/" (+ "/"))
-                                         (seq "/" (+ "*")))
-                                     (* (syntax whitespace))))
-  (setq-local comment-end-skip
-              (rx (* (syntax whitespace))
-                  (group (or (syntax comment-end)
-                             (seq (+ "*") "/")))))
+  (c-ts-mode-comment-setup)
 
   (setq-local treesit-text-type-regexp
               (regexp-opt '("comment"
@@ -940,18 +919,25 @@ Key bindings:
 
   ;; Navigation.
   (setq-local treesit-defun-type-regexp "declaration")
+  (setq-local treesit-defun-name-function #'csharp-ts-mode--defun-name)
 
   ;; Font-lock.
   (setq-local treesit-font-lock-settings csharp-ts-mode--font-lock-settings)
   (setq-local treesit-font-lock-feature-list
               '(( comment definition)
-                ( keyword string escape-sequence type)
-                ( attribute constant expression literal)
-                ( bracket delimiter)))
+                ( keyword string type)
+                ( constant escape-sequence expression literal property)
+                ( function bracket delimiter error)))
 
   ;; Imenu.
-  (setq-local imenu-create-index-function #'csharp-ts-mode--imenu)
-  (setq-local which-func-functions nil) ;; Piggyback on imenu
+  (setq-local treesit-simple-imenu-settings
+              '(("Class" "\\`class_declaration\\'" nil nil)
+                ("Interface" "\\`interface_declaration\\'" nil nil)
+                ("Enum" "\\`enum_declaration\\'" nil nil)
+                ("Record" "\\`record_declaration\\'" nil nil)
+                ("Struct" "\\`struct_declaration\\'" nil nil)
+                ("Method" "\\`method_declaration\\'" nil nil)))
+
   (treesit-major-mode-setup))
 
 (provide 'csharp-mode)
diff --git a/lisp/progmodes/cwarn.el b/lisp/progmodes/cwarn.el
index 03469b9f55b..cf0e6508011 100644
--- a/lisp/progmodes/cwarn.el
+++ b/lisp/progmodes/cwarn.el
@@ -1,6 +1,6 @@
 ;;; cwarn.el --- highlight suspicious C and C++ constructions  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Anders Lindgren
 ;; Keywords: c, languages, faces
diff --git a/lisp/progmodes/dcl-mode.el b/lisp/progmodes/dcl-mode.el
index f1d7f236b9b..0bb1a01f902 100644
--- a/lisp/progmodes/dcl-mode.el
+++ b/lisp/progmodes/dcl-mode.el
@@ -1,6 +1,6 @@
 ;;; dcl-mode.el --- major mode for editing DCL command files  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Odd Gripenstam <gripenstamol@decus.se>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/progmodes/dockerfile-ts-mode.el 
b/lisp/progmodes/dockerfile-ts-mode.el
index 40d90cc2dfc..3f8766e6713 100644
--- a/lisp/progmodes/dockerfile-ts-mode.el
+++ b/lisp/progmodes/dockerfile-ts-mode.el
@@ -1,6 +1,6 @@
 ;;; dockerfile-ts-mode.el --- tree-sitter support for Dockerfiles  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author     : Randy Taylor <dev@rjt.dev>
 ;; Maintainer : Randy Taylor <dev@rjt.dev>
diff --git a/lisp/progmodes/ebnf-abn.el b/lisp/progmodes/ebnf-abn.el
index 5470346efc7..d05128b88ad 100644
--- a/lisp/progmodes/ebnf-abn.el
+++ b/lisp/progmodes/ebnf-abn.el
@@ -1,6 +1,6 @@
 ;;; ebnf-abn.el --- parser for ABNF (Augmented BNF)  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: wp, ebnf, PostScript
diff --git a/lisp/progmodes/ebnf-bnf.el b/lisp/progmodes/ebnf-bnf.el
index 3a041057d54..d746efbe690 100644
--- a/lisp/progmodes/ebnf-bnf.el
+++ b/lisp/progmodes/ebnf-bnf.el
@@ -1,6 +1,6 @@
 ;;; ebnf-bnf.el --- parser for EBNF  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: wp, ebnf, PostScript
diff --git a/lisp/progmodes/ebnf-dtd.el b/lisp/progmodes/ebnf-dtd.el
index f49f6769766..3a2add32d77 100644
--- a/lisp/progmodes/ebnf-dtd.el
+++ b/lisp/progmodes/ebnf-dtd.el
@@ -1,6 +1,6 @@
 ;;; ebnf-dtd.el --- parser for DTD (Data Type Description for XML)  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: wp, ebnf, PostScript
diff --git a/lisp/progmodes/ebnf-ebx.el b/lisp/progmodes/ebnf-ebx.el
index 8d44afffc34..29a50005494 100644
--- a/lisp/progmodes/ebnf-ebx.el
+++ b/lisp/progmodes/ebnf-ebx.el
@@ -1,6 +1,6 @@
 ;;; ebnf-ebx.el --- parser for EBNF used to specify XML (EBNFX)  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: wp, ebnf, PostScript
diff --git a/lisp/progmodes/ebnf-iso.el b/lisp/progmodes/ebnf-iso.el
index 4fc09d7ef7d..c4d11c97fff 100644
--- a/lisp/progmodes/ebnf-iso.el
+++ b/lisp/progmodes/ebnf-iso.el
@@ -1,6 +1,6 @@
 ;;; ebnf-iso.el --- parser for ISO EBNF  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: wp, ebnf, PostScript
diff --git a/lisp/progmodes/ebnf-otz.el b/lisp/progmodes/ebnf-otz.el
index 30d2ae15653..9ac37b676f9 100644
--- a/lisp/progmodes/ebnf-otz.el
+++ b/lisp/progmodes/ebnf-otz.el
@@ -1,6 +1,6 @@
 ;;; ebnf-otz.el --- syntactic chart OpTimiZer  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: wp, ebnf, PostScript
diff --git a/lisp/progmodes/ebnf-yac.el b/lisp/progmodes/ebnf-yac.el
index 16e15c2d37a..aaec71daa73 100644
--- a/lisp/progmodes/ebnf-yac.el
+++ b/lisp/progmodes/ebnf-yac.el
@@ -1,6 +1,6 @@
 ;;; ebnf-yac.el --- parser for Yacc/Bison  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: wp, ebnf, PostScript
diff --git a/lisp/progmodes/ebnf2ps.el b/lisp/progmodes/ebnf2ps.el
index 36849492be4..3e83d288408 100644
--- a/lisp/progmodes/ebnf2ps.el
+++ b/lisp/progmodes/ebnf2ps.el
@@ -1,6 +1,6 @@
 ;;; ebnf2ps.el --- translate an EBNF to a syntactic chart on PostScript  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: wp, ebnf, PostScript
diff --git a/lisp/progmodes/ebrowse.el b/lisp/progmodes/ebrowse.el
index 16b2f3ff503..4563b83389f 100644
--- a/lisp/progmodes/ebrowse.el
+++ b/lisp/progmodes/ebrowse.el
@@ -1,6 +1,6 @@
 ;;; ebrowse.el --- Emacs C++ class browser & tags facility  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <gerd@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index ce4ca4f3d92..6d192d9b333 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -1,6 +1,6 @@
 ;;; eglot.el --- The Emacs Client for LSP servers  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Version: 1.10
 ;; Author: João Távora <joaotavora@gmail.com>
@@ -190,6 +190,7 @@ chosen (interactively or automatically)."
                                      '("pylsp" "pyls" ("pyright-langserver" 
"--stdio") "jedi-language-server")))
                                 ((js-json-mode json-mode json-ts-mode)
                                  . ,(eglot-alternatives 
'(("vscode-json-language-server" "--stdio")
+                                                          
("vscode-json-languageserver" "--stdio")
                                                           
("json-languageserver" "--stdio"))))
                                 ((js-mode js-ts-mode tsx-ts-mode 
typescript-ts-mode typescript-mode)
                                  . ("typescript-language-server" "--stdio"))
@@ -204,7 +205,7 @@ chosen (interactively or automatically)."
                                 (((caml-mode :language-id "ocaml")
                                   (tuareg-mode :language-id "ocaml") 
reason-mode)
                                  . ("ocamllsp"))
-                                (ruby-mode
+                                ((ruby-mode ruby-ts-mode)
                                  . ("solargraph" "socket" "--port" :autoport))
                                 (haskell-mode
                                  . ("haskell-language-server-wrapper" "--lsp"))
@@ -907,6 +908,8 @@ PRESERVE-BUFFERS as in `eglot-shutdown', which see."
            do (with-demoted-errors "[eglot] shutdown all: %s"
                 (cl-loop for s in ss do (eglot-shutdown s nil nil 
preserve-buffers)))))
 
+(defvar eglot--servers-by-xrefed-file (make-hash-table :test 'equal))
+
 (defun eglot--on-shutdown (server)
   "Called by jsonrpc.el when SERVER is already dead."
   ;; Turn off `eglot--managed-mode' where appropriate.
@@ -925,6 +928,9 @@ PRESERVE-BUFFERS as in `eglot-shutdown', which see."
   (setf (gethash (eglot--project server) eglot--servers-by-project)
         (delq server
               (gethash (eglot--project server) eglot--servers-by-project)))
+  (maphash (lambda (f s)
+             (when (eq s server) (remhash f eglot--servers-by-xrefed-file)))
+           eglot--servers-by-xrefed-file)
   (cond ((eglot--shutdown-requested server)
          t)
         ((not (eglot--inhibit-autoreconnect server))
@@ -1056,9 +1062,6 @@ be guessed."
 (put 'eglot-lsp-context 'variable-documentation
      "Dynamically non-nil when searching for projects in LSP context.")
 
-(defvar eglot--servers-by-xrefed-file
-  (make-hash-table :test 'equal :weakness 'value))
-
 (defun eglot--current-project ()
   "Return a project object for Eglot's LSP purposes.
 This relies on `project-current' and thus on
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index 7c470de195f..be969b0c3e3 100644
--- a/lisp/progmodes/elisp-mode.el
+++ b/lisp/progmodes/elisp-mode.el
@@ -1,6 +1,6 @@
 ;;; elisp-mode.el --- Emacs Lisp mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1999-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: lisp, languages
diff --git a/lisp/progmodes/erts-mode.el b/lisp/progmodes/erts-mode.el
index 13da1d478d6..8dce93eae7e 100644
--- a/lisp/progmodes/erts-mode.el
+++ b/lisp/progmodes/erts-mode.el
@@ -1,6 +1,6 @@
 ;;; erts-mode.el --- major mode to edit erts files  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Keywords: tools
 
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el
index cbdb0994cbf..8efdae6060f 100644
--- a/lisp/progmodes/etags.el
+++ b/lisp/progmodes/etags.el
@@ -1,6 +1,6 @@
 ;;; etags.el --- etags facility for Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Author: Roland McGrath <roland@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/progmodes/executable.el b/lisp/progmodes/executable.el
index 670b6e7e898..c15997dce3a 100644
--- a/lisp/progmodes/executable.el
+++ b/lisp/progmodes/executable.el
@@ -1,6 +1,6 @@
 ;;; executable.el --- base functionality for executable interpreter scripts  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1994-1996, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Daniel Pfeiffer <occitan@esperanto.org>
 ;; Keywords: languages, unix
diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el
index 443281c4f07..deccc75b156 100644
--- a/lisp/progmodes/f90.el
+++ b/lisp/progmodes/f90.el
@@ -1,6 +1,6 @@
 ;;; f90.el --- Fortran-90 mode (free format)  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1995-1997, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1997, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Torbjörn Einarsson <Torbjorn.Einarsson@era.ericsson.se>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/progmodes/flymake-cc.el b/lisp/progmodes/flymake-cc.el
index b44e625565e..eb17006fbeb 100644
--- a/lisp/progmodes/flymake-cc.el
+++ b/lisp/progmodes/flymake-cc.el
@@ -1,6 +1,6 @@
 ;;; flymake-cc.el --- Flymake support for GNU tools for C/C++     -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: João Távora <joaotavora@gmail.com>
 ;; Keywords: languages, c
diff --git a/lisp/progmodes/flymake-proc.el b/lisp/progmodes/flymake-proc.el
index 249ae9dff2f..f640e7f32bf 100644
--- a/lisp/progmodes/flymake-proc.el
+++ b/lisp/progmodes/flymake-proc.el
@@ -1,6 +1,6 @@
 ;;; flymake-proc.el --- Flymake backend for external tools  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Pavel Kobyakov <pk_at_work@yahoo.com>
 ;; Maintainer: João Távora <joaotavora@gmail.com>
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 7af62c35358..a352adbba19 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -1,6 +1,6 @@
 ;;; flymake.el --- A universal on-the-fly syntax checker  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Pavel Kobyakov <pk_at_work@yahoo.com>
 ;; Maintainer: João Távora <joaotavora@gmail.com>
diff --git a/lisp/progmodes/fortran.el b/lisp/progmodes/fortran.el
index 9a68c0e6fd7..32cb56ababd 100644
--- a/lisp/progmodes/fortran.el
+++ b/lisp/progmodes/fortran.el
@@ -1,6 +1,6 @@
 ;;; fortran.el --- Fortran mode for GNU Emacs -*- lexical-binding: t -*-
 
-;; Copyright (C) 1986-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1986-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael D. Prange <prange@erl.mit.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index ff14546c63a..2edaf9e2593 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -1,6 +1,6 @@
 ;;; gdb-mi.el --- User Interface for running GDB  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Nick Roberts <nickrob@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/progmodes/glasses.el b/lisp/progmodes/glasses.el
index c0bd6f220c9..efa191786db 100644
--- a/lisp/progmodes/glasses.el
+++ b/lisp/progmodes/glasses.el
@@ -1,6 +1,6 @@
 ;;; glasses.el --- make cantReadThis readable  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Milan Zamazal <pdm@zamazal.org>
 ;; Keywords: tools
diff --git a/lisp/progmodes/go-ts-mode.el b/lisp/progmodes/go-ts-mode.el
index 124d9b044a2..1d6a8a30db5 100644
--- a/lisp/progmodes/go-ts-mode.el
+++ b/lisp/progmodes/go-ts-mode.el
@@ -1,6 +1,6 @@
 ;;; go-ts-mode.el --- tree-sitter support for Go  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author     : Randy Taylor <dev@rjt.dev>
 ;; Maintainer : Randy Taylor <dev@rjt.dev>
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 35cac43bee1..0da16b44dda 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -1,6 +1,6 @@
 ;;; grep.el --- run `grep' and display the results  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1987, 1993-1999, 2001-2022 Free Software
+;; Copyright (C) 1985-1987, 1993-1999, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Roland McGrath <roland@gnu.org>
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 6ffcf497b93..20692d6c8df 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -1,6 +1,6 @@
 ;;; gud.el --- Grand Unified Debugger mode for running GDB and other debuggers 
 -*- lexical-binding:t -*-
 
-;; Copyright (C) 1992-1996, 1998, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1992-1996, 1998, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
diff --git a/lisp/progmodes/hideif.el b/lisp/progmodes/hideif.el
index 767216c03f2..30893638f0d 100644
--- a/lisp/progmodes/hideif.el
+++ b/lisp/progmodes/hideif.el
@@ -1,6 +1,6 @@
 ;;; hideif.el --- hides selected code within ifdef  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1988, 1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Brian Marick
 ;;     Daniel LaLiberte <liberte@holonexus.org>
diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el
index 655dd6a5d94..c160e6ad1df 100644
--- a/lisp/progmodes/hideshow.el
+++ b/lisp/progmodes/hideshow.el
@@ -1,6 +1,6 @@
 ;;; hideshow.el --- minor mode cmds to selectively display code/comment blocks 
 -*- lexical-binding:t -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Thien-Thi Nguyen <ttn@gnu.org>
 ;;      Dan Nicolaescu <dann@gnu.org>
diff --git a/lisp/progmodes/icon.el b/lisp/progmodes/icon.el
index 2da0fb16773..e1f9049c364 100644
--- a/lisp/progmodes/icon.el
+++ b/lisp/progmodes/icon.el
@@ -1,6 +1,6 @@
 ;;; icon.el --- mode for editing Icon code  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1989, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Chris Smith <csmith@convex.com>
 ;; Created: 15 Feb 89
diff --git a/lisp/progmodes/idlw-complete-structtag.el 
b/lisp/progmodes/idlw-complete-structtag.el
index fab14391032..cbc94ac0ba4 100644
--- a/lisp/progmodes/idlw-complete-structtag.el
+++ b/lisp/progmodes/idlw-complete-structtag.el
@@ -1,6 +1,6 @@
 ;;; idlw-complete-structtag.el --- Completion of structure tags.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@astro.uva.nl>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/progmodes/idlw-help.el b/lisp/progmodes/idlw-help.el
index a19abf77e5f..2d08714b7cf 100644
--- a/lisp/progmodes/idlw-help.el
+++ b/lisp/progmodes/idlw-help.el
@@ -1,6 +1,6 @@
 ;;; idlw-help.el --- HTML Help code for IDLWAVE  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 ;;
 ;; Authors: JD Smith <jd.smith@utoledo.edu>
 ;;          Carsten Dominik <dominik@science.uva.nl>
@@ -269,7 +269,7 @@ Scrolling:          SPC  DEL  RET
 Text Searches:      Inside Topic: Use Emacs search functions
 Exit:               [q]uit or mouse button 3 will kill the frame
 
-When the hep text is a source file, the following commands are available
+When the help text is a source file, the following commands are available
 
 Fontification:      [F]ontify the buffer like source code
 Jump:               [h] to function doclib header
diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el
index 20472a6034b..e50e1226b43 100644
--- a/lisp/progmodes/idlw-shell.el
+++ b/lisp/progmodes/idlw-shell.el
@@ -1,6 +1,6 @@
 ;;; idlw-shell.el --- run IDL as an inferior process of Emacs.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Authors: JD Smith <jd.smith@utoledo.edu>
 ;;          Carsten Dominik <dominik@astro.uva.nl>
diff --git a/lisp/progmodes/idlw-toolbar.el b/lisp/progmodes/idlw-toolbar.el
index 00de3d16c8c..4319bba0e63 100644
--- a/lisp/progmodes/idlw-toolbar.el
+++ b/lisp/progmodes/idlw-toolbar.el
@@ -1,6 +1,6 @@
 ;;; idlw-toolbar.el --- a debugging toolbar for IDLWAVE  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@astro.uva.nl>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index 395c51d5421..0b5ed93068a 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -1,6 +1,6 @@
 ;;; idlwave.el --- IDL editing mode for GNU Emacs  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Authors: JD Smith <jd.smith@utoledo.edu>
 ;;          Carsten Dominik <dominik@science.uva.nl>
diff --git a/lisp/progmodes/inf-lisp.el b/lisp/progmodes/inf-lisp.el
index b9042e66c6b..e98e00dee7a 100644
--- a/lisp/progmodes/inf-lisp.el
+++ b/lisp/progmodes/inf-lisp.el
@@ -1,6 +1,6 @@
 ;;; inf-lisp.el --- an inferior-lisp mode  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1988-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1988-2023 Free Software Foundation, Inc.
 
 ;; Author: Olin Shivers <shivers@cs.cmu.edu>
 ;; Keywords: processes, lisp
diff --git a/lisp/progmodes/java-ts-mode.el b/lisp/progmodes/java-ts-mode.el
index bd6a8aa4743..87a4e2b90f8 100644
--- a/lisp/progmodes/java-ts-mode.el
+++ b/lisp/progmodes/java-ts-mode.el
@@ -1,6 +1,6 @@
 ;;; java-ts-mode.el --- tree-sitter support for Java  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author     : Theodor Thornhill <theo@thornhill.no>
 ;; Maintainer : Theodor Thornhill <theo@thornhill.no>
@@ -29,10 +29,12 @@
 
 (require 'treesit)
 (eval-when-compile (require 'rx))
+(require 'c-ts-mode) ; For comment indent and filling.
 
 (declare-function treesit-parser-create "treesit.c")
 (declare-function treesit-induce-sparse-tree "treesit.c")
 (declare-function treesit-node-start "treesit.c")
+(declare-function treesit-node-type "treesit.c")
 (declare-function treesit-node-child-by-field-name "treesit.c")
 
 (defcustom java-ts-mode-indent-offset 4
@@ -71,8 +73,9 @@
      ((node-is "}") (and parent parent-bol) 0)
      ((node-is ")") parent-bol 0)
      ((node-is "]") parent-bol 0)
-     ((and (parent-is "comment") comment-end) comment-start -1)
-     ((parent-is "comment") comment-start-skip 0)
+     ((and (parent-is "comment") c-ts-mode--looking-at-star)
+      c-ts-mode--comment-start-after-first-star -1)
+     ((parent-is "comment") prev-adaptive-prefix 0)
      ((parent-is "text_block") no-indent)
      ((parent-is "class_body") parent-bol java-ts-mode-indent-offset)
      ((parent-is "interface_body") parent-bol java-ts-mode-indent-offset)
@@ -237,7 +240,9 @@
      (method_invocation
       name: (identifier) @font-lock-function-name-face)
 
-     (argument_list (identifier) @font-lock-variable-name-face))
+     (argument_list (identifier) @font-lock-variable-name-face)
+
+     (expression_statement (identifier) @font-lock-variable-name-face))
 
    :language 'java
    :feature 'bracket
@@ -248,52 +253,21 @@
    '((["," ":" ";"]) @font-lock-delimiter-face))
   "Tree-sitter font-lock settings for `java-ts-mode'.")
 
-(defun java-ts-mode--imenu-1 (node)
-  "Helper for `java-ts-mode--imenu'.
-Find string representation for NODE and set marker, then recurse
-the subtrees."
-  (let* ((ts-node (car node))
-         (subtrees (mapcan #'java-ts-mode--imenu-1 (cdr node)))
-         (name (when ts-node
-                 (or (treesit-node-text
-                      (or (treesit-node-child-by-field-name
-                           ts-node "name"))
-                      t)
-                     "Unnamed node")))
-         (marker (when ts-node
-                   (set-marker (make-marker)
-                               (treesit-node-start ts-node)))))
-    (cond
-     ((null ts-node) subtrees)
-     (subtrees
-      `((,name ,(cons name marker) ,@subtrees)))
-     (t
-      `((,name . ,marker))))))
-
-(defun java-ts-mode--imenu ()
-  "Return Imenu alist for the current buffer."
-  (let* ((node (treesit-buffer-root-node))
-         (class-tree (treesit-induce-sparse-tree
-                      node "^class_declaration$" nil 1000))
-         (interface-tree (treesit-induce-sparse-tree
-                          node "^interface_declaration$" nil 1000))
-         (enum-tree (treesit-induce-sparse-tree
-                     node "^enum_declaration$" nil 1000))
-         (record-tree (treesit-induce-sparse-tree
-                       node "^record_declaration$"  nil 1000))
-         (method-tree (treesit-induce-sparse-tree
-                       node "^method_declaration$" nil 1000))
-         (class-index (java-ts-mode--imenu-1 class-tree))
-         (interface-index (java-ts-mode--imenu-1 interface-tree))
-         (enum-index (java-ts-mode--imenu-1 enum-tree))
-         (record-index (java-ts-mode--imenu-1 record-tree))
-         (method-index (java-ts-mode--imenu-1 method-tree)))
-    (append
-     (when class-index `(("Class" . ,class-index)))
-     (when interface-index `(("Interface" . ,interface-index)))
-     (when enum-index `(("Enum" . ,enum-index)))
-     (when record-index `(("Record" . ,record-index)))
-     (when method-index `(("Method" . ,method-index))))))
+(defun java-ts-mode--defun-name (node)
+  "Return the defun name of NODE.
+Return nil if there is no name or if NODE is not a defun node."
+  (pcase (treesit-node-type node)
+    ((or "method_declaration"
+         "class_declaration"
+         "record_declaration"
+         "interface_declaration"
+         "enum_declaration"
+         "import_declaration"
+         "package_declaration"
+         "module_declaration")
+     (treesit-node-text
+      (treesit-node-child-by-field-name node "name")
+      t))))
 
 ;;;###autoload
 (define-derived-mode java-ts-mode prog-mode "Java"
@@ -307,15 +281,7 @@ the subtrees."
   (treesit-parser-create 'java)
 
   ;; Comments.
-  (setq-local comment-start "// ")
-  (setq-local comment-end "")
-  (setq-local comment-start-skip (rx (or (seq "/" (+ "/"))
-                                         (seq "/" (+ "*")))
-                                     (* (syntax whitespace))))
-  (setq-local comment-end-skip
-              (rx (* (syntax whitespace))
-                  (group (or (syntax comment-end)
-                             (seq (+ "*") "/")))))
+  (c-ts-mode-comment-setup)
 
   (setq-local treesit-text-type-regexp
               (regexp-opt '("line_comment"
@@ -339,6 +305,7 @@ the subtrees."
                             "import_declaration"
                             "package_declaration"
                             "module_declaration")))
+  (setq-local treesit-defun-name-function #'java-ts-mode--defun-name)
 
   ;; Font-lock.
   (setq-local treesit-font-lock-settings java-ts-mode--font-lock-settings)
@@ -349,8 +316,11 @@ the subtrees."
                 ( bracket delimiter operator)))
 
   ;; Imenu.
-  (setq-local imenu-create-index-function #'java-ts-mode--imenu)
-  (setq-local which-func-functions nil) ;; Piggyback on imenu
+  (setq-local treesit-simple-imenu-settings
+              '(("Class" "\\`class_declaration\\'" nil nil)
+                ("Interface" "\\`interface_declaration\\'" nil nil)
+                ("Enum" "\\`record_declaration\\'" nil nil)
+                ("Method" "\\`method_declaration\\'" nil nil)))
   (treesit-major-mode-setup))
 
 (provide 'java-ts-mode)
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index cbcca81baaa..8a2a5f886ec 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -1,6 +1,6 @@
 ;;; js.el --- Major mode for editing JavaScript  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Karl Landstrom <karl.landstrom@brgeight.se>
 ;;         Daniel Colascione <dancol@dancol.org>
@@ -54,6 +54,7 @@
 (require 'json)
 (require 'prog-mode)
 (require 'treesit)
+(require 'c-ts-mode) ; For comment indent and filling.
 
 (eval-when-compile
   (require 'cl-lib)
@@ -73,6 +74,8 @@
 (declare-function treesit-node-start "treesit.c")
 (declare-function treesit-node-end "treesit.c")
 (declare-function treesit-node-type "treesit.c")
+(declare-function treesit-query-compile "treesit.c")
+(declare-function treesit-query-capture "treesit.c")
 
 ;;; Constants
 
@@ -3425,9 +3428,9 @@ This function is intended for use in 
`after-change-functions'."
        ((node-is ")") parent-bol 0)
        ((node-is "]") parent-bol 0)
        ((node-is ">") parent-bol 0)
-       ((parent-is "comment") comment-start 0)
-       ((and (parent-is "comment") comment-end) comment-start -1)
-       ((parent-is "comment") comment-start-skip 0)
+       ((and (parent-is "comment") c-ts-mode--looking-at-star)
+        c-ts-mode--comment-start-after-first-star -1)
+       ((parent-is "comment") prev-adaptive-prefix 0)
        ((parent-is "ternary_expression") parent-bol js-indent-level)
        ((parent-is "member_expression") parent-bol js-indent-level)
        ((node-is ,switch-case) parent-bol 0)
@@ -3478,36 +3481,35 @@ This function is intended for use in 
`after-change-functions'."
   (treesit-font-lock-rules
 
    :language 'javascript
-   :override t
    :feature 'comment
-   `((comment) @font-lock-comment-face)
+   '((comment) @font-lock-comment-face)
 
    :language 'javascript
-   :override t
    :feature 'constant
-   `(((identifier) @font-lock-constant-face
+   '(((identifier) @font-lock-constant-face
       (:match "^[A-Z_][A-Z_\\d]*$" @font-lock-constant-face))
 
      [(true) (false) (null)] @font-lock-constant-face)
 
    :language 'javascript
-   :override t
    :feature 'keyword
    `([,@js--treesit-keywords] @font-lock-keyword-face
      [(this) (super)] @font-lock-keyword-face)
 
    :language 'javascript
-   :override t
    :feature 'string
-   `((regex pattern: (regex_pattern)) @font-lock-string-face
-     (string) @font-lock-string-face
-     (template_string) @js--fontify-template-string
-     (template_substitution ["${" "}"] @font-lock-builtin-face))
+   '((regex pattern: (regex_pattern)) @font-lock-string-face
+     (string) @font-lock-string-face)
 
    :language 'javascript
+   :feature 'string-interpolation
    :override t
-   :feature 'declaration
-   `((function
+   '((template_string) @js--fontify-template-string
+     (template_substitution ["${" "}"] @font-lock-delimiter-face))
+
+   :language 'javascript
+   :feature 'definition
+   '((function
       name: (identifier) @font-lock-function-name-face)
 
      (class_declaration
@@ -3519,6 +3521,15 @@ This function is intended for use in 
`after-change-functions'."
      (method_definition
       name: (property_identifier) @font-lock-function-name-face)
 
+     (method_definition
+      parameters: (formal_parameters (identifier) 
@font-lock-variable-name-face))
+
+     (arrow_function
+      parameters: (formal_parameters (identifier) 
@font-lock-variable-name-face))
+
+     (function_declaration
+      parameters: (formal_parameters (identifier) 
@font-lock-variable-name-face))
+
      (variable_declarator
       name: (identifier) @font-lock-variable-name-face)
 
@@ -3534,24 +3545,10 @@ This function is intended for use in 
`after-change-functions'."
       value: (array (number) (function))))
 
    :language 'javascript
-   :override t
-   :feature 'identifier
-   `((new_expression
-      constructor: (identifier) @font-lock-type-face)
-
-     (for_in_statement
-      left: (identifier) @font-lock-variable-name-face)
-
-     (arrow_function
-      parameter: (identifier) @font-lock-variable-name-face))
-
-   :language 'javascript
-   :override t
    :feature 'property
-   ;; This needs to be before function-name feature, because methods
-   ;; can be both property and function-name, and we want them in
-   ;; function-name face.
-   `((property_identifier) @font-lock-property-face
+   '(((property_identifier) @font-lock-property-face
+      (:pred js--treesit-property-not-function-p
+             @font-lock-property-face))
 
      (pair value: (identifier) @font-lock-variable-name-face)
 
@@ -3560,36 +3557,27 @@ This function is intended for use in 
`after-change-functions'."
      ((shorthand_property_identifier_pattern) @font-lock-property-face))
 
    :language 'javascript
-   :override t
-   :feature 'expression
-   `((assignment_expression
-      left: [(identifier) @font-lock-function-name-face
-             (member_expression property: (property_identifier)
-                                @font-lock-function-name-face)]
-      right: [(function) (arrow_function)])
-
-     (call_expression
+   :feature 'assignment
+   '((assignment_expression
+      left: (_) @js--treesit-fontify-assignment-lhs))
+
+   :language 'javascript
+   :feature 'function
+   '((call_expression
       function: [(identifier) @font-lock-function-name-face
                  (member_expression
                   property:
                   (property_identifier) @font-lock-function-name-face)])
-
-     (assignment_expression
-      left: [(identifier) @font-lock-variable-name-face
-             (member_expression
-              property: (property_identifier) @font-lock-variable-name-face)]))
-
-   :language 'javascript
-   :override t
-   :feature 'pattern
-   `((pair_pattern key: (property_identifier) @font-lock-variable-name-face)
-     (array_pattern (identifier) @font-lock-variable-name-face))
+     (method_definition
+      name: (property_identifier) @font-lock-function-name-face)
+     (function_declaration
+      name: (identifier) @font-lock-function-name-face)
+     (function
+      name: (identifier) @font-lock-function-name-face))
 
    :language 'javascript
-   :override t
    :feature 'jsx
-   `(
-     (jsx_opening_element
+   '((jsx_opening_element
       [(nested_identifier (identifier)) (identifier)]
       @font-lock-function-name-face)
 
@@ -3607,7 +3595,7 @@ This function is intended for use in 
`after-change-functions'."
 
    :language 'javascript
    :feature 'number
-   `((number) @font-lock-number-face
+   '((number) @font-lock-number-face
      ((identifier) @font-lock-number-face
       (:match "^\\(:?NaN\\|Infinity\\)$" @font-lock-number-face)))
 
@@ -3656,91 +3644,50 @@ OVERRIDE is the override flag described in
       (setq font-beg (treesit-node-end child)
             child (treesit-node-next-sibling child)))))
 
-(defun js-treesit-current-defun ()
-  "Return name of surrounding function.
-This function can be used as a value in `which-func-functions'"
-  (let ((node (treesit-node-at (point)))
-        (name-list ()))
-    (cl-loop while node
-             if (pcase (treesit-node-type node)
-                  ("function_declaration" t)
-                  ("method_definition" t)
-                  ("class_declaration" t)
-                  ("variable_declarator" t)
-                  (_ nil))
-             do (push (treesit-node-text
-                       (treesit-node-child-by-field-name node "name")
-                       t)
-                      name-list)
-             do (setq node (treesit-node-parent node))
-             finally return  (string-join name-list "."))))
-
-(defun js--treesit-imenu-1 (node)
-  "Given a sparse tree, create an imenu alist.
-
-NODE is the root node of the tree returned by
-`treesit-induce-sparse-tree' (not a tree-sitter node, its car is
-a tree-sitter node).  Walk that tree and return an imenu alist.
-
-Return a list of ENTRY where
-
-ENTRY := (NAME . MARKER)
-       | (NAME . ((JUMP-LABEL . MARKER)
-                  ENTRY
-                  ...)
-
-NAME is the function/class's name, JUMP-LABEL is like \"*function
-definition*\"."
-  (let* ((ts-node (car node))
-         (children (cdr node))
-         (subtrees (mapcan #'js--treesit-imenu-1
-                           children))
-         (type (pcase (treesit-node-type ts-node)
-                 ("lexical_declaration" 'variable)
-                 ("class_declaration" 'class)
-                 ("method_definition" 'method)
-                 ("function_declaration" 'function)))
-         ;; The root of the tree could have a nil ts-node.
-         (name (when ts-node
-                 (let ((ts-node-1
-                        (if (eq type 'variable)
-                            (treesit-search-subtree
-                             ts-node "variable_declarator" nil nil 1)
-                          ts-node)))
-                   (treesit-node-text
-                    (treesit-node-child-by-field-name
-                     ts-node-1 "name")
-                    t))))
-         (marker (when ts-node
-                   (set-marker (make-marker)
-                               (treesit-node-start ts-node)))))
-    (cond
-     ((null ts-node)
-      subtrees)
-     ;; Don't included non-top-level variable declarations.
-     ((and (eq type 'variable)
-           (treesit-node-top-level ts-node))
-      nil)
-     (subtrees
-      `((,name
-         ,(cons "" marker)
-         ,@subtrees)))
-     (t (list (cons name marker))))))
-
-(defun js--treesit-imenu ()
-  "Return Imenu alist for the current buffer."
-  (let* ((node (treesit-buffer-root-node))
-         (class-tree (treesit-induce-sparse-tree
-                      node (rx (or "class_declaration"
-                                   "method_definition"))
-                      nil 1000))
-         (func-tree (treesit-induce-sparse-tree
-                     node "function_declaration" nil 1000))
-         (var-tree (treesit-induce-sparse-tree
-                    node "lexical_declaration" nil 1000)))
-    `(("Class" . ,(js--treesit-imenu-1 class-tree))
-      ("Variable" . ,(js--treesit-imenu-1 var-tree))
-      ("Function" . ,(js--treesit-imenu-1 func-tree)))))
+(defun js--treesit-property-not-function-p (node)
+  "Check that NODE, a property_identifier, is not used as a function."
+  (not (equal (treesit-node-type
+               (treesit-node-parent ; Maybe call_expression.
+                (treesit-node-parent ; Maybe member_expression.
+                 node)))
+              "call_expression")))
+
+(defvar js--treesit-lhs-identifier-query
+  (when (treesit-available-p)
+    (treesit-query-compile 'javascript '((identifier) @id
+                                         (property_identifier) @id)))
+  "Query that captures identifier and query_identifier.")
+
+(defun js--treesit-fontify-assignment-lhs (node override start end &rest _)
+  "Fontify the lhs NODE of an assignment_expression.
+For OVERRIDE, START, END, see `treesit-font-lock-rules'."
+  (dolist (node (treesit-query-capture
+                 node js--treesit-lhs-identifier-query nil nil t))
+    (treesit-fontify-with-override
+     (treesit-node-start node) (treesit-node-end node)
+     (pcase (treesit-node-type node)
+       ("identifier" 'font-lock-variable-name-face)
+       ("property_identifier" 'font-lock-property-face))
+     override start end)))
+
+(defun js--treesit-defun-name (node)
+  "Return the defun name of NODE.
+Return nil if there is no name or if NODE is not a defun node."
+  (treesit-node-text
+   (treesit-node-child-by-field-name
+    (pcase (treesit-node-type node)
+      ("lexical_declaration"
+       (treesit-search-subtree node "variable_declarator" nil nil 1))
+      ((or "function_declaration" "method_definition" "class_declaration")
+       node))
+    "name")
+   t))
+
+(defun js--treesit-valid-imenu-entry (node)
+  "Return nil if NODE is a non-top-level \"lexical_declaration\"."
+  (pcase (treesit-node-type node)
+    ("lexical_declaration" (treesit-node-top-level node))
+    (_ t)))
 
 ;;; Main Function
 
@@ -3853,15 +3800,7 @@ Currently there are `js-mode' and `js-ts-mode'."
     ;; Which-func.
     (setq-local which-func-imenu-joiner-function #'js--which-func-joiner)
     ;; Comment.
-    (setq-local comment-start "// ")
-    (setq-local comment-end "")
-    (setq-local comment-start-skip (rx (or (seq "/" (+ "/"))
-                                           (seq "/" (+ "*")))
-                                       (* (syntax whitespace))))
-    (setq-local comment-end-skip
-                (rx (* (syntax whitespace))
-                    (group (or (syntax comment-end)
-                               (seq (+ "*") "/")))))
+    (c-ts-mode-comment-setup)
     (setq-local comment-multi-line t)
 
     (setq-local treesit-text-type-regexp
@@ -3885,19 +3824,24 @@ Currently there are `js-mode' and `js-ts-mode'."
                         "method_definition"
                         "function_declaration"
                         "lexical_declaration")))
+    (setq-local treesit-defun-name-function #'js--treesit-defun-name)
     ;; Fontification.
     (setq-local treesit-font-lock-settings js--treesit-font-lock-settings)
     (setq-local treesit-font-lock-feature-list
-                '(( comment declaration)
+                '(( comment definition)
                   ( keyword string)
-                  ( constant escape-sequence expression
-                    identifier jsx number pattern property)
-                  ( bracket delimiter operator)))
+                  ( assignment constant escape-sequence jsx number
+                    pattern string-interpolation)
+                  ( bracket delimiter function operator property)))
     ;; Imenu
-    (setq-local imenu-create-index-function
-                #'js--treesit-imenu)
-    ;; Which-func (use imenu).
-    (setq-local which-func-functions nil)
+    (setq-local treesit-simple-imenu-settings
+                `(("Function" "\\`function_declaration\\'" nil nil)
+                  ("Variable" "\\`lexical_declaration\\'"
+                   js--treesit-valid-imenu-entry nil)
+                  ("Class" ,(rx bos (or "class_declaration"
+                                        "method_definition")
+                                eos)
+                   nil nil)))
     (treesit-major-mode-setup)))
 
 ;;;###autoload
diff --git a/lisp/progmodes/json-ts-mode.el b/lisp/progmodes/json-ts-mode.el
index 6c2f3805872..fbcda22acca 100644
--- a/lisp/progmodes/json-ts-mode.el
+++ b/lisp/progmodes/json-ts-mode.el
@@ -1,6 +1,6 @@
 ;;; json-ts-mode.el --- tree-sitter support for JSON  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author     : Theodor Thornhill <theo@thornhill.no>
 ;; Maintainer : Theodor Thornhill <theo@thornhill.no>
@@ -33,6 +33,7 @@
 (declare-function treesit-parser-create "treesit.c")
 (declare-function treesit-induce-sparse-tree "treesit.c")
 (declare-function treesit-node-start "treesit.c")
+(declare-function treesit-node-type "treesit.c")
 (declare-function treesit-node-child-by-field-name "treesit.c")
 
 
@@ -107,33 +108,16 @@
    '((ERROR) @font-lock-warning-face))
   "Font-lock settings for JSON.")
 
-(defun json-ts-mode--imenu-1 (node)
-  "Helper for `json-ts-mode--imenu'.
-Find string representation for NODE and set marker, then recurse
-the subtrees."
-  (let* ((ts-node (car node))
-         (subtrees (mapcan #'json-ts-mode--imenu-1 (cdr node)))
-         (name (when ts-node
-                 (treesit-node-text
-                  (treesit-node-child-by-field-name
-                   ts-node "key")
-                  t)))
-         (marker (when ts-node
-                   (set-marker (make-marker)
-                               (treesit-node-start ts-node)))))
-    (cond
-     ((null ts-node) subtrees)
-     (subtrees
-      `((,name ,(cons name marker) ,@subtrees)))
-     (t
-      `((,name . ,marker))))))
-
-(defun json-ts-mode--imenu ()
-  "Return Imenu alist for the current buffer."
-  (let* ((node (treesit-buffer-root-node))
-         (tree (treesit-induce-sparse-tree
-                node "pair" nil 1000)))
-    (json-ts-mode--imenu-1 tree)))
+(defun json-ts-mode--defun-name (node)
+  "Return the defun name of NODE.
+Return nil if there is no name or if NODE is not a defun node."
+  (pcase (treesit-node-type node)
+    ((or "pair" "object")
+     (string-trim (treesit-node-text
+                   (treesit-node-child-by-field-name
+                    node "key")
+                   t)
+                  "\"" "\""))))
 
 ;;;###autoload
 (define-derived-mode json-ts-mode prog-mode "JSON"
@@ -161,6 +145,7 @@ the subtrees."
   ;; Navigation.
   (setq-local treesit-defun-type-regexp
               (rx (or "pair" "object")))
+  (setq-local treesit-defun-name-function #'json-ts-mode--defun-name)
 
   ;; Font-lock.
   (setq-local treesit-font-lock-settings json-ts-mode--font-lock-settings)
@@ -170,8 +155,8 @@ the subtrees."
                 (bracket delimiter error)))
 
   ;; Imenu.
-  (setq-local imenu-create-index-function #'json-ts-mode--imenu)
-  (setq-local which-func-functions nil) ;; Piggyback on imenu
+  (setq-local treesit-simple-imenu-settings
+              '((nil "\\`pair\\'" nil nil)))
 
   (treesit-major-mode-setup))
 
diff --git a/lisp/progmodes/ld-script.el b/lisp/progmodes/ld-script.el
index 7ba74777c45..01e8fd9e5e2 100644
--- a/lisp/progmodes/ld-script.el
+++ b/lisp/progmodes/ld-script.el
@@ -1,6 +1,6 @@
 ;;; ld-script.el --- GNU linker script editing mode for Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Masatake YAMATO <yamato@redhat.com>
 ;; Keywords: languages, faces
diff --git a/lisp/progmodes/m4-mode.el b/lisp/progmodes/m4-mode.el
index a18c8bcce44..2291fe60919 100644
--- a/lisp/progmodes/m4-mode.el
+++ b/lisp/progmodes/m4-mode.el
@@ -1,6 +1,6 @@
 ;;; m4-mode.el --- m4 code editing commands for Emacs  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1996-1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Andrew Csillag <drew@thecsillags.com>
 ;; Keywords: languages, faces
diff --git a/lisp/progmodes/make-mode.el b/lisp/progmodes/make-mode.el
index 4cee361df38..087974bd1f0 100644
--- a/lisp/progmodes/make-mode.el
+++ b/lisp/progmodes/make-mode.el
@@ -1,6 +1,6 @@
 ;;; make-mode.el --- makefile editing commands for Emacs -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: Thomas Neumann <tom@smart.bo.open.de>
 ;;     Eric S. Raymond <esr@snark.thyrsus.com>
diff --git a/lisp/progmodes/meta-mode.el b/lisp/progmodes/meta-mode.el
index 00bab00a0d4..eb83be3e317 100644
--- a/lisp/progmodes/meta-mode.el
+++ b/lisp/progmodes/meta-mode.el
@@ -1,6 +1,6 @@
 ;;; meta-mode.el --- major mode for editing Metafont or MetaPost sources -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Ulrik Vieth <vieth@thphy.uni-duesseldorf.de>
 ;; Version: 1.0
diff --git a/lisp/progmodes/mixal-mode.el b/lisp/progmodes/mixal-mode.el
index 358b347f6ef..ecf29ddffaf 100644
--- a/lisp/progmodes/mixal-mode.el
+++ b/lisp/progmodes/mixal-mode.el
@@ -1,6 +1,6 @@
 ;;; mixal-mode.el --- Major mode for the mix asm language.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Pieter E.J. Pareit <pieter.pareit@gmail.com>
 ;; Maintainer: Jose A Ortega Ruiz <jao@gnu.org>
diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el
index bce5bc3ba7f..f45490ef6c3 100644
--- a/lisp/progmodes/octave.el
+++ b/lisp/progmodes/octave.el
@@ -1,6 +1,6 @@
 ;;; octave.el --- editing octave source files under emacs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>
 ;;        John Eaton <jwe@octave.org>
diff --git a/lisp/progmodes/opascal.el b/lisp/progmodes/opascal.el
index fb1e501066d..0c503ab0fab 100644
--- a/lisp/progmodes/opascal.el
+++ b/lisp/progmodes/opascal.el
@@ -1,6 +1,6 @@
 ;;; opascal.el --- major mode for editing Object Pascal source in Emacs  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1998-1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Authors: Ray Blaak <blaak@infomatch.com>,
 ;;          Simon South <ssouth@member.fsf.org>
diff --git a/lisp/progmodes/pascal.el b/lisp/progmodes/pascal.el
index 9786b1aa455..0c73ea086a4 100644
--- a/lisp/progmodes/pascal.el
+++ b/lisp/progmodes/pascal.el
@@ -1,6 +1,6 @@
 ;;; pascal.el --- major mode for editing pascal source in Emacs -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1993-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2023 Free Software Foundation, Inc.
 
 ;; Author: Espen Skoglund <esk@gnu.org>
 ;; Keywords: languages
diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el
index 4dd0fd67a6b..ab6333e4b23 100644
--- a/lisp/progmodes/perl-mode.el
+++ b/lisp/progmodes/perl-mode.el
@@ -1,6 +1,6 @@
 ;;; perl-mode.el --- Perl code editing commands for GNU Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1990, 1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: William F. Mann
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el
index aa37a4ac865..04071703184 100644
--- a/lisp/progmodes/prog-mode.el
+++ b/lisp/progmodes/prog-mode.el
@@ -1,6 +1,6 @@
 ;;; prog-mode.el --- Generic major mode for programming  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
@@ -164,10 +164,8 @@ or follows point."
                  (treesit-node-type (treesit-node-at (point)))))))
       (if (or treesit-text-node
               (nth 8 (syntax-ppss))
-              (re-search-forward comment-start-skip (line-end-position) t))
-          (if (memq fill-paragraph-function '(t nil))
-              (lisp-fill-paragraph argument)
-            (funcall fill-paragraph-function argument))
+              (re-search-forward "\\s-*\\s<" (line-end-position) t))
+          (fill-paragraph argument (region-active-p))
         (beginning-of-defun)
         (let ((start (point)))
           (end-of-defun)
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 559da6dd649..730998727ce 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -1,6 +1,6 @@
 ;;; project.el --- Operations on the current project  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 ;; Version: 0.9.3
 ;; Package-Requires: ((emacs "26.1") (xref "1.4.0"))
 
@@ -1040,12 +1040,14 @@ by the user at will."
               (setq substrings (cons "./" substrings))))
          (new-collection (project--file-completion-table substrings))
          (abbr-cpd (abbreviate-file-name common-parent-directory))
+         (abbr-cpd-length (length abbr-cpd))
          (relname (cl-letf ((history-add-new-input nil)
                             ((symbol-value hist)
                              (mapcan
                               (lambda (s)
                                 (and (string-prefix-p abbr-cpd s)
-                                     (list (substring s (length abbr-cpd)))))
+                                     (not (eq abbr-cpd-length (length s)))
+                                     (list (substring s abbr-cpd-length))))
                               (symbol-value hist))))
                     (project--completing-read-strict prompt
                                                      new-collection
diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el
index 6e2c2513b01..1b48fe9c3a8 100644
--- a/lisp/progmodes/prolog.el
+++ b/lisp/progmodes/prolog.el
@@ -1,6 +1,6 @@
 ;;; prolog.el --- major mode for Prolog (and Mercury) -*- lexical-binding:t -*-
 
-;; Copyright (C) 1986-1987, 1997-1999, 2002-2003, 2011-2022 Free
+;; Copyright (C) 1986-1987, 1997-1999, 2002-2003, 2011-2023 Free
 ;; Software Foundation, Inc.
 
 ;; Authors: Emil Åström <emil_astrom(at)hotmail(dot)com>
diff --git a/lisp/progmodes/ps-mode.el b/lisp/progmodes/ps-mode.el
index 6355b17e4ad..1147db816bb 100644
--- a/lisp/progmodes/ps-mode.el
+++ b/lisp/progmodes/ps-mode.el
@@ -1,6 +1,6 @@
 ;;; ps-mode.el --- PostScript mode for GNU Emacs  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author:     Peter Kleiweg <p.c.j.kleiweg@rug.nl>
 ;; Created:    20 Aug 1997
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index bdc9e6fa78c..59164d7d50c 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -1,6 +1,6 @@
 ;;; python.el --- Python's flying circus support for Emacs -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Fabián E. Gallina <fgallina@gnu.org>
 ;; URL: https://github.com/fgallina/python.el
@@ -1080,7 +1080,6 @@ fontified."
 
    :feature 'string
    :language 'python
-   :override t
    '((string) @python--treesit-fontify-string)
 
    :feature 'string-interpolation
@@ -1097,9 +1096,7 @@ fontified."
 
    :feature 'function
    :language 'python
-   '((function_definition
-      name: (identifier) @font-lock-function-name-face)
-     (call function: (identifier) @font-lock-function-name-face)
+   '((call function: (identifier) @font-lock-function-name-face)
      (call function: (attribute
                       attribute: (identifier) @font-lock-function-name-face)))
 
@@ -1130,7 +1127,7 @@ fontified."
                  @font-lock-variable-name-face)
      (assignment left: (attribute
                         attribute: (identifier)
-                        @font-lock-variable-name-face))
+                        @font-lock-property-face))
      (pattern_list (identifier)
                    @font-lock-variable-name-face)
      (tuple_pattern (identifier)
@@ -1162,12 +1159,10 @@ fontified."
 
    :feature 'number
    :language 'python
-   :override t
    '([(integer) (float)] @font-lock-number-face)
 
    :feature 'property
    :language 'python
-   :override t
    '((attribute
       attribute: (identifier) @font-lock-property-face)
      (class_definition
@@ -1178,20 +1173,44 @@ fontified."
 
    :feature 'operator
    :language 'python
-   :override t
    `([,@python--treesit-operators] @font-lock-operator-face)
 
    :feature 'bracket
    :language 'python
-   :override t
    '(["(" ")" "[" "]" "{" "}"] @font-lock-bracket-face)
 
    :feature 'delimiter
    :language 'python
-   :override t
-   '(["," "." ":" ";" (ellipsis)] @font-lock-delimiter-face))
+   '(["," "." ":" ";" (ellipsis)] @font-lock-delimiter-face)
+
+   :feature 'variable
+   :language 'python
+   '((identifier) @python--treesit-fontify-variable))
   "Tree-sitter font-lock settings.")
 
+(defun python--treesit-variable-p (node)
+  "Check whether NODE is a variable.
+NODE's type should be \"identifier\"."
+  ;; An identifier can be a function/class name, a property, or a
+  ;; variables.  This function filters out function/class names and
+  ;; properties.
+  (pcase (treesit-node-type (treesit-node-parent node))
+    ((or "function_definition" "class_definition") nil)
+    ("attribute"
+     (pcase (treesit-node-field-name node)
+       ("object" t)
+       (_ nil)))
+    (_ t)))
+
+(defun python--treesit-fontify-variable (node override start end &rest _)
+  "Fontify an identifier node if it is a variable.
+For NODE, OVERRIDE, START, END, and ARGS, see
+`treesit-font-lock-rules'."
+  (when (python--treesit-variable-p node)
+    (treesit-fontify-with-override
+     (treesit-node-start node) (treesit-node-end node)
+     'font-lock-variable-name-face override start end)))
+
 
 ;;; Indentation
 
@@ -3717,19 +3736,35 @@ the python shell:
      appending extra empty lines so tracebacks are correct.
   3. When the region sent is a substring of the current buffer, a
      coding cookie is added.
-  4. Wraps indented regions under an \"if True:\" block so the
-     interpreter evaluates them correctly."
-  (let* ((start (save-excursion
-                  ;; If we're at the start of the expression, and
-                  ;; there's just blank space ahead of it, then expand
-                  ;; the region to include the start of the line.
-                  ;; This makes things work better with the rest of
-                  ;; the data we're sending over.
+  4. When the region consists of a single statement, leading
+     whitespaces will be removed.  Otherwise, wraps indented
+     regions under an \"if True:\" block so the interpreter
+     evaluates them correctly."
+  (let* ((single-p (save-restriction
+                     (narrow-to-region start end)
+                     (= (progn
+                          (goto-char start)
+                          (python-nav-beginning-of-statement))
+                        (progn
+                          (goto-char end)
+                          (python-nav-beginning-of-statement)))))
+         (start (save-excursion
+                  ;; If we're at the start of the expression, and if
+                  ;; the region consists of a single statement, then
+                  ;; remove leading whitespaces, else if there's just
+                  ;; blank space ahead of it, then expand the region
+                  ;; to include the start of the line.  This makes
+                  ;; things work better with the rest of the data
+                  ;; we're sending over.
                   (goto-char start)
-                  (if (string-blank-p
-                       (buffer-substring (line-beginning-position) start))
-                      (line-beginning-position)
-                    start)))
+                  (if single-p
+                      (progn
+                        (skip-chars-forward "[:space:]" end)
+                        (point))
+                    (if (string-blank-p
+                         (buffer-substring (line-beginning-position) start))
+                        (line-beginning-position)
+                      start))))
          (substring (buffer-substring-no-properties start end))
          (starts-at-point-min-p (save-restriction
                                   (widen)
@@ -3753,7 +3788,7 @@ the python shell:
       (python-mode)
       (when fillstr
         (insert fillstr))
-      (when (not toplevel-p)
+      (when (and (not single-p) (not toplevel-p))
         (forward-line -1)
         (insert "if True:\n")
         (delete-region (point) (line-end-position)))
@@ -3797,7 +3832,8 @@ code inside blocks delimited by \"if __name__== 
\\='__main__\\=':\".
 When called interactively SEND-MAIN defaults to nil, unless it's
 called with prefix argument.  When optional argument MSG is
 non-nil, forces display of a user-friendly message if there's no
-process running; defaults to t when called interactively."
+process running; defaults to t when called interactively.  The
+substring to be sent is retrieved using `python-shell-buffer-substring'."
   (interactive
    (list (region-beginning) (region-end) current-prefix-arg t))
   (let* ((string (python-shell-buffer-substring start end (not send-main)
@@ -4540,7 +4576,7 @@ Commands that must finish the tracking session are listed 
in
   (when (and python-pdbtrack-tracked-buffer
              ;; Empty input is sent by C-d or `comint-send-eof'
              (or (string-empty-p input)
-                 ;; "n some text" is "n" command for pdb. Split input and get 
firs part
+                 ;; "n some text" is "n" command for pdb. Split input and get 
first part
                  (let* ((command (car (split-string (string-trim input) " "))))
                    (setq python-pdbtrack-prev-command-continue
                          (or (member command python-pdbtrack-continue-command)
@@ -5448,6 +5484,16 @@ To this:
 
 ;;; Tree-sitter imenu
 
+(defun python--treesit-defun-name (node)
+  "Return the defun name of NODE.
+Return nil if there is no name or if NODE is not a defun node."
+  (pcase (treesit-node-type node)
+    ((or "function_definition" "class_definition")
+     (treesit-node-text
+      (treesit-node-child-by-field-name
+       node "name")
+      t))))
+
 (defun python--imenu-treesit-create-index-1 (node)
   "Given a sparse tree, create an imenu alist.
 
@@ -5473,9 +5519,8 @@ definition*\"."
                  ("class_definition" 'class)))
          ;; The root of the tree could have a nil ts-node.
          (name (when ts-node
-                 (treesit-node-text
-                  (treesit-node-child-by-field-name
-                   ts-node "name") t)))
+                 (or (treesit-defun-name ts-node)
+                     "Anonymous")))
          (marker (when ts-node
                    (set-marker (make-marker)
                                (treesit-node-start ts-node)))))
@@ -6637,12 +6682,14 @@ implementations: `python-mode' and `python-ts-mode'."
                   ( keyword string type)
                   ( assignment builtin constant decorator
                     escape-sequence number property string-interpolation )
-                  ( function bracket delimiter operator)))
+                  ( bracket delimiter function operator variable)))
     (setq-local treesit-font-lock-settings python--treesit-settings)
     (setq-local imenu-create-index-function
                 #'python-imenu-treesit-create-index)
     (setq-local treesit-defun-type-regexp (rx (or "function" "class")
                                               "_definition"))
+    (setq-local treesit-defun-name-function
+                #'python--treesit-defun-name)
     (treesit-major-mode-setup)
 
     (when python-indent-guess-indent-offset
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index fa51597697f..2e8d335f151 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -1,6 +1,6 @@
 ;;; ruby-mode.el --- Major mode for editing Ruby files -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Authors: Yukihiro Matsumoto
 ;;     Nobuyoshi Nakada
@@ -212,7 +212,7 @@ It should match the part after \"def\" and until \"=\".")
   :safe 'booleanp)
 
 (defcustom ruby-indent-level 2
-  "Indentation of Ruby statements."
+  "Number of spaces for each indentation step in `ruby-mode'."
   :type 'integer
   :safe 'integerp)
 
@@ -268,6 +268,113 @@ Only has effect when `ruby-use-smie' is t."
   :safe 'booleanp
   :version "24.4")
 
+(defcustom ruby-method-params-indent t
+  "Indentation  of multiline method parameters.
+
+When t, the parameters list is indented to the method name.
+
+When a number, indent the parameters list this many columns
+against the beginning of the method (the \"def\" keyword).
+
+The value nil means the same as 0.
+
+Only has effect when `ruby-use-smie' is t."
+  :type '(choice (const :tag "Indent to the method name" t)
+                 (number :tag "Indent specified number of columns against def")
+                 (const :tag "Indent to def" nil))
+  :safe (lambda (val) (or (memq val '(t nil)) (numberp val)))
+  :version "29.1")
+
+(defcustom ruby-block-indent t
+  "Non-nil to align the body of a block to the statement's start.
+
+The body and the closer will be aligned to the column where the
+statement containing the block starts. Example:
+
+  foo.bar
+    .each do
+    baz
+  end
+
+If nil, it will be aligned instead to the beginning of the line
+containing the block's opener:
+
+  foo.bar
+    .each do
+      baz
+    end
+
+Only has effect when `ruby-use-smie' is t."
+  :type 'boolean
+  :safe 'booleanp
+  :version "29.1")
+
+(defcustom ruby-after-operator-indent t
+  "Non-nil to use structural indentation after binary operators.
+
+The code will be aligned to the implicit parent expression,
+according to the operator precedence:
+
+  qux = 4 + 5 *
+            6 +
+        7
+
+Set it to nil to align to the beginning of the statement:
+
+  qux = 4 + 5 *
+    6 +
+    7
+
+Only has effect when `ruby-use-smie' is t."
+  :type 'boolean
+  :safe 'booleanp
+  :version "29.1")
+
+(defcustom ruby-method-call-indent t
+  "Non-nil to use the structural indentation algorithm.
+
+The method call will be aligned to the implicit parent
+expression, according to the operator precedence:
+
+  foo = subject
+          .update(
+            1
+          )
+
+Set it to nil to align to the beginning of the statement:
+
+  foo = subject
+    .update(
+      1
+    )
+
+Only has effect when `ruby-use-smie' is t."
+  :type 'boolean
+  :safe 'booleanp
+  :version "29.1")
+
+(defcustom ruby-parenless-call-arguments-indent t
+  "Non-nil to align arguments in a parenless call vertically.
+
+Example:
+
+  qux :+,
+      bar,
+      :[]=,
+      bar
+
+Set it to nil to align to the beginning of the statement:
+
+  qux :+,
+    bar,
+    :[]=,
+    bar
+
+Only has effect when `ruby-use-smie' is t."
+  :type 'boolean
+  :safe 'booleanp
+  :version "29.1")
+
 (defcustom ruby-deep-arglist t
   "Deep indent lists in parenthesis when non-nil.
 Also ignores spaces after parenthesis when `space'.
@@ -399,6 +506,7 @@ This only affects the output of the command 
`ruby-toggle-block'."
      '((right "=")
        (right "+=" "-=" "*=" "/=" "%=" "**=" "&=" "|=" "^="
               "<<=" ">>=" "&&=" "||=")
+       (right "?")
        (nonassoc ".." "...")
        (left "&&" "||")
        (nonassoc "<=>")
@@ -591,10 +699,10 @@ This only affects the output of the command 
`ruby-toggle-block'."
           "def=")
          (t tok)))))))
 
-(defun ruby-smie--indent-to-stmt ()
+(defun ruby-smie--indent-to-stmt (&optional offset)
   (save-excursion
     (smie-backward-sexp ";")
-    (cons 'column (smie-indent-virtual))))
+    (cons 'column (+ (smie-indent-virtual) (or offset 0)))))
 
 (defun ruby-smie--indent-to-stmt-p (keyword)
   (or (eq t ruby-align-to-stmt-keywords)
@@ -625,7 +733,9 @@ This only affects the output of the command 
`ruby-toggle-block'."
               (forward-comment -1)
               (not (eq (preceding-char) ?:))))
        ;; Curly block opener.
-       (ruby-smie--indent-to-stmt))
+       (if ruby-block-indent
+           (ruby-smie--indent-to-stmt)
+         (cons 'column (current-indentation))))
       ((smie-rule-hanging-p)
        ;; Treat purely syntactic block-constructs as being part of their 
parent,
        ;; when the opening token is hanging and the parent is not an
@@ -660,10 +770,20 @@ This only affects the output of the command 
`ruby-toggle-block'."
        (unless (or (eolp) (forward-comment 1))
          (cons 'column (current-column)))))
     ('(:before . " @ ")
-     (save-excursion
-       (skip-chars-forward " \t")
-       (cons 'column (current-column))))
-    ('(:before . "do") (ruby-smie--indent-to-stmt))
+     (cond
+      ((and (not ruby-parenless-call-arguments-indent)
+            (not (smie-rule-parent-p "def" "def=")))
+       (ruby-smie--indent-to-stmt ruby-indent-level))
+      ((or (eq ruby-method-params-indent t)
+           (not (smie-rule-parent-p "def" "def=")))
+       (save-excursion
+         (skip-chars-forward " \t")
+         (cons 'column (current-column))))
+      (t (smie-rule-parent (or ruby-method-params-indent 0)))))
+    ('(:before . "do")
+     (if ruby-block-indent
+         (ruby-smie--indent-to-stmt)
+       (cons 'column (current-indentation))))
     ('(:before . ".")
      (if (smie-rule-sibling-p)
          (when ruby-align-chained-calls
@@ -676,8 +796,10 @@ This only affects the output of the command 
`ruby-toggle-block'."
                    (not (smie-rule-bolp)))))
            (cons 'column (current-column)))
        (smie-backward-sexp ".")
-       (cons 'column (+ (current-column)
-                        ruby-indent-level))))
+       (if ruby-method-call-indent
+           (cons 'column (+ (current-column)
+                            ruby-indent-level))
+         (ruby-smie--indent-to-stmt ruby-indent-level))))
     (`(:before . ,(or "else" "then" "elsif" "rescue" "ensure"))
      (smie-rule-parent))
     (`(:before . ,(or "when" "in"))
@@ -688,16 +810,22 @@ This only affects the output of the command 
`ruby-toggle-block'."
                      "<=>" ">" "<" ">=" "<=" "==" "===" "!=" "<<" ">>"
                      "+=" "-=" "*=" "/=" "%=" "**=" "&=" "|=" "^=" "|"
                      "<<=" ">>=" "&&=" "||=" "and" "or"))
-     (and (smie-rule-parent-p ";" nil)
-          (smie-indent--hanging-p)
-          ruby-indent-level))
+     (cond
+      ((not ruby-after-operator-indent)
+       (ruby-smie--indent-to-stmt ruby-indent-level))
+      ((and (smie-rule-parent-p ";" nil)
+            (smie-indent--hanging-p))
+       ruby-indent-level)))
     (`(:before . "=")
      (save-excursion
       (and (smie-rule-parent-p " @ ")
            (goto-char (nth 1 (smie-indent--parent)))
            (smie-rule-prev-p "def=")
            (cons 'column (+ (current-column) ruby-indent-level -3)))))
-    (`(:after . ,(or "?" ":")) ruby-indent-level)
+    (`(:after . ,(or "?" ":"))
+     (if ruby-after-operator-indent
+         ruby-indent-level
+       (ruby-smie--indent-to-stmt ruby-indent-level)))
     (`(:before . ,(guard (memq (intern-soft token) ruby-alignable-keywords)))
      (when (not (ruby--at-indentation-p))
        (if (ruby-smie--indent-to-stmt-p token)
@@ -705,7 +833,10 @@ This only affects the output of the command 
`ruby-toggle-block'."
          (cons 'column (current-column)))))
     ('(:before . "iuwu-mod")
      (smie-rule-parent ruby-indent-level))
-    ))
+    (`(:before . ",")
+     (and (not ruby-parenless-call-arguments-indent)
+          (smie-rule-parent-p " @ ")
+          (ruby-smie--indent-to-stmt ruby-indent-level)))))
 
 (defun ruby--at-indentation-p (&optional point)
   (save-excursion
@@ -768,24 +899,6 @@ This only affects the output of the command 
`ruby-toggle-block'."
       (while (and (setq state (apply #'ruby-parse-partial end state))
                     (>= (nth 2 state) 0) (< (point) end))))))
 
-(defun ruby-mode-variables ()
-  "Set up initial buffer-local variables for Ruby mode."
-  (setq indent-tabs-mode ruby-indent-tabs-mode)
-  (smie-setup ruby-smie-grammar #'ruby-smie-rules
-              :forward-token  #'ruby-smie--forward-token
-              :backward-token #'ruby-smie--backward-token)
-  (unless ruby-use-smie
-    (setq-local indent-line-function #'ruby-indent-line))
-  (setq-local comment-start "# ")
-  (setq-local comment-end "")
-  (setq-local comment-column ruby-comment-column)
-  (setq-local comment-start-skip "#+ *")
-  (setq-local parse-sexp-ignore-comments t)
-  (setq-local parse-sexp-lookup-properties t)
-  (setq-local paragraph-start (concat "$\\|" page-delimiter))
-  (setq-local paragraph-separate paragraph-start)
-  (setq-local paragraph-ignore-fill-prefix t))
-
 (defun ruby--insert-coding-comment (encoding)
   "Insert a magic coding comment for ENCODING.
 The style of the comment is controlled by `ruby-encoding-magic-comment-style'."
@@ -1879,7 +1992,7 @@ or `gem' statement around point."
       (setq feature-name (read-string "Feature name: " init))))
   (let ((out
          (substring
-          (shell-command-to-string (concat "gem which " feature-name))
+          (shell-command-to-string (concat "gem which " (shell-quote-argument 
feature-name)))
           0 -1)))
     (if (string-match-p "\\`ERROR" out)
         (user-error "%s" out)
@@ -2498,29 +2611,54 @@ If there is no Rubocop config file, Rubocop will be 
passed a flag
   "Value for `prettify-symbols-alist' in `ruby-mode'.")
 
 ;;;###autoload
-(define-derived-mode ruby-mode prog-mode "Ruby"
-  "Major mode for editing Ruby code."
-  (ruby-mode-variables)
+(define-derived-mode ruby-base-mode prog-mode "Ruby"
+  "Generic major mode for editing Ruby.
 
-  (setq-local imenu-create-index-function #'ruby-imenu-create-index)
-  (setq-local add-log-current-defun-function #'ruby-add-log-current-method)
-  (setq-local beginning-of-defun-function #'ruby-beginning-of-defun)
-  (setq-local end-of-defun-function #'ruby-end-of-defun)
+This mode is intended to be inherited by concrete major modes.
+Currently there are `ruby-mode' and `ruby-ts-mode'."
+  (setq indent-tabs-mode ruby-indent-tabs-mode)
+
+  (setq-local comment-start "# ")
+  (setq-local comment-end "")
+  (setq-local comment-column ruby-comment-column)
+  (setq-local comment-start-skip "#+ *")
+
+  (setq-local parse-sexp-ignore-comments t)
+  (setq-local parse-sexp-lookup-properties t)
+
+  (setq-local paragraph-start (concat "$\\|" page-delimiter))
+  (setq-local paragraph-separate paragraph-start)
+  (setq-local paragraph-ignore-fill-prefix t)
 
   ;; `outline-regexp' contains the first part of `ruby-indent-beg-re'
   (setq-local outline-regexp (concat "^\\s *"
                                      (regexp-opt '("class" "module" "def"))
                                      "\\_>"))
   (setq-local outline-level (lambda () (1+ (/ (current-indentation)
-                                              ruby-indent-level))))
+                                         ruby-indent-level))))
 
   (add-hook 'after-save-hook #'ruby-mode-set-encoding nil 'local)
   (add-hook 'electric-indent-functions #'ruby--electric-indent-p nil 'local)
   (add-hook 'flymake-diagnostic-functions #'ruby-flymake-auto nil 'local)
 
+  (setq-local prettify-symbols-alist ruby--prettify-symbols-alist))
+
+;;;###autoload
+(define-derived-mode ruby-mode ruby-base-mode "Ruby"
+  "Major mode for editing Ruby code."
+  (smie-setup ruby-smie-grammar #'ruby-smie-rules
+              :forward-token  #'ruby-smie--forward-token
+              :backward-token #'ruby-smie--backward-token)
+  (unless ruby-use-smie
+    (setq-local indent-line-function #'ruby-indent-line))
+
+  (setq-local imenu-create-index-function #'ruby-imenu-create-index)
+  (setq-local add-log-current-defun-function #'ruby-add-log-current-method)
+  (setq-local beginning-of-defun-function #'ruby-beginning-of-defun)
+  (setq-local end-of-defun-function #'ruby-end-of-defun)
+
   (setq-local font-lock-defaults '((ruby-font-lock-keywords) nil nil
                                    ((?_ . "w"))))
-  (setq-local prettify-symbols-alist ruby--prettify-symbols-alist)
 
   (setq-local syntax-propertize-function #'ruby-syntax-propertize))
 
diff --git a/lisp/progmodes/ruby-ts-mode.el b/lisp/progmodes/ruby-ts-mode.el
new file mode 100644
index 00000000000..5c173ad24c7
--- /dev/null
+++ b/lisp/progmodes/ruby-ts-mode.el
@@ -0,0 +1,945 @@
+;;; ruby-ts-mode.el --- Major mode for editing Ruby files using tree-sitter 
-*- lexical-binding: t; -*-
+
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
+
+;; Author: Perry Smith <pedz@easesoftware.com>
+;; Created: December 2022
+;; Keywords: ruby languages tree-sitter
+
+;; 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:
+
+;; This file defines ruby-ts-mode which is a major mode for editing
+;; Ruby files that uses Tree Sitter to parse the language. More
+;; information about Tree Sitter can be found in the ELisp Info pages
+;; as well as this website: https://tree-sitter.github.io/tree-sitter/
+
+;; For this major mode to work, Emacs has to be compiled with
+;; tree-sitter support, and the Ruby grammar has to be compiled and
+;; put somewhere Emacs can find it.  See the docstring of
+;; `treesit-extra-load-path'.
+
+;; This mode doesn't associate itself with .rb files automatically.
+;; You can do that either by prepending to the value of
+;; `auto-mode-alist', or using `major-mode-remap-alist'.
+
+;; Tree Sitter brings a lot of power and versitility which can be
+;; broken into these features.
+
+;; * Font Lock
+
+;; The ability to color the source code is not new but what is new is
+;; the versatility to enable and disable particular font lock rules.
+;; I suggest reviewing variable treesit-font-lock-level and function
+;; treesit-font-lock-recompute-features to get a better understanding
+;; of the following.
+
+;; Currently tree treesit-font-lock-feature-list is set with the
+;; following levels:
+;;   1: comment method-definition
+;;   2: keyword regexp string type
+;;   3: builtin constant delimiter escape-sequence
+;;      global instance
+;;      interpolation literal symbol variable
+;;   4: bracket error function operator punctuation
+
+;; Thus if treesit-font-lock-level is set to level 3 which is its
+;; default, all the features listed in levels 1 through 3 above will
+;; be enabled.  i.e. those features will font lock or colorize the
+;; code accordingly.  Individual features can be added and removed via
+;; treesit-font-lock-recompute-features.
+
+;; describe-face can be used to view how a face looks.
+
+;; * Indent
+
+;; ruby-ts-mode tries to adhere to the indentation related user
+;; options from ruby-mode, such as ruby-indent-level,
+;; ruby-indent-tabs-mode, and so on.
+
+;; * IMenu
+;; * Navigation
+;; * Which-func
+
+;;; Code:
+
+(require 'treesit)
+(require 'ruby-mode)
+
+(declare-function treesit-parser-create "treesit.c")
+
+(defgroup ruby-ts nil
+  "Major mode for editing Ruby code."
+  :prefix "ruby-ts-"
+  :group 'languages)
+
+(defcustom ruby-ts-highlight-predefined-constants t
+  "When non-nil, the pre-defined constants are highlighted.
+They will be highlighted the same way as the pre-defined variables."
+  :type 'boolean)
+
+(defvar ruby-ts--operators
+  '("+" "-" "*" "/" "%" "**"
+    "==" "!=" ">" "<" ">=" "<=" "<=>" "==="
+    "=" "+=" "-=" "*=" "/=" "%=" "**="
+    "&" "|" "^" "~" "<<" ">>"
+    "!" "&&" "and" "not" "or" "||"
+    "?" ":"
+    ".." "..."
+    "defined?"
+    "." "::")
+  "Ruby operators for tree-sitter font-locking.")
+
+(defvar ruby-ts--delimiters '("," ";")
+  "Ruby's punctuation characters.")
+
+(defvar ruby-ts--predefined-constants
+  (rx (or "ARGF" "ARGV" "DATA" "ENV" "RUBY_COPYRIGHT"
+          "RUBY_DESCRIPTION" "RUBY_ENGINE" "RUBY_ENGINE_VERSION"
+          "RUBY_PATCHLEVEL" "RUBY_PLATFORM" "RUBY_RELEASE_DATE"
+          "RUBY_REVISION" "RUBY_VERSION" "STDERR" "STDIN" "STDOUT"
+          "TOPLEVEL_BINDING"))
+  "Ruby predefined global constants.
+These are currently unused")
+
+(defvar ruby-ts--predefined-variables
+  (rx (or "$!" "$@" "$~" "$&" "$‘" "$‘" "$+" "$=" "$/" "$\\" "$," "$;"
+          "$." "$<" "$>" "$_" "$*" "$$" "$?" "$:" "$LOAD_PATH"
+          "$LOADED_FEATURES" "$DEBUG" "$FILENAME" "$stderr" "$stdin"
+          "$stdout" "$VERBOSE" "$-a" "$-i" "$-l" "$-p"
+          (seq "$" (+ digit))))
+  "Ruby global variables (but not global constants.")
+
+(defconst ruby-ts--class-or-module-regex
+  (rx string-start
+      (or "class" "module" "singleton_class")
+      string-end)
+  "Regular expression that matches a class or module's node type.")
+
+(defconst ruby-ts--method-regex
+  (rx string-start
+      (or "method" "singleton_method")
+      string-end)
+  "Regular expression matching methods and singleton methods.")
+
+(defconst ruby-ts--statement-container-regexp
+  (rx string-start
+      (or "program"
+          "block_body"
+          "begin_block"
+          "end_block"
+          "do"
+          "else"
+          "then"
+          "ensure"
+          "body_statement"
+          "parenthesized_statements"
+          "interpolation")
+      string-end)
+  "Regular expression of the nodes that can contain statements.")
+
+(defun ruby-ts--lineno (node)
+  "Return line number of NODE's start."
+  (line-number-at-pos (treesit-node-start node)))
+
+;; doc/keywords.rdoc in the Ruby git repository considers these to be
+;; reserved keywords.  If these keywords are added to the list, it
+;; causes the font-lock to stop working.
+;;
+;; "__ENCODING__" "__FILE__" "__LINE__" "false" "self" "super" "true"
+;;
+;; "nil" (which does not exhibit this issue) is also considered a
+;; keyword but I removed it and added it as a constant.
+;;
+(defvar ruby-ts--keywords
+  '("BEGIN" "END" "alias" "and" "begin" "break" "case" "class"
+    "def" "defined?" "do" "else" "elsif" "end" "ensure" "for"
+    "if" "in" "module" "next" "not" "or" "redo" "rescue"
+    "retry" "return" "then" "undef" "unless" "until" "when"
+    "while" "yield")
+  "Ruby keywords for tree-sitter font-locking.")
+
+(defun ruby-ts--comment-font-lock (node override start end &rest _)
+  "Apply font lock to comment NODE within START and END.
+Applies `font-lock-comment-delimiter-face' and
+`font-lock-comment-face' See `treesit-fontify-with-override' for
+values of OVERRIDE"
+  ;; Empirically it appears as if (treesit-node-start node) will be
+  ;; where the # character is at and (treesit-node-end node) will be
+  ;; the end of the line
+  (let* ((node-start (treesit-node-start node))
+         (plus-1 (1+ node-start))
+         (node-end (treesit-node-end node))
+         (text (treesit-node-text node t)))
+    (if (and (>= node-start start)
+             (<= plus-1 end)
+             (string-match-p "\\`#" text))
+        (treesit-fontify-with-override node-start plus-1
+                                       font-lock-comment-delimiter-face 
override))
+    (treesit-fontify-with-override (max plus-1 start) (min node-end end)
+                                   font-lock-comment-face override)))
+
+(defun ruby-ts--font-lock-settings (language)
+  "Tree-sitter font-lock settings for Ruby."
+  (treesit-font-lock-rules
+   :language language
+   :feature 'comment
+   '((comment) @ruby-ts--comment-font-lock)
+
+   :language language
+   :feature 'builtin
+   `(((global_variable) @var (:match ,ruby-ts--predefined-variables @var)) 
@font-lock-builtin-face
+     ,@(when ruby-ts-highlight-predefined-constants
+         `(((constant) @var (:match ,ruby-ts--predefined-constants @var)) 
@font-lock-builtin-face)))
+
+   :language language
+   :feature 'keyword
+   `([,@ruby-ts--keywords] @font-lock-keyword-face)
+
+   :language language
+   :feature 'constant
+   '((true) @font-lock-doc-markup-face
+     (false) @font-lock-doc-markup-face
+     (nil) @font-lock-doc-markup-face
+     (self) @font-lock-doc-markup-face
+     (super) @font-lock-doc-markup-face)
+
+   :language language
+   :feature 'symbol
+   '((bare_symbol) @font-lock-constant-face
+     (delimited_symbol (string_content) @font-lock-constant-face)
+     (hash_key_symbol) @font-lock-constant-face
+     (simple_symbol) @font-lock-constant-face)
+
+   ;; Before 'operator so (unary) works.
+   :language language
+   :feature 'literal
+   '((unary ["+" "-"] [(integer) (rational) (float) (complex)]) 
@font-lock-number-face
+     (integer) @font-lock-number-face
+     (float) @font-lock-number-face
+     (complex) @font-lock-number-face
+     (rational) @font-lock-number-face)
+
+   ;; Also before 'operator because % and / are operators
+   :language language
+   :feature 'regexp
+   ;; TODO: We probably need a separate face for regexps everywhere.
+   ;; Maybe another one for regexp delimiters as well.
+   '((regex "/" @font-lock-string-face)
+     (regex _ (string_content) @font-lock-string-face))
+
+   :language language
+   :feature 'operator
+   `("!" @font-lock-negation-char-face
+     [,@ruby-ts--operators] @font-lock-operator-face)
+
+   ;; TODO: Consider using a different face for string delimiters.
+   ;; font-lock-delimiter-face is not a good choice, though, because it
+   ;; looks like 'default' in the default theme, and its documented purpose
+   ;; is characters like commas, semicolons, etc.
+   :language language
+   :feature 'string
+   '((delimited_symbol [ ":\"" "\"" ] @font-lock-string-face)
+     (string "\"" @font-lock-string-face)
+     (string_array ["%w(" ")"] @font-lock-string-face)
+     (subshell "`" @font-lock-string-face)
+     (symbol_array ["%i(" ")"] @font-lock-constant-face))
+
+   :language language
+   :feature 'string
+   '([(string_content)
+      (heredoc_beginning)
+      (heredoc_content)
+      (heredoc_end)]
+     @font-lock-string-face)
+
+   :language language
+   :feature 'interpolation
+   '((interpolation "#{" @font-lock-delimiter-face)
+     (interpolation "}" @font-lock-delimiter-face))
+
+   :language language
+   :feature 'type
+   '((constant) @font-lock-type-face)
+
+   :language language
+   :feature 'global
+   '((global_variable) @font-lock-variable-name-face)
+
+   :language language
+   :feature 'instance
+   '((instance_variable) @font-lock-variable-name-face)
+
+   :language language
+   :feature 'method-definition
+   '((method
+      name: (identifier) @font-lock-function-name-face)
+     (singleton_method
+      name: (identifier) @font-lock-function-name-face)
+     (method
+      name: (setter) @font-lock-function-name-face))
+
+   ;; Yuan recommends also putting method definitions into the
+   ;; 'function' category (thus keeping it in both).  I've opted to
+   ;; just use separate categories for them -- dgutov.
+   :language language
+   :feature 'function
+   '((call
+      method: (identifier) @font-lock-function-name-face))
+
+   :language language
+   :feature 'error
+   '((ERROR) @font-lock-warning-face)
+
+   :feature 'escape-sequence
+   :language language
+   :override t
+   '((escape_sequence) @font-lock-escape-face)
+
+   :language language
+   :feature 'bracket
+   '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face)
+
+   :language language
+   :feature 'punctuation
+   `(([,@ruby-ts--delimiters] @font-lock-delimiter-face))))
+
+(defun ruby-ts--first-non-comment-child (node)
+  "Return the first named child of NODE that is not a comment."
+  (let ((child (treesit-node-child node 0 t)))
+    (while (and child
+                (equal "comment" (treesit-node-type child)))
+      (setq child (treesit-node-next-sibling child t)))
+    child))
+
+;;
+;; These routines would be better added to treesit.el  They are
+;; intended to be used with indent rules
+;;
+;; I think this is over simplified but basically
+;; treesit--simple-indent-eval calls the result with node, parent, and
+;; bol. Thus all of these functions return a lambda that accepts three
+;; arguments.  Somewhere something explains that &rest should always
+;; be used in case extra arguments are added in the future.
+;;
+
+(defun ruby-ts--type-pred (regexp)
+  "Return predicate taking a node returning non-nil if REGEXP matches type of 
node."
+  (lambda (node)
+    (string-match-p regexp (treesit-node-type node))))
+
+(defun ruby-ts--parent-node (_n parent &rest _)
+  "Return the PARENT node matching ident rule."
+  parent)
+
+(defun ruby-ts--align-keywords (pred)
+  "Return either start or bol of PRED.
+PRED should specify a node that is listed in
+`ruby-alignable-keywords'.  If PRED is listed in user option
+`ruby-align-to-stmt-keywords', then return the BOL of PRED.
+Otherwise return start of PRED."
+  (lambda (node parent bol &rest rest)
+    (let* ((pred-node (funcall pred node parent bol rest))
+           (temp (treesit-node-start pred-node))
+           (type (treesit-node-type pred-node))
+           (bol (ruby-smie--indent-to-stmt-p
+                 (if (equal type "method")
+                     "def"
+                   type))))
+      (when temp
+        (if bol
+            (save-excursion
+              (goto-char temp)
+              (back-to-indentation)
+              (point))
+          temp)))))
+
+(defun ruby-ts--bol (pred)
+  "Return bol of PRED.
+PRED should take (node parent bol &rest rest) and return a node.
+Returns bol of the current line if PRED returns nil."
+  (lambda (node parent bol &rest rest)
+    (save-excursion
+      (let ((temp (treesit-node-start (funcall pred node parent bol rest))))
+        (if temp
+            (goto-char temp))
+        (back-to-indentation)
+        (point)))))
+
+(defun ruby-ts--grand-parent-node (_n parent &rest _)
+  "Return parent of PARENT node."
+  (treesit-node-parent parent))
+
+(defun ruby-ts--align-chain-p (&rest _)
+  "Return value of `ruby-align-chained-calls'."
+  ruby-align-chained-calls)
+
+(defun ruby-ts--parenless-call-arguments-indent-p (&rest _)
+  "Return value of `ruby-parenless-call-arguments-indent'."
+  ruby-parenless-call-arguments-indent)
+
+(defun ruby-ts--align-chain (_n parent &rest _)
+  "Align chained method call.
+Align NODE which will be the dot (.) to the dot of the
+first (outermost) call in the chain.  See
+`ruby-align-chained-calls' for details.  PARENT will be the
+\"call\" node.  Called only when `ruby-align-chained-calls' is
+non-nil."
+  (let* (first-call )
+    (while (and parent
+                (setq first-call (treesit-node-parent parent))
+                (string-match-p "call" (treesit-node-type first-call)))
+      (setq parent first-call))
+    (treesit-node-start (treesit-search-subtree parent "\\." nil t))))
+
+(defun ruby-ts--same-line-args-p (_n parent &rest _)
+  "Return non-nil when first argument is on the same line as the method.
+PARENT will be argument_list.  NODE can be the close paren."
+  (let* ((method (treesit-node-parent parent))
+         (first-param (ruby-ts--first-non-comment-child parent)))
+    (= (ruby-ts--lineno method) (ruby-ts--lineno first-param))))
+
+(defun ruby-ts--same-line-params-p (_n parent &rest _)
+  "Return non-nil when first parameter is on the same line as the method.
+PARENT will be method_parameters.  NODE can be the close paren."
+  (let* ((method (treesit-node-parent parent))
+         (first-param (ruby-ts--first-non-comment-child parent)))
+    (= (ruby-ts--lineno method) (ruby-ts--lineno first-param))))
+
+(defun ruby-ts--param-indent (_n parent &rest _)
+  "Indent parameters that start on next line.
+Given: NODE is the parameter.  PARENT is
+method_parameters.  `ruby-ts--same-line-params-p' is nil.
+Indent according to `ruby-method-params-indent'.
+
+If `ruby-method-params-indent' is 0
+def foo(
+  param1,
+  param2
+)
+
+Params start on next line, `ruby-method-params-indent' is t
+def foo(
+      param1,
+      param2
+    )"
+  (let ((method (treesit-node-parent parent)))
+    (if (eq t ruby-method-params-indent)
+        ;; For methods, the "name" is the name of the method but for
+        ;; singleton methods, we need to find "object"
+        (let* ((singleton (equal "singleton_method" (treesit-node-type 
method)))
+               (name-node (treesit-node-child-by-field-name
+                           method
+                           (if singleton "object" "name"))))
+          ;; (message "name-node: %S" name-node)
+          (treesit-node-start name-node))
+      ;; Small Danger: if the method name plus the parent is less than
+      ;; `ruby-method-params-indent', then the addition will put the
+      ;; result on the next line and indented incorrectly.  There are
+      ;; plausible ways to fix this but the probability seems rather
+      ;; remote.
+      (+ (treesit-node-start method) (or ruby-method-params-indent 0)))))
+
+(defun ruby-ts--true (&rest _)
+  "I have no idea why I can't just put t but I can put 0."
+  t)
+
+(defun ruby-ts--same-line-hash-array-p (_n parent &rest _)
+  "Return non-nil if first element and open brace are on the same line.
+NODE is the element or closing brace or bracket.  PARENT is the
+array or hash."
+  (let* ((open-brace (treesit-node-child parent 0 nil))
+         (first-child (ruby-ts--first-non-comment-child parent)))
+    (= (ruby-ts--lineno open-brace) (ruby-ts--lineno first-child))))
+
+(defun ruby-ts--assignment-ancestor (node &rest _)
+  "Return the assignment ancestor of NODE if any."
+  (treesit-parent-until node (ruby-ts--type-pred "\\`assignment\\'")))
+
+(defun ruby-ts--statement-ancestor (node &rest _)
+  "Return the statement ancestor of NODE if any.
+A statement is defined as a child of a statement container where
+a statement container is a node that matches
+`ruby-ts--statement-container-regexp'."
+  (let* ((statement node)
+         (parent (treesit-node-parent statement)))
+    (while (and parent
+                statement
+                (not (string-match-p ruby-ts--statement-container-regexp
+                                     (treesit-node-type parent))))
+      (setq statement parent
+            parent (treesit-node-parent parent)))
+    statement))
+
+(defun ruby-ts--is-in-condition (node &rest _)
+  "Return the condition node if NODE is within a condition."
+  (while (and node
+              (not (equal "condition" (treesit-node-field-name node)))
+              (not (string-match-p ruby-ts--statement-container-regexp
+                                   (treesit-node-type node))))
+    (setq node (treesit-node-parent node)))
+  (and (equal "condition" (treesit-node-field-name node)) node))
+
+(defun ruby-ts--endless-method (node &rest _)
+  "Return the expression node if NODE is in an endless method.
+i.e. expr of def foo(args) = expr is returned."
+  (let* ((method node))
+    (while (and method
+                (not (string-match-p ruby-ts--method-regex (treesit-node-type 
method))))
+      (setq method (treesit-node-parent method)))
+    (when method
+      (if (equal "=" (treesit-node-type (treesit-node-child method 3 nil)))
+          (treesit-node-child method 4 nil)))))
+
+;;
+;; end of functions that can be used for queries
+;;
+
+(defun ruby-ts--indent-rules ()
+  "Indent rules supported by `ruby-ts-mode'."
+  (let ((common
+         `(
+           ;; Slam all top level nodes to the left margin
+           ((parent-is "program") parent 0)
+
+           ;; Do not indent here docs or the end.  Not sure why it
+           ;; takes the grand-parent but ok fine.
+           ((n-p-gp nil nil "heredoc_body") no-indent 0)
+           ((parent-is "heredoc_body") no-indent 0)
+           ((node-is "heredoc_body") no-indent 0)
+           ;; Do not indent multiline regexp
+           ((n-p-gp nil nil "regex") no-indent 0)
+           ((parent-is "regex") no-indent 0)
+
+           ;; if then else elseif notes:
+           ;;
+           ;;   1. The "then" starts at the end of the line that ends
+           ;;      the if condition which can be on a different line
+           ;;      from the "if".
+           ;;
+           ;;   2. If there is an "elsif", it is a sibling to the then
+           ;;      BUT the "else" that follows is now a child of the
+           ;;      "elsif".
+           ;;
+           ;;   3. The statements within each of these are direct
+           ;;      children.  There is no intermediate construct such
+           ;;      as a block_statement.
+           ;;
+           ;; I'm using very restrictive patterns hoping to reduce rules
+           ;; triggering unintentionally.
+           ((match "else" "if")
+            (ruby-ts--align-keywords ruby-ts--parent-node) 0)
+           ((match "elsif" "if")
+            (ruby-ts--align-keywords ruby-ts--parent-node) 0)
+           ((match "end" "if")
+            (ruby-ts--align-keywords ruby-ts--parent-node) 0)
+           ((n-p-gp nil "then\\|else\\|elsif" "if\\|unless")
+            (ruby-ts--align-keywords ruby-ts--grand-parent-node) 
ruby-indent-level)
+
+           ;; case expression: when, in_clause, and else are all
+           ;; children of case.  when and in_clause have pattern and
+           ;; body as fields.  body has "then" and then the statemets.
+           ;; i.e. the statements are not children of when but then.
+           ;; But for the statements are children of else.
+           ((match "when" "case")
+            (ruby-ts--align-keywords ruby-ts--parent-node) 0)
+           ((match "in_clause" "case")
+            (ruby-ts--align-keywords ruby-ts--parent-node) 0)
+           ((match "else" "case")
+            (ruby-ts--align-keywords ruby-ts--parent-node) 0)
+           ((match "end" "case")
+            (ruby-ts--align-keywords ruby-ts--parent-node) 0)
+           ((n-p-gp nil "then" "when") grand-parent ruby-indent-level)
+           ((n-p-gp nil "then" "in_clause") grand-parent ruby-indent-level)
+           ((n-p-gp nil "else" "case") parent ruby-indent-level)
+
+           ;; The beauty of inconsistency :-)
+           ;; while / until have only "do" as a child.  The "end" is a
+           ;; child of "do".
+           ((n-p-gp "end" "do" "while\\|until")
+            (ruby-ts--align-keywords ruby-ts--grand-parent-node) 0)
+           ((n-p-gp nil "do" "while\\|until")
+            (ruby-ts--align-keywords ruby-ts--grand-parent-node) 
ruby-indent-level)
+           ;; begin can have rescue, ensure, else, and end.
+           ;; statements are a child of begin.  rescue, ensure, else,
+           ;; and end are also children of begin.  rescue has a then
+           ;; as a child thus statements will be grand children of
+           ;; rescue.
+           ((n-p-gp nil "then" "rescue")
+            (ruby-ts--align-keywords ruby-ts--grand-parent-node) 
ruby-indent-level)
+           ((n-p-gp nil "ensure\\|else" "begin")
+            (ruby-ts--align-keywords ruby-ts--parent-node) ruby-indent-level)
+           ((match "rescue\\|ensure\\|else\\|end" "begin")
+            (ruby-ts--align-keywords ruby-ts--parent-node) 0)
+           ((parent-is "begin")           ;last
+            (ruby-ts--align-keywords ruby-ts--parent-node) ruby-indent-level)
+
+           ;; for ... I don't think I have ever used a for loop in
+           ;; Ruby.  The "in" (not an in_clause) and "do" are
+           ;; children.  The statements are children of the "do".
+           ;; And, of course, the "end" is a child of the "do".
+           ((n-p-gp "end" "do" "for")
+            (ruby-ts--align-keywords ruby-ts--grand-parent-node) 0)
+           ((n-p-gp nil "do" "for")
+            (ruby-ts--align-keywords ruby-ts--grand-parent-node) 
ruby-indent-level)
+
+           ;; method has a "body_statement" and the "end" as children.
+           ;; The body_statement can have rescue, ensure, and else as
+           ;; well as statements.  Note that the first statement of a
+           ;; body_statement hits the node as "body_statement" and not
+           ;; as the assignment, etc.
+           ((match "end" ,ruby-ts--method-regex)
+            (ruby-ts--align-keywords ruby-ts--parent-node) 0)
+           ((n-p-gp "\\`\\(rescue\\|ensure\\|else\\)\\'" "body_statement" 
,ruby-ts--method-regex)
+            (ruby-ts--align-keywords ruby-ts--grand-parent-node) 0)
+           ((n-p-gp nil "rescue\\|ensure\\|else" "body_statement") parent 
ruby-indent-level)
+           ((match "body_statement" ,ruby-ts--method-regex) ;first statement
+            (ruby-ts--align-keywords ruby-ts--parent-node) ruby-indent-level)
+           ((n-p-gp nil "body_statement" ,ruby-ts--method-regex) ;other 
statements
+            (ruby-ts--align-keywords ruby-ts--grand-parent-node) 
ruby-indent-level)
+
+           ;; Chained calls:
+           ;; if `ruby-align-chained-calls' is true, the first query
+           ;; matches and the node is aligned under the first dot (.);
+           ;; else the second query aligns
+           ;; `ruby-indent-level' spaces in from the parent.
+           ((and ruby-ts--align-chain-p (match "\\." "call")) 
ruby-ts--align-chain 0)
+           ((match "\\." "call") parent ruby-indent-level)
+
+           ;; ruby-indent-after-block-in-continued-expression
+           ((match "begin" "assignment") parent ruby-indent-level)
+
+           ;; method parameters -- four styles:
+           ;; 1) With paren, first arg on same line:
+           ((and (query "(method_parameters \"(\" _ @indent)")
+                 ruby-ts--same-line-params-p
+                 (node-is ")"))
+            first-sibling 0)
+           ((and (query "(method_parameters \"(\" _ @indent)")
+                 ruby-ts--same-line-params-p)
+            first-sibling 1)
+           ;; ;; 2) With paren, first arg on next line, 
ruby-method-params-indent eq t
+           ;; ;; 3) With paren, first arg on next line, 
ruby-method-params-indent neq t
+           ((and (query "(method_parameters \"(\" _ @indent)") (node-is ")")) 
ruby-ts--param-indent 0)
+           ((query "(method_parameters \"(\" _ @indent)") 
ruby-ts--param-indent ruby-indent-level)
+           ;; 4) No paren:
+           ((parent-is "method_parameters") first-sibling 0)
+
+           ;; Argument lists:
+           ;; 1) With paren, 1st arg on same line
+           ((and (query "(argument_list \"(\" _ @indent)")
+                 ruby-ts--same-line-args-p
+                 (node-is ")"))
+            first-sibling 0)
+           ((and (query "(argument_list \"(\" _ @indent)")
+                 ruby-ts--same-line-args-p)
+            first-sibling 1)
+           ;; 2) With paren, 1st arg on next line
+           ((and (query "(argument_list \"(\" _ @indent)")
+                 (node-is ")"))
+            (ruby-ts--bol ruby-ts--grand-parent-node) 0)
+           ((query "(argument_list \"(\" _ @indent)")
+            (ruby-ts--bol ruby-ts--grand-parent-node) ruby-indent-level)
+           ;; 3) No paren, ruby-parenless-call-arguments-indent is t
+           ((and ruby-ts--parenless-call-arguments-indent-p (parent-is 
"argument_list"))
+            first-sibling 0)
+           ;; 4) No paren, ruby-parenless-call-arguments-indent is nil
+           ((parent-is "argument_list") (ruby-ts--bol 
ruby-ts--grand-parent-node) ruby-indent-level)
+
+           ;; Old... probably too simple
+           ((parent-is "block_parameters") first-sibling 1)
+
+           ((and (parent-is "binary")
+                 (or ruby-ts--assignment-ancestor
+                     ruby-ts--is-in-condition
+                     ruby-ts--endless-method))
+            first-sibling 0)
+
+           ;; ruby-mode does not touch these...
+           ((match "bare_string" "string_array") no-indent 0)
+
+           ;; hash and array other than assignments.  Note that the
+           ;; first sibling is the "{" or "[".  There is a special
+           ;; case where the hash is an argument to a method.  These
+           ;; need to be processed first.
+
+           ((and ruby-ts--same-line-hash-array-p (match "}" "hash"))
+            first-sibling 0)
+           ((and ruby-ts--same-line-hash-array-p (parent-is "hash"))
+            (nth-sibling 0 ruby-ts--true) 0)
+           ((and ruby-ts--same-line-hash-array-p (match "]" "array"))
+            first-sibling 0)
+           ((and ruby-ts--same-line-hash-array-p (parent-is "array"))
+            (nth-sibling 0 ruby-ts--true) 0)
+
+           ;; NOTE to folks trying to understand my insanity...
+           ;; I having trouble understanding the "logic" of why things
+           ;; are indented like they are so I am adding special cases
+           ;; hoping at some point I will be struck by lightning.
+           ((and (n-p-gp "}" "hash" "pair")
+                 (not ruby-ts--same-line-hash-array-p))
+            grand-parent 0)
+           ((and (n-p-gp "pair" "hash" "pair")
+                 (not ruby-ts--same-line-hash-array-p))
+            grand-parent ruby-indent-level)
+           ((and (n-p-gp "}" "hash" "method")
+                 (not ruby-ts--same-line-hash-array-p))
+            grand-parent 0)
+           ((and (n-p-gp "pair" "hash" "method")
+                 (not ruby-ts--same-line-hash-array-p))
+            grand-parent ruby-indent-level)
+
+           ((n-p-gp "}" "hash" "assignment")  (ruby-ts--bol 
ruby-ts--grand-parent-node) 0)
+           ((n-p-gp nil "hash" "assignment")  (ruby-ts--bol 
ruby-ts--grand-parent-node) ruby-indent-level)
+           ((n-p-gp "]" "array" "assignment") (ruby-ts--bol 
ruby-ts--grand-parent-node) 0)
+           ((n-p-gp nil "array" "assignment") (ruby-ts--bol 
ruby-ts--grand-parent-node) ruby-indent-level)
+
+           ((n-p-gp "}" "hash" "argument_list")  first-sibling 0)
+           ((n-p-gp nil "hash" "argument_list")  first-sibling 
ruby-indent-level)
+           ((n-p-gp "]" "array" "argument_list") first-sibling 0)
+           ((n-p-gp nil "array" "argument_list") first-sibling 
ruby-indent-level)
+
+           ((match "}" "hash")  first-sibling 0)
+           ((parent-is "hash")  first-sibling ruby-indent-level)
+           ((match "]" "array") first-sibling 0)
+           ((parent-is "array") first-sibling ruby-indent-level)
+
+           ;; If the previous method isn't finished yet, this will get
+           ;; the next method indented properly.
+           ((n-p-gp ,ruby-ts--method-regex "body_statement" 
,ruby-ts--class-or-module-regex)
+            (ruby-ts--bol ruby-ts--grand-parent-node) ruby-indent-level)
+
+           ;; Match the end of a class / module
+           ((match "end" ,ruby-ts--class-or-module-regex) parent 0)
+
+           ;; A "do_block" has a "body_statement" child which has the
+           ;; statements as children within it.  The problem is that
+           ;; the first statement starts at the same point as the
+           ;; body_statement and so treesit-simple-indent is called
+           ;; with node set to body_statement on the first statement
+           ;; but with node set to the statement and parent set to
+           ;; body_statement for all others. ... Fine.  Be that way.
+           ;; Ditto for "block" and "block_body"
+           ((node-is "body_statement") parent-bol ruby-indent-level)
+           ((parent-is "body_statement") (ruby-ts--bol 
ruby-ts--grand-parent-node) ruby-indent-level)
+           ((match "end" "do_block") parent-bol 0)
+           ((n-p-gp "block_body" "block" nil) parent-bol ruby-indent-level)
+           ((n-p-gp nil "block_body" "block") (ruby-ts--bol 
ruby-ts--grand-parent-node) ruby-indent-level)
+           ((match "}" "block") parent-bol 0)
+
+           ;; Chained strings
+           ((match "string" "chained_string") first-sibling 0)
+
+           ;; Try and indent two spaces when all else fails.
+           (catch-all parent-bol ruby-indent-level))))
+    `((ruby . ,common))))
+
+(defun ruby-ts--class-or-module-p (node)
+  "Predicate if NODE is a class or module."
+  (string-match-p ruby-ts--class-or-module-regex (treesit-node-type node)))
+
+(defun ruby-ts--get-name (node)
+  "Return the text of the `name' field of NODE."
+  (treesit-node-text (treesit-node-child-by-field-name node "name")))
+
+(defun ruby-ts--full-name (node)
+  "Return the fully qualified name of NODE."
+  (let* ((name (ruby-ts--get-name node))
+         (delimiter "#"))
+    (while (setq node (treesit-parent-until node #'ruby-ts--class-or-module-p))
+      (setq name (concat (ruby-ts--get-name node) delimiter name))
+      (setq delimiter "::"))
+    name))
+
+(defun ruby-ts--imenu-helper (node)
+  "Convert a treesit sparse tree NODE in an imenu list.
+Helper for `ruby-ts--imenu' which converts a treesit sparse
+NODE into a list of imenu ( name . pos ) nodes"
+  (let* ((ts-node (car node))
+         (subtrees (mapcan #'ruby-ts--imenu-helper (cdr node)))
+         (name (when ts-node
+                 (ruby-ts--full-name ts-node)))
+         (marker (when ts-node
+                   (set-marker (make-marker)
+                               (treesit-node-start ts-node)))))
+    (cond
+     ((or (null ts-node) (null name)) subtrees)
+     ;; Don't include the anonymous "class" and "module" nodes
+     ((string-match-p "(\"\\(class\\|module\\)\")"
+                      (treesit-node-string ts-node))
+      nil)
+     (subtrees
+      `((,name ,(cons name marker) ,@subtrees)))
+     (t
+      `((,name . ,marker))))))
+
+;; For now, this is going to work like ruby-mode and return a list of
+;; class, modules, def (methods), and alias.  It is likely that this
+;; can be rigged to be easily extended.
+(defun ruby-ts--imenu ()
+  "Return Imenu alist for the current buffer."
+  (let* ((root (treesit-buffer-root-node))
+         (nodes (treesit-induce-sparse-tree root 
"^\\(method\\|alias\\|class\\|module\\)$")))
+    (ruby-ts--imenu-helper nodes)))
+
+(defun ruby-ts--arrow-up-start (arg)
+  "Move to the start ARG levels up or out."
+  (interactive "p")
+  (setq arg (or arg 1))
+  (let* ((pnt (point))
+         (found (treesit-node-at pnt))
+         (pos (treesit-node-start found))
+         new-pos)
+    (while (and found pos (> arg 0))
+      (setq found (treesit-node-parent found)
+            new-pos (treesit-node-start found))
+      (when (and new-pos (not (= new-pos pos)))
+        (setq arg (1- arg)
+              pos new-pos)))
+    (if pos
+        (goto-char pos)
+      (error "Something didn't work"))))
+
+(defun ruby-ts--class-name (node)
+  "Return NODE's name.
+Assumes NODE's type is \"class\" or \"method\""
+  (list
+   (treesit-node-text
+    (treesit-node-child-by-field-name
+     node
+     (if (equal "singleton_class" (treesit-node-type node)) "value" "name"))
+    t)))
+
+(defun ruby-ts--method-name (node)
+  "Return the method name of NODE.
+Assumes NODE's type is method or singleton_method."
+  (if (equal "method" (treesit-node-type node))
+      (list (treesit-node-text (treesit-node-child-by-field-name node "name") 
t))
+    (let* ((children (treesit-node-children node))
+           ;; 0th is "def"
+           (first (nth 1 children))
+           (third (nth 3 children)))
+      (cond
+       ((equal "(" (treesit-node-type first))
+        (list (treesit-node-text (nth 2 children) t)
+              (treesit-node-text (nth 5 children) t)))
+       ;; ((equal "self" (treesit-node-type first))
+       ;;  (list (treesit-node-text third t)))
+       (t (mapcar (lambda (n)
+                    (treesit-node-text n t))
+                  (list first third)))))))
+
+(defun ruby-ts-add-log-current-function ()
+  "Return the current method name as a string.
+The hash (#) is for instance methods only which are methods
+\"defined on a class\" -- which is 99% of methods.  Otherwise, a
+dot (.) is used.  Double colon (::) is used between classes.  The
+leading double colon is not added."
+  (let* ((node (treesit-node-at (point)))
+         (method-pred
+          (lambda (node)
+            (and (<= (treesit-node-start node) (point))
+                 (>= (treesit-node-end node) (point))
+                 (string-match-p ruby-ts--method-regex (treesit-node-type 
node)))))
+         (method (treesit-parent-until node method-pred t))
+         (class (or method node))
+         (result nil)
+         (sep "#")
+         (method-list nil)
+         (class-list nil)
+         (method-name nil))
+
+    (when method
+      (setq method-list (ruby-ts--method-name method))
+      (unless (= 1 (length method-list))
+        (setq sep ".")))
+    (while (setq class (treesit-parent-until class
+                                             (ruby-ts--type-pred
+                                              ruby-ts--class-or-module-regex)))
+      (setq class-list (append (ruby-ts--class-name class) class-list)))
+    (setq method-name (car (last method-list))
+          method-list (butlast method-list))
+    (when (equal (car method-list) (car (last class-list)))
+      (setq method-list (cdr method-list)))
+    (dolist (ele (append class-list method-list))
+      (cond
+       ((equal "self" ele)
+        (setq sep "."))
+       ((string-match-p "\\`[^A-Z]" ele) ;not a class
+        (setq sep "."
+              result (if result
+                         (concat result "::" ele)
+                       ele)))
+       (t (setq result (if result
+                           (concat result "::" ele)
+                         ele)))))
+    (if method-name
+        (concat result sep method-name)
+      result)))
+
+(defvar-keymap ruby-ts-mode-map
+  :doc "Keymap used in Ruby mode"
+  :parent prog-mode-map
+  ;; (when ruby-use-smie
+  ;;   (define-key map (kbd "M-C-d") 'smie-down-list))
+  ;; (define-key map (kbd "M-C-p") 'ruby-beginning-of-block)
+  ;; (define-key map (kbd "M-C-n") 'ruby-end-of-block)
+  "C-c {" #'ruby-toggle-block
+  "C-c '" #'ruby-toggle-string-quotes
+  "C-c C-f" #'ruby-find-library-file)
+
+;;;###autoload
+(define-derived-mode ruby-ts-mode ruby-base-mode "Ruby"
+  "Major mode for editing Ruby, powered by tree-sitter."
+  :group 'ruby
+  :syntax-table ruby-mode-syntax-table
+
+  (unless (treesit-ready-p 'ruby)
+    (error "Tree-sitter for Ruby isn't available"))
+
+  (treesit-parser-create 'ruby)
+
+  (setq-local add-log-current-defun-function 
#'ruby-ts-add-log-current-function)
+
+  ;; Navigation.
+  (setq-local treesit-defun-type-regexp ruby-ts--method-regex)
+
+  ;; AFAIK, Ruby can not nest methods
+  (setq-local treesit-defun-prefer-top-level nil)
+
+  ;; Imenu.
+  (setq-local imenu-create-index-function #'ruby-ts--imenu)
+
+  (setq-local treesit-simple-indent-rules (ruby-ts--indent-rules))
+
+  ;; Font-lock.
+  (setq-local treesit-font-lock-settings (ruby-ts--font-lock-settings 'ruby))
+  ;; Level 3 is the default.
+  (setq-local treesit-font-lock-feature-list
+              '(( comment method-definition )
+                ( keyword regexp string type)
+                ( builtin constant
+                  delimiter escape-sequence global
+                  instance
+                  interpolation literal symbol variable)
+                ( bracket error function operator punctuation)))
+
+  (treesit-major-mode-setup))
+
+(provide 'ruby-ts-mode)
+
+;;; ruby-ts-mode.el ends here
diff --git a/lisp/progmodes/rust-ts-mode.el b/lisp/progmodes/rust-ts-mode.el
index 8b2ed191019..7536726165e 100644
--- a/lisp/progmodes/rust-ts-mode.el
+++ b/lisp/progmodes/rust-ts-mode.el
@@ -1,6 +1,6 @@
 ;;; rust-ts-mode.el --- tree-sitter support for Rust  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author     : Randy Taylor <dev@rjt.dev>
 ;; Maintainer : Randy Taylor <dev@rjt.dev>
@@ -29,6 +29,7 @@
 
 (require 'treesit)
 (eval-when-compile (require 'rx))
+(require 'c-ts-mode) ; For comment indent and filling.
 
 (declare-function treesit-parser-create "treesit.c")
 (declare-function treesit-induce-sparse-tree "treesit.c")
@@ -70,6 +71,9 @@
      ((node-is ")") parent-bol 0)
      ((node-is "]") parent-bol 0)
      ((node-is "}") (and parent parent-bol) 0)
+     ((and (parent-is "comment") c-ts-mode--looking-at-star)
+      c-ts-mode--comment-start-after-first-star -1)
+     ((parent-is "comment") prev-adaptive-prefix 0)
      ((parent-is "arguments") parent-bol rust-ts-mode-indent-offset)
      ((parent-is "await_expression") parent-bol rust-ts-mode-indent-offset)
      ((parent-is "array_expression") parent-bol rust-ts-mode-indent-offset)
@@ -244,78 +248,32 @@
    '((ERROR) @font-lock-warning-face))
   "Tree-sitter font-lock settings for `rust-ts-mode'.")
 
-(defun rust-ts-mode--imenu ()
-  "Return Imenu alist for the current buffer."
-  (let* ((node (treesit-buffer-root-node))
-         (enum-tree (treesit-induce-sparse-tree
-                     node "enum_item" nil))
-         (enum-index (rust-ts-mode--imenu-1 enum-tree))
-         (func-tree (treesit-induce-sparse-tree
-                     node "function_item" nil))
-         (func-index (rust-ts-mode--imenu-1 func-tree))
-         (impl-tree (treesit-induce-sparse-tree
-                     node "impl_item" nil))
-         (impl-index (rust-ts-mode--imenu-1 impl-tree))
-         (mod-tree (treesit-induce-sparse-tree
-                    node "mod_item" nil))
-         (mod-index (rust-ts-mode--imenu-1 mod-tree))
-         (struct-tree (treesit-induce-sparse-tree
-                       node "struct_item" nil))
-         (struct-index (rust-ts-mode--imenu-1 struct-tree))
-         (type-tree (treesit-induce-sparse-tree
-                     node "type_item" nil))
-         (type-index (rust-ts-mode--imenu-1 type-tree)))
-    (append
-     (when mod-index `(("Module" . ,mod-index)))
-     (when enum-index `(("Enum" . ,enum-index)))
-     (when impl-index `(("Impl" . ,impl-index)))
-     (when type-index `(("Type" . ,type-index)))
-     (when struct-index `(("Struct" . ,struct-index)))
-     (when func-index `(("Fn" . ,func-index))))))
-
-(defun rust-ts-mode--imenu-1 (node)
-  "Helper for `rust-ts-mode--imenu'.
-Find string representation for NODE and set marker, then recurse
-the subtrees."
-  (let* ((ts-node (car node))
-         (children (cdr node))
-         (subtrees (mapcan #'rust-ts-mode--imenu-1
-                           children))
-         (name (when ts-node
-                 (pcase (treesit-node-type ts-node)
-                   ("enum_item"
-                    (treesit-node-text
-                     (treesit-node-child-by-field-name ts-node "name") t))
-                   ("function_item"
-                    (treesit-node-text
-                     (treesit-node-child-by-field-name ts-node "name") t))
-                   ("impl_item"
-                    (let ((trait-node (treesit-node-child-by-field-name 
ts-node "trait")))
-                      (concat
-                       (treesit-node-text
-                        trait-node t)
-                       (when trait-node
-                         " for ")
-                       (treesit-node-text
-                        (treesit-node-child-by-field-name ts-node "type") t))))
-                   ("mod_item"
-                    (treesit-node-text
-                     (treesit-node-child-by-field-name ts-node "name") t))
-                   ("struct_item"
-                    (treesit-node-text
-                     (treesit-node-child-by-field-name ts-node "name") t))
-                   ("type_item"
-                    (treesit-node-text
-                     (treesit-node-child-by-field-name ts-node "name") t)))))
-         (marker (when ts-node
-                   (set-marker (make-marker)
-                               (treesit-node-start ts-node)))))
-    (cond
-     ((or (null ts-node) (null name)) subtrees)
-     (subtrees
-      `((,name ,(cons name marker) ,@subtrees)))
-     (t
-      `((,name . ,marker))))))
+(defun rust-ts-mode--defun-name (node)
+  "Return the defun name of NODE.
+Return nil if there is no name or if NODE is not a defun node."
+  (pcase (treesit-node-type node)
+    ("enum_item"
+     (treesit-node-text
+      (treesit-node-child-by-field-name node "name") t))
+    ("function_item"
+     (treesit-node-text
+      (treesit-node-child-by-field-name node "name") t))
+    ("impl_item"
+     (let ((trait-node (treesit-node-child-by-field-name node "trait")))
+       (concat
+        (treesit-node-text trait-node t)
+        (when trait-node " for ")
+        (treesit-node-text
+         (treesit-node-child-by-field-name node "type") t))))
+    ("mod_item"
+     (treesit-node-text
+      (treesit-node-child-by-field-name node "name") t))
+    ("struct_item"
+     (treesit-node-text
+      (treesit-node-child-by-field-name node "name") t))
+    ("type_item"
+     (treesit-node-text
+      (treesit-node-child-by-field-name node "name") t))))
 
 ;;;###autoload
 (add-to-list 'auto-mode-alist '("\\.rs\\'" . rust-ts-mode))
@@ -330,15 +288,7 @@ the subtrees."
     (treesit-parser-create 'rust)
 
     ;; Comments.
-    (setq-local comment-start "// ")
-    (setq-local comment-end "")
-    (setq-local comment-start-skip (rx (or (seq "/" (+ "/"))
-                                           (seq "/" (+ "*")))
-                                       (* (syntax whitespace))))
-    (setq-local comment-end-skip
-                (rx (* (syntax whitespace))
-                    (group (or (syntax comment-end)
-                               (seq (+ "*") "/")))))
+    (c-ts-mode-comment-setup)
 
     ;; Font-lock.
     (setq-local treesit-font-lock-settings rust-ts-mode--font-lock-settings)
@@ -350,8 +300,13 @@ the subtrees."
                   ( bracket delimiter error operator)))
 
     ;; Imenu.
-    (setq-local imenu-create-index-function #'rust-ts-mode--imenu)
-    (setq-local which-func-functions nil)
+    (setq-local treesit-simple-imenu-settings
+                `(("Module" "\\`mod_item\\'" nil nil)
+                  ("Enum" "\\`enum_item\\'" nil nil)
+                  ("Impl" "\\`impl_item\\'" nil nil)
+                  ("Type" "\\`type_item\\'" nil nil)
+                  ("Struct" "\\`struct_item\\'" nil nil)
+                  ("Fn" "\\`function_item\\'" nil nil)))
 
     ;; Indent.
     (setq-local indent-tabs-mode nil
@@ -363,6 +318,7 @@ the subtrees."
                               "function_item"
                               "impl_item"
                               "struct_item")))
+    (setq-local treesit-defun-name-function #'rust-ts-mode--defun-name)
 
     (treesit-major-mode-setup)))
 
diff --git a/lisp/progmodes/scheme.el b/lisp/progmodes/scheme.el
index 8454f24356a..38cb19f5a12 100644
--- a/lisp/progmodes/scheme.el
+++ b/lisp/progmodes/scheme.el
@@ -1,6 +1,6 @@
 ;;; scheme.el --- Scheme (and DSSSL) editing mode    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1986-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1986-2023 Free Software Foundation, Inc.
 
 ;; Author: Bill Rozas <jinx@martigny.ai.mit.edu>
 ;; Adapted-by: Dave Love <d.love@dl.ac.uk>
@@ -115,7 +115,8 @@
 
 (defvar scheme-imenu-generic-expression
   `((nil
-     ,(rx bol "(define"
+     ,(rx bol (zero-or-more space)
+          "(define"
           (zero-or-one "*")
           (zero-or-one "-public")
           (one-or-more space)
@@ -123,36 +124,41 @@
           (group (one-or-more (or word (syntax symbol)))))
      1)
     ("Methods"
-     ,(rx bol "(define-"
+     ,(rx bol (zero-or-more space)
+          "(define-"
           (or "generic" "method" "accessor")
           (one-or-more space)
           (zero-or-one "(")
           (group (one-or-more (or word (syntax symbol)))))
      1)
     ("Classes"
-     ,(rx bol "(define-class"
+     ,(rx bol (zero-or-more space)
+          "(define-class"
           (one-or-more space)
           (zero-or-one "(")
           (group (one-or-more (or word (syntax symbol)))))
      1)
     ("Records"
-     ,(rx bol "(define-record-type"
+     ,(rx bol (zero-or-more space)
+          "(define-record-type"
           (zero-or-one "*")
           (one-or-more space)
           (group (one-or-more (or word (syntax symbol)))))
      1)
     ("Conditions"
-     ,(rx bol "(define-condition-type"
+     ,(rx bol (zero-or-more space)
+          "(define-condition-type"
           (one-or-more space)
           (group (one-or-more (or word (syntax symbol)))))
      1)
     ("Modules"
-     ,(rx bol "(define-module"
+     ,(rx bol (zero-or-more space)
+          "(define-module"
           (one-or-more space)
           (group "(" (one-or-more any) ")"))
      1)
     ("Macros"
-     ,(rx bol "("
+     ,(rx bol (zero-or-more space) "("
           (or (and "defmacro"
                    (zero-or-one "*")
                    (zero-or-one "-public"))
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index 3f995d17b5a..17c22ff4751 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -1,6 +1,6 @@
 ;;; sh-script.el --- shell-script editing commands for Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1993-1997, 1999, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1993-1997, 1999, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Daniel Pfeiffer <occitan@esperanto.org>
@@ -150,6 +150,8 @@
 (require 'executable)
 (require 'treesit)
 
+(declare-function treesit-parser-create "treesit.c")
+
 (autoload 'comint-completion-at-point "comint")
 (autoload 'comint-filename-completion "comint")
 (autoload 'comint-send-string "comint")
diff --git a/lisp/progmodes/simula.el b/lisp/progmodes/simula.el
index 9aa8a994ed5..d3061169981 100644
--- a/lisp/progmodes/simula.el
+++ b/lisp/progmodes/simula.el
@@ -1,6 +1,6 @@
 ;;; simula.el --- SIMULA 87 code editing commands for Emacs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: Hans Henrik Eriksen <hhe@ifi.uio.no>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el
index 6a71da77a26..d8bd6bc2685 100644
--- a/lisp/progmodes/sql.el
+++ b/lisp/progmodes/sql.el
@@ -1,6 +1,6 @@
 ;;; sql.el --- specialized comint.el for SQL interpreters  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Maintainer: Michael Mauger <michael@mauger.com>
diff --git a/lisp/progmodes/subword.el b/lisp/progmodes/subword.el
index 34327f756ee..18ccdd0e66e 100644
--- a/lisp/progmodes/subword.el
+++ b/lisp/progmodes/subword.el
@@ -1,6 +1,6 @@
 ;;; subword.el --- Handling capitalized subwords in a nomenclature -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Masatake YAMATO
 
diff --git a/lisp/progmodes/tcl.el b/lisp/progmodes/tcl.el
index 7dae14f9e02..ba0cbc8b066 100644
--- a/lisp/progmodes/tcl.el
+++ b/lisp/progmodes/tcl.el
@@ -1,6 +1,6 @@
 ;;; tcl.el --- Tcl code editing commands for Emacs  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1994, 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <tromey@redhat.com>
 ;;    Chris Lindblad <cjl@lcs.mit.edu>
diff --git a/lisp/progmodes/typescript-ts-mode.el 
b/lisp/progmodes/typescript-ts-mode.el
index 6ba1b9b12c0..f2e27395a55 100644
--- a/lisp/progmodes/typescript-ts-mode.el
+++ b/lisp/progmodes/typescript-ts-mode.el
@@ -1,6 +1,6 @@
 ;;; typescript-ts-mode.el --- tree sitter support for TypeScript  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author     : Theodor Thornhill <theo@thornhill.no>
 ;; Maintainer : Theodor Thornhill <theo@thornhill.no>
@@ -30,6 +30,7 @@
 (require 'treesit)
 (require 'js)
 (eval-when-compile (require 'rx))
+(require 'c-ts-mode) ; For comment indent and filling.
 
 (declare-function treesit-parser-create "treesit.c")
 
@@ -73,8 +74,9 @@ Argument LANGUAGE is either `typescript' or `tsx'."
      ((node-is ")") parent-bol 0)
      ((node-is "]") parent-bol 0)
      ((node-is ">") parent-bol 0)
-     ((and (parent-is "comment") comment-end) comment-start -1)
-     ((parent-is "comment") comment-start-skip 0)
+     ((and (parent-is "comment") c-ts-mode--looking-at-star)
+      c-ts-mode--comment-start-after-first-star -1)
+     ((parent-is "comment") prev-adaptive-prefix 0)
      ((parent-is "ternary_expression") parent-bol 
typescript-ts-mode-indent-offset)
      ((parent-is "member_expression") parent-bol 
typescript-ts-mode-indent-offset)
      ((parent-is "named_imports") parent-bol typescript-ts-mode-indent-offset)
@@ -165,6 +167,8 @@ Argument LANGUAGE is either `typescript' or `tsx'."
 
      (method_definition
       name: (property_identifier) @font-lock-function-name-face)
+     (method_signature
+      name: (property_identifier) @font-lock-function-name-face)
      (required_parameter (identifier) @font-lock-variable-name-face)
      (optional_parameter (identifier) @font-lock-variable-name-face)
 
@@ -209,10 +213,8 @@ Argument LANGUAGE is either `typescript' or `tsx'."
 
      (enum_assignment name: (property_identifier) @font-lock-type-face)
 
-     (assignment_expression
-      left: [(identifier) @font-lock-variable-name-face
-             (member_expression
-              property: (property_identifier) @font-lock-variable-name-face)])
+     (variable_declarator
+      name: (identifier) @font-lock-variable-name-face)
 
      (for_in_statement
       left: (identifier) @font-lock-variable-name-face)
@@ -240,10 +242,6 @@ Argument LANGUAGE is either `typescript' or `tsx'."
       name: (property_identifier) @font-lock-property-face)
      (public_field_definition
       name: (property_identifier) @font-lock-property-face)
-     (member_expression
-      object: (identifier) @font-lock-variable-name-face)
-     (member_expression
-      property: (_) @font-lock-property-face)
 
      (pair key: (property_identifier) @font-lock-variable-name-face)
 
@@ -261,9 +259,11 @@ Argument LANGUAGE is either `typescript' or `tsx'."
       left: [(identifier) @font-lock-function-name-face
              (member_expression
               property: (property_identifier) @font-lock-function-name-face)]
-      right: [(function) (arrow_function)])
+      right: [(function) (arrow_function)]))
 
-     (call_expression
+   :language language
+   :feature 'function
+   '((call_expression
       function:
       [(identifier) @font-lock-function-name-face
        (member_expression
@@ -331,18 +331,12 @@ Argument LANGUAGE is either `typescript' or `tsx'."
   :syntax-table typescript-ts-mode--syntax-table
 
   ;; Comments.
-  (setq-local comment-start "// ")
-  (setq-local comment-end "")
-  (setq-local comment-start-skip "\\(?://+\\|/\\*+\\)\\s *")
-  (setq-local comment-end-skip
-              (rx (* (syntax whitespace))
-                  (group (or (syntax comment-end)
-                             (seq (+ "*") "/")))))
+  (c-ts-mode-comment-setup)
+  (setq-local treesit-defun-prefer-top-level t)
 
   (setq-local treesit-text-type-regexp
               (regexp-opt '("comment"
                             "template_string")))
-  (setq-local treesit-defun-prefer-top-level t)
 
   ;; Electric
   (setq-local electric-indent-chars
@@ -354,11 +348,17 @@ Argument LANGUAGE is either `typescript' or `tsx'."
                             "method_definition"
                             "function_declaration"
                             "lexical_declaration")))
-  ;; Imenu.
-  (setq-local imenu-create-index-function #'js--treesit-imenu)
-
-  ;; Which-func (use imenu).
-  (setq-local which-func-functions nil))
+  (setq-local treesit-defun-name-function #'js--treesit-defun-name)
+
+  ;; Imenu (same as in `js-ts-mode').
+  (setq-local treesit-simple-imenu-settings
+              `(("Function" "\\`function_declaration\\'" nil nil)
+                ("Variable" "\\`lexical_declaration\\'"
+                 js--treesit-valid-imenu-entry nil)
+                ("Class" ,(rx bos (or "class_declaration"
+                                      "method_definition")
+                              eos)
+                 nil nil))))
 
 ;;;###autoload
 (define-derived-mode typescript-ts-mode typescript-ts-base-mode "TypeScript"
@@ -377,9 +377,10 @@ Argument LANGUAGE is either `typescript' or `tsx'."
     (setq-local treesit-font-lock-settings
                 (typescript-ts-mode--font-lock-settings 'typescript))
     (setq-local treesit-font-lock-feature-list
-                '((comment declaration keyword string escape-sequence)
+                '((comment declaration)
+                  (keyword string escape-sequence)
                   (constant expression identifier number pattern property)
-                  (bracket delimiter)))
+                  (function bracket delimiter)))
 
     (treesit-major-mode-setup)))
 
@@ -411,9 +412,10 @@ Argument LANGUAGE is either `typescript' or `tsx'."
     (setq-local treesit-font-lock-settings
                 (typescript-ts-mode--font-lock-settings 'tsx))
     (setq-local treesit-font-lock-feature-list
-                '((comment declaration keyword string escape-sequence)
+                '((comment declaration)
+                  (keyword string escape-sequence)
                   (constant expression identifier jsx number pattern property)
-                  (bracket delimiter)))
+                  (function bracket delimiter)))
 
     (treesit-major-mode-setup)))
 
diff --git a/lisp/progmodes/vera-mode.el b/lisp/progmodes/vera-mode.el
index 568c0f1d0fc..07d3ef07d7b 100644
--- a/lisp/progmodes/vera-mode.el
+++ b/lisp/progmodes/vera-mode.el
@@ -1,6 +1,6 @@
 ;;; vera-mode.el --- major mode for editing Vera files  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author:      Reto Zimmermann <reto@gnu.org>
 ;; Version:     2.28
diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el
index 47a1cb32337..2989d7ddb61 100644
--- a/lisp/progmodes/verilog-mode.el
+++ b/lisp/progmodes/verilog-mode.el
@@ -1,6 +1,6 @@
 ;;; verilog-mode.el --- major mode for editing verilog source in Emacs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael McNamara <mac@verilog.com>
 ;;    Wilson Snyder <wsnyder@wsnyder.org>
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el
index a36bb7fbe44..c5ab5013fc8 100644
--- a/lisp/progmodes/vhdl-mode.el
+++ b/lisp/progmodes/vhdl-mode.el
@@ -1,6 +1,6 @@
 ;;; vhdl-mode.el --- major mode for editing VHDL code  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Authors:     Reto Zimmermann <reto@gnu.org>
 ;;              Rodney J. Whitby <software.vhdl-mode@rwhitby.net>
diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el
index 8a90b6d26ea..09937a60988 100644
--- a/lisp/progmodes/which-func.el
+++ b/lisp/progmodes/which-func.el
@@ -1,6 +1,6 @@
 ;;; which-func.el --- print current function in mode line  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Alex Rezinsky <alexr@msil.sps.mot.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 0790d3a5650..d5cee9fa84f 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -1,6 +1,6 @@
 ;;; xref.el --- Cross-referencing commands              -*-lexical-binding:t-*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 ;; Version: 1.6.0
 ;; Package-Requires: ((emacs "26.1"))
 
diff --git a/lisp/progmodes/xscheme.el b/lisp/progmodes/xscheme.el
index 4fb543a3bf5..402f0fc09b1 100644
--- a/lisp/progmodes/xscheme.el
+++ b/lisp/progmodes/xscheme.el
@@ -1,6 +1,6 @@
 ;;; xscheme.el --- run MIT Scheme under Emacs        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1986-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1986-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: languages, lisp
diff --git a/lisp/ps-bdf.el b/lisp/ps-bdf.el
index f71c67849f4..bdc28f927ab 100644
--- a/lisp/ps-bdf.el
+++ b/lisp/ps-bdf.el
@@ -1,6 +1,6 @@
 ;;; ps-bdf.el --- BDF font file handler for ps-print  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1998-1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2001-2023 Free Software Foundation, Inc.
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
 ;;   2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/ps-mule.el b/lisp/ps-mule.el
index eb1abfd92db..a4784954627 100644
--- a/lisp/ps-mule.el
+++ b/lisp/ps-mule.el
@@ -1,6 +1,6 @@
 ;;; ps-mule.el --- provide multi-byte character facility to ps-print  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;;     Kenichi Handa <handa@gnu.org> (multi-byte characters)
diff --git a/lisp/ps-print.el b/lisp/ps-print.el
index d67c34e11ab..b54f09b2bdd 100644
--- a/lisp/ps-print.el
+++ b/lisp/ps-print.el
@@ -1,6 +1,6 @@
 ;;; ps-print.el --- print text from the buffer as PostScript -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1993-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2023 Free Software Foundation, Inc.
 
 ;; Author: Jim Thompson (was <thompson@wg2.waii.com>)
 ;;     Jacques Duthen (was <duthen@cegelec-red.fr>)
diff --git a/lisp/ps-samp.el b/lisp/ps-samp.el
index 13d5e7d2459..d66d1939801 100644
--- a/lisp/ps-samp.el
+++ b/lisp/ps-samp.el
@@ -1,6 +1,6 @@
 ;;; ps-samp.el --- ps-print sample setup code  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Jim Thompson (was <thompson@wg2.waii.com>)
 ;;     Jacques Duthen (was <duthen@cegelec-red.fr>)
diff --git a/lisp/recentf.el b/lisp/recentf.el
index 32badb1a370..7816c005358 100644
--- a/lisp/recentf.el
+++ b/lisp/recentf.el
@@ -1,6 +1,6 @@
 ;;; recentf.el --- keep track of recently opened files  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <david@dponce.com>
 ;; Created: July 19 1999
diff --git a/lisp/rect.el b/lisp/rect.el
index e1d79da962e..5ff821abb3f 100644
--- a/lisp/rect.el
+++ b/lisp/rect.el
@@ -1,6 +1,6 @@
 ;;; rect.el --- rectangle functions for GNU Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985, 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1999-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: Didier Verna <didier@didierverna.net>
 ;; Keywords: internal
diff --git a/lisp/register.el b/lisp/register.el
index 78aa130a948..d30114bfbc7 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -1,6 +1,6 @@
 ;;; register.el --- register commands for Emacs      -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1985, 1993-1994, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1985, 1993-1994, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/registry.el b/lisp/registry.el
index 4030da7b57e..c5f11714975 100644
--- a/lisp/registry.el
+++ b/lisp/registry.el
@@ -1,6 +1,6 @@
 ;;; registry.el --- Track and remember data items by various fields  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <tzz@lifelogs.com>
 ;; Keywords: data
diff --git a/lisp/repeat.el b/lisp/repeat.el
index 33e8d98ce33..0124ff4bc0c 100644
--- a/lisp/repeat.el
+++ b/lisp/repeat.el
@@ -1,6 +1,6 @@
 ;;; repeat.el --- convenient way to repeat the previous command  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Will Mengarini <seldon@eskimo.com>
 ;; Created: Mo 02 Mar 98
@@ -368,6 +368,13 @@ This property can override the value of this variable."
 (defcustom repeat-keep-prefix nil
   "Whether to keep the prefix arg of the previous command when repeating."
   :type 'boolean
+  :initialize #'custom-initialize-default
+  :set (lambda (sym val)
+         (set-default sym val)
+         (when repeat-mode
+           (if repeat-keep-prefix
+               (add-hook 'pre-command-hook 'repeat-pre-hook)
+             (remove-hook 'pre-command-hook 'repeat-pre-hook))))
   :group 'repeat
   :version "28.1")
 
@@ -392,7 +399,8 @@ but the property value is `t', then check the last key."
 (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 repeating map, or nil after deactivating the transient repeating mode."
+a repeating map, or nil after deactivating the transient repeating mode.
+You can use `add-function' for multiple functions simultaneously."
   :type '(choice (const :tag "Show hints in the echo area"
                         repeat-echo-message)
                  (const :tag "Show indicator in the mode line"
@@ -419,7 +427,11 @@ When Repeat mode is enabled, and the command symbol has 
the property named
 See `describe-repeat-maps' for a list of all repeatable commands."
   :global t :group 'repeat
   (if (not repeat-mode)
-      (remove-hook 'post-command-hook 'repeat-post-hook)
+      (progn
+        (remove-hook 'pre-command-hook 'repeat-pre-hook)
+        (remove-hook 'post-command-hook 'repeat-post-hook))
+    (when repeat-keep-prefix
+      (add-hook 'pre-command-hook 'repeat-pre-hook))
     (add-hook 'post-command-hook 'repeat-post-hook)
     (let* ((keymaps nil)
            (commands (all-completions
@@ -431,15 +443,21 @@ See `describe-repeat-maps' for a list of all repeatable 
commands."
                (length commands)
                (length (delete-dups keymaps))))))
 
-(defvar repeat--prev-mb '(0)
-  "Previous minibuffer state.")
-
 (defun repeat--command-property (property)
   (or (and (symbolp this-command)
            (get this-command property))
       (and (symbolp real-this-command)
            (get real-this-command property))))
 
+(defun repeat-get-map ()
+  "Return a transient map for keys repeatable after the current command."
+  (when repeat-mode
+    (let ((rep-map (or repeat-map (repeat--command-property 'repeat-map))))
+      (when rep-map
+        (when (and (symbolp rep-map) (boundp rep-map))
+          (setq rep-map (symbol-value rep-map)))
+        rep-map))))
+
 (defun repeat-check-key (key map)
   "Check if the last key is suitable to activate the repeating MAP."
   (let* ((prop (repeat--command-property 'repeat-check-key))
@@ -449,50 +467,61 @@ See `describe-repeat-maps' for a list of all repeatable 
commands."
         ;; Try without modifiers:
         (lookup-key map (vector (event-basic-type key))))))
 
+(defvar repeat--prev-mb '(0)
+  "Previous minibuffer state.")
+
+(defun repeat-check-map (map)
+  "Decides whether MAP can be used for the next command."
+  (and map
+       ;; Detect changes in the minibuffer state to allow repetitions
+       ;; in the same minibuffer, but not when the minibuffer is activated
+       ;; in the middle of repeating sequence (bug#47566).
+       (or (< (minibuffer-depth) (car repeat--prev-mb))
+           (eq current-minibuffer-command (cdr repeat--prev-mb)))
+       (repeat-check-key last-command-event map)
+       t))
+
+(defun repeat-pre-hook ()
+  "Function run before commands to handle repeatable keys."
+  (when (and repeat-mode repeat-keep-prefix repeat-in-progress
+             (not prefix-arg) current-prefix-arg)
+    (let ((map (repeat-get-map)))
+      ;; Only when repeat-post-hook will activate the same map
+      (when (repeat-check-map map)
+        ;; Optimize to use less logic in the function `repeat-get-map'
+        ;; for the next call: when called again from `repeat-post-hook'
+        ;; it will use the variable `repeat-map'.
+        (setq repeat-map map)
+        ;; Preserve universal argument
+        (setq prefix-arg current-prefix-arg)))))
+
 (defun repeat-post-hook ()
   "Function run after commands to set transient keymap for repeatable keys."
   (let ((was-in-progress repeat-in-progress))
     (setq repeat-in-progress nil)
-    (when repeat-mode
-      (let ((rep-map (or repeat-map (repeat--command-property 'repeat-map))))
-        (when rep-map
-          (when (and (symbolp rep-map) (boundp rep-map))
-            (setq rep-map (symbol-value rep-map)))
-          (let ((map (copy-keymap rep-map)))
-
-            (when (and
-                   ;; Detect changes in the minibuffer state to allow 
repetitions
-                   ;; in the same minibuffer, but not when the minibuffer is 
activated
-                   ;; in the middle of repeating sequence (bug#47566).
-                   (or (< (minibuffer-depth) (car repeat--prev-mb))
-                       (eq current-minibuffer-command (cdr repeat--prev-mb)))
-                   (or (not repeat-keep-prefix) prefix-arg)
-                   (repeat-check-key last-command-event map))
-
-              ;; Messaging
-              (unless prefix-arg
-                (funcall repeat-echo-function map))
-
-              ;; Adding an exit key
-              (when repeat-exit-key
-                (define-key map (if (key-valid-p repeat-exit-key)
-                                    (kbd repeat-exit-key)
-                                  repeat-exit-key)
-                            'ignore))
-
-              (when (and repeat-keep-prefix (not prefix-arg))
-                (setq prefix-arg current-prefix-arg))
-
-              (setq repeat-in-progress t)
-              (let ((exitfun (set-transient-map map)))
-                (repeat--exit)
-                (setq repeat-exit-function exitfun)
-
-                (let* ((prop (repeat--command-property 'repeat-exit-timeout))
-                       (timeout (unless (eq prop 'no) (or prop 
repeat-exit-timeout))))
-                  (when timeout
-                    (setq repeat-exit-timer
-                          (run-with-idle-timer timeout nil 
#'repeat-exit))))))))))
+    (let ((map (repeat-get-map)))
+      (when (repeat-check-map map)
+        ;; Messaging
+        (funcall repeat-echo-function map)
+
+        ;; Adding an exit key
+        (when repeat-exit-key
+          (setq map (copy-keymap map))
+          (define-key map (if (key-valid-p repeat-exit-key)
+                              (kbd repeat-exit-key)
+                            repeat-exit-key)
+                      'ignore))
+
+        (setq repeat-in-progress t)
+        (repeat--exit)
+        (let ((exitfun (set-transient-map map)))
+          (setq repeat-exit-function exitfun)
+
+          (let* ((prop (repeat--command-property 'repeat-exit-timeout))
+                 (timeout (unless (eq prop 'no) (or prop 
repeat-exit-timeout))))
+            (when timeout
+              (setq repeat-exit-timer
+                    (run-with-idle-timer timeout nil #'repeat-exit)))))))
 
     (setq repeat-map nil)
     (setq repeat--prev-mb (cons (minibuffer-depth) current-minibuffer-command))
@@ -582,6 +611,7 @@ Used in `repeat-mode'."
                          (push s (alist-get (get s 'repeat-map) keymaps)))))
       (with-help-window (help-buffer)
         (with-current-buffer standard-output
+          (setq-local outline-regexp "[*]+")
           (insert "A list of keymaps used by commands with the symbol property 
`repeat-map'.\n")
 
           (dolist (keymap (sort keymaps (lambda (a b)
diff --git a/lisp/replace.el b/lisp/replace.el
index 302cb65543b..2f063bbf66b 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -1,6 +1,6 @@
 ;;; replace.el --- replace commands for Emacs -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1987, 1992, 1994, 1996-1997, 2000-2022 Free
+;; Copyright (C) 1985-1987, 1992, 1994, 1996-1997, 2000-2023 Free
 ;; Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -1692,7 +1692,7 @@ contents of the line; it normally shows the line number.  
\(For
 multiline matches, the prefix column shows the line number for the
 first line and whitespace for the rest of the lines.\)
 If this face will display the same as the default face, the prefix
-column will not be highlighted speciall."
+column will not be highlighted specially."
   :type 'face
   :group 'matching
   :version "24.4")
diff --git a/lisp/reposition.el b/lisp/reposition.el
index 30957409394..a422c3d88ae 100644
--- a/lisp/reposition.el
+++ b/lisp/reposition.el
@@ -1,6 +1,6 @@
 ;;; reposition.el --- center a Lisp function or comment on the screen  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1991, 1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael D. Ernst <mernst@theory.lcs.mit.edu>
 ;; Created: Jan 1991
diff --git a/lisp/reveal.el b/lisp/reveal.el
index b3b42177f94..8a1239e1aa2 100644
--- a/lisp/reveal.el
+++ b/lisp/reveal.el
@@ -1,6 +1,6 @@
 ;;; reveal.el --- Automatically reveal hidden text at point -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: outlines
diff --git a/lisp/rfn-eshadow.el b/lisp/rfn-eshadow.el
index f5779e59ac6..75c407fd3d0 100644
--- a/lisp/rfn-eshadow.el
+++ b/lisp/rfn-eshadow.el
@@ -1,6 +1,6 @@
 ;;; rfn-eshadow.el --- Highlight `shadowed' part of read-file-name input text  
-*- lexical-binding: t; -*-
 ;;
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
 ;; Keywords: convenience minibuffer
diff --git a/lisp/rot13.el b/lisp/rot13.el
index 5d1c46e4830..2d2ed904a7c 100644
--- a/lisp/rot13.el
+++ b/lisp/rot13.el
@@ -1,6 +1,6 @@
 ;;; rot13.el --- display a buffer in ROT13  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1988, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Howard Gayle
 ;;         Simon Josefsson
diff --git a/lisp/rtree.el b/lisp/rtree.el
index a14d20cf974..4749629cd59 100644
--- a/lisp/rtree.el
+++ b/lisp/rtree.el
@@ -1,6 +1,6 @@
 ;;; rtree.el --- functions for manipulating range trees  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 
diff --git a/lisp/ruler-mode.el b/lisp/ruler-mode.el
index 0b18697cea7..db8b891dc62 100644
--- a/lisp/ruler-mode.el
+++ b/lisp/ruler-mode.el
@@ -1,6 +1,6 @@
 ;;; ruler-mode.el --- display a ruler in the header line  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <david@dponce.com>
 ;; Created: 24 Mar 2001
diff --git a/lisp/savehist.el b/lisp/savehist.el
index f1d3e50d941..b532668f8a4 100644
--- a/lisp/savehist.el
+++ b/lisp/savehist.el
@@ -1,6 +1,6 @@
 ;;; savehist.el --- Save minibuffer history  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Hrvoje Nikšić <hrvoje.niksic@avl.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/saveplace.el b/lisp/saveplace.el
index 4b133313125..7512fc87c5d 100644
--- a/lisp/saveplace.el
+++ b/lisp/saveplace.el
@@ -1,6 +1,6 @@
 ;;; saveplace.el --- automatically save place in files  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Karl Fogel <kfogel@red-bean.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/scroll-all.el b/lisp/scroll-all.el
index 8b2315fa158..518dd3fb6cc 100644
--- a/lisp/scroll-all.el
+++ b/lisp/scroll-all.el
@@ -1,6 +1,6 @@
 ;;; scroll-all.el --- scroll all buffers together minor mode  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Gary D. Foster <Gary.Foster@corp.sun.com>
 ;; Keywords: convenience scroll lock
diff --git a/lisp/scroll-bar.el b/lisp/scroll-bar.el
index dbe2b6241ff..f4c1217a5a9 100644
--- a/lisp/scroll-bar.el
+++ b/lisp/scroll-bar.el
@@ -1,6 +1,6 @@
 ;;; scroll-bar.el --- window system-independent scroll bar support  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1993-1995, 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 1999-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: hardware
diff --git a/lisp/scroll-lock.el b/lisp/scroll-lock.el
index fa1f3a633b5..12cdf2d0723 100644
--- a/lisp/scroll-lock.el
+++ b/lisp/scroll-lock.el
@@ -1,6 +1,6 @@
 ;;; scroll-lock.el --- Scroll lock scrolling.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Ralf Angeli <angeli@iwi.uni-sb.de>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/select.el b/lisp/select.el
index 5b9cca80a38..7f089c62dd5 100644
--- a/lisp/select.el
+++ b/lisp/select.el
@@ -1,6 +1,6 @@
 ;;; select.el --- lisp portion of standard selection support  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
diff --git a/lisp/server.el b/lisp/server.el
index 8f4ca4cbc6c..35b38ef8fa6 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -1,6 +1,6 @@
 ;;; server.el --- Lisp code for GNU Emacs running as server process -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1986-1987, 1992, 1994-2022 Free Software Foundation,
+;; Copyright (C) 1986-1987, 1992, 1994-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: William Sommerfeld <wesommer@athena.mit.edu>
@@ -1502,7 +1502,7 @@ so don't mark these buffers specially, just visit them 
normally."
                                          minibuffer-auto-raise))
               (filen (car file))
               (obuf (get-file-buffer filen)))
-         (add-to-history 'file-name-history filen)
+          (file-name-history--add filen)
          (if (null obuf)
              (progn
                (run-hooks 'pre-command-hook)
diff --git a/lisp/ses.el b/lisp/ses.el
index a5fd1774dd7..30bf33e47bf 100644
--- a/lisp/ses.el
+++ b/lisp/ses.el
@@ -1,6 +1,6 @@
 ;;; ses.el --- Simple Emacs Spreadsheet  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Jonathan Yavner <jyavner@member.fsf.org>
 ;; Maintainer: Vincent Belaïche <vincentb1@users.sourceforge.net>
diff --git a/lisp/shadowfile.el b/lisp/shadowfile.el
index c1c31fe9c69..33340a371f1 100644
--- a/lisp/shadowfile.el
+++ b/lisp/shadowfile.el
@@ -1,6 +1,6 @@
 ;;; shadowfile.el --- automatic file copying  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <boris@gnu.org>
 ;; Keywords: comm files
diff --git a/lisp/shell.el b/lisp/shell.el
index dadbdcbc034..5cf108bfa3b 100644
--- a/lisp/shell.el
+++ b/lisp/shell.el
@@ -1,6 +1,6 @@
 ;;; shell.el --- specialized comint.el for running the shell -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1988, 1993-1997, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1988, 1993-1997, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Olin Shivers <shivers@cs.cmu.edu>
@@ -395,12 +395,10 @@ Useful for shells like zsh that has this feature."
 
 (defvar-keymap shell-repeat-map
   :doc "Keymap to repeat shell key sequences.  Used in `repeat-mode'."
+  :repeat t
   "C-f" #'shell-forward-command
   "C-b" #'shell-backward-command)
 
-(put #'shell-forward-command 'repeat-map 'shell-repeat-map)
-(put #'shell-backward-command 'repeat-map 'shell-repeat-map)
-
 (defcustom shell-mode-hook '()
   "Hook for customizing Shell mode."
   :type 'hook
diff --git a/lisp/simple.el b/lisp/simple.el
index f85428ca740..7910454e2f6 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -1,6 +1,6 @@
 ;;; simple.el --- basic editing commands for Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1987, 1993-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1987, 1993-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
@@ -3590,7 +3590,7 @@ Return what remains of the list."
                    ;; said it would do.
                    (unless (and (= start start-mark)
                                 (= (+ delta end) end-mark))
-                     (error "Changes to be undone by function different from 
announced"))
+                     (error "Changes undone by function are different from the 
announced ones"))
                    (set-marker start-mark nil)
                    (set-marker end-mark nil))
                (apply fun-args))
@@ -8438,6 +8438,43 @@ are interchanged."
   (interactive "*p")
   (transpose-subr 'forward-word arg))
 
+(defvar transpose-sexps-function
+  (lambda (arg)
+    ;; Here we should try to simulate the behavior of
+    ;; (cons (progn (forward-sexp x) (point))
+    ;;       (progn (forward-sexp (- x)) (point)))
+    ;; Except that we don't want to rely on the second forward-sexp
+    ;; putting us back to where we want to be, since forward-sexp-function
+    ;; might do funny things like infix-precedence.
+    (if (if (> arg 0)
+           (looking-at "\\sw\\|\\s_")
+         (and (not (bobp))
+              (save-excursion
+                 (forward-char -1)
+                 (looking-at "\\sw\\|\\s_"))))
+        ;; Jumping over a symbol.  We might be inside it, mind you.
+       (progn (funcall (if (> arg 0)
+                           #'skip-syntax-backward #'skip-syntax-forward)
+                       "w_")
+              (cons (save-excursion (forward-sexp arg) (point)) (point)))
+      ;; Otherwise, we're between sexps.  Take a step back before jumping
+      ;; to make sure we'll obey the same precedence no matter which
+      ;; direction we're going.
+      (funcall (if (> arg 0) #'skip-syntax-backward #'skip-syntax-forward)
+               " .")
+      (cons (save-excursion (forward-sexp arg) (point))
+           (progn (while (or (forward-comment (if (> arg 0) 1 -1))
+                             (not (zerop (funcall (if (> arg 0)
+                                                      #'skip-syntax-forward
+                                                    #'skip-syntax-backward)
+                                                  ".")))))
+                  (point)))))
+  "If non-nil, `transpose-sexps' delegates to this function.
+
+This function takes one argument ARG, a number.  Its expected
+return value is a position pair, which is a cons (BEG . END),
+where BEG and END are buffer positions.")
+
 (defun transpose-sexps (arg &optional interactive)
   "Like \\[transpose-chars] (`transpose-chars'), but applies to sexps.
 Unlike `transpose-words', point must be between the two sexps and not
@@ -8453,38 +8490,7 @@ report errors as appropriate for this kind of usage."
       (condition-case nil
           (transpose-sexps arg nil)
         (scan-error (user-error "Not between two complete sexps")))
-    (transpose-subr
-     (lambda (arg)
-       ;; Here we should try to simulate the behavior of
-       ;; (cons (progn (forward-sexp x) (point))
-       ;;       (progn (forward-sexp (- x)) (point)))
-       ;; Except that we don't want to rely on the second forward-sexp
-       ;; putting us back to where we want to be, since forward-sexp-function
-       ;; might do funny things like infix-precedence.
-       (if (if (> arg 0)
-              (looking-at "\\sw\\|\\s_")
-            (and (not (bobp))
-                 (save-excursion
-                    (forward-char -1)
-                    (looking-at "\\sw\\|\\s_"))))
-          ;; Jumping over a symbol.  We might be inside it, mind you.
-          (progn (funcall (if (> arg 0)
-                              'skip-syntax-backward 'skip-syntax-forward)
-                          "w_")
-                 (cons (save-excursion (forward-sexp arg) (point)) (point)))
-         ;; Otherwise, we're between sexps.  Take a step back before jumping
-         ;; to make sure we'll obey the same precedence no matter which
-         ;; direction we're going.
-         (funcall (if (> arg 0) 'skip-syntax-backward 'skip-syntax-forward)
-                  " .")
-         (cons (save-excursion (forward-sexp arg) (point))
-              (progn (while (or (forward-comment (if (> arg 0) 1 -1))
-                                (not (zerop (funcall (if (> arg 0)
-                                                         'skip-syntax-forward
-                                                       'skip-syntax-backward)
-                                                     ".")))))
-                     (point)))))
-     arg 'special)))
+    (transpose-subr transpose-sexps-function arg 'special)))
 
 (defun transpose-lines (arg)
   "Exchange current line and previous line, leaving point after both.
@@ -8509,13 +8515,15 @@ With argument 0, interchanges line point is in with 
line mark is in."
 ;; FIXME document SPECIAL.
 (defun transpose-subr (mover arg &optional special)
   "Subroutine to do the work of transposing objects.
-Works for lines, sentences, paragraphs, etc.  MOVER is a function that
-moves forward by units of the given object (e.g. `forward-sentence',
-`forward-paragraph').  If ARG is zero, exchanges the current object
-with the one containing mark.  If ARG is an integer, moves the
-current object past ARG following (if ARG is positive) or
-preceding (if ARG is negative) objects, leaving point after the
-current object."
+Works for lines, sentences, paragraphs, etc.  MOVER is a function
+that moves forward by units of the given
+object (e.g. `forward-sentence', `forward-paragraph'), or a
+function calculating a cons of buffer positions.
+
+  If ARG is zero, exchanges the current object with the one
+containing mark.  If ARG is an integer, moves the current object
+past ARG following (if ARG is positive) or preceding (if ARG is
+negative) objects, leaving point after the current object."
   (let ((aux (if special mover
               (lambda (x)
                 (cons (progn (funcall mover x) (point))
@@ -8542,6 +8550,8 @@ current object."
       (goto-char (+ (car pos2) (- (cdr pos1) (car pos1))))))))
 
 (defun transpose-subr-1 (pos1 pos2)
+  (unless (and pos1 pos2)
+    (error "Don't have two things to transpose"))
   (when (> (car pos1) (cdr pos1)) (setq pos1 (cons (cdr pos1) (car pos1))))
   (when (> (car pos2) (cdr pos2)) (setq pos2 (cons (cdr pos2) (car pos2))))
   (when (> (car pos1) (car pos2))
@@ -10053,6 +10063,8 @@ PREFIX is the string that represents this modifier in 
an event type symbol."
            event-type
          (cons event-type (cdr event)))))))
 
+;; This is what makes "C-x @" followed by [hsmaSc] work even though
+;; you won't find any (define-key ctl-x-map "@" ...) binding.
 (define-key function-key-map [?\C-x ?@ ?h] 'event-apply-hyper-modifier)
 (define-key function-key-map [?\C-x ?@ ?s] 'event-apply-super-modifier)
 (define-key function-key-map [?\C-x ?@ ?m] 'event-apply-meta-modifier)
diff --git a/lisp/skeleton.el b/lisp/skeleton.el
index 1bfc29f34e3..b633490ecca 100644
--- a/lisp/skeleton.el
+++ b/lisp/skeleton.el
@@ -1,6 +1,6 @@
 ;;; skeleton.el --- Lisp language extension for writing statement skeletons  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1993-1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Daniel Pfeiffer <occitan@esperanto.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/so-long.el b/lisp/so-long.el
index fc991623255..b93b047ce55 100644
--- a/lisp/so-long.el
+++ b/lisp/so-long.el
@@ -1,6 +1,6 @@
 ;;; so-long.el --- Say farewell to performance problems with minified code.  
-*- lexical-binding:t -*-
 ;;
-;; Copyright (C) 2015-2016, 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2016, 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Phil Sainty <psainty@orcon.net.nz>
 ;; Maintainer: Phil Sainty <psainty@orcon.net.nz>
diff --git a/lisp/sort.el b/lisp/sort.el
index d04f075abd1..a9686f92d48 100644
--- a/lisp/sort.el
+++ b/lisp/sort.el
@@ -1,6 +1,6 @@
 ;;; sort.el --- commands to sort text in an Emacs buffer -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 1986-1987, 1994-1995, 2001-2022 Free Software
+;; Copyright (C) 1986-1987, 1994-1995, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Howie Kaye
@@ -86,7 +86,7 @@ second key.  If PREDICATE is nil, comparison is done with `<' 
if
 the keys are numbers, with `compare-buffer-substrings' if the
 keys are cons cells (the car and cdr of each cons cell are taken
 as start and end positions), and with `string<' otherwise."
-  ;; Heuristically try to avoid messages if sorting a small amt of text.
+  ;; Heuristically try to avoid messages if sorting a small amount of text.
   (let ((messages (> (- (point-max) (point-min)) 50000)))
     (save-excursion
       (if messages (message "Finding sort keys..."))
diff --git a/lisp/soundex.el b/lisp/soundex.el
index 2a6605c00b1..2cffec18d8e 100644
--- a/lisp/soundex.el
+++ b/lisp/soundex.el
@@ -1,6 +1,6 @@
 ;;; soundex.el --- implement Soundex algorithm -*- lexical-binding: t -*-
 
-;; Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Christian Plaunt <chris@bliss.berkeley.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/speedbar.el b/lisp/speedbar.el
index 7a279bdaa0e..60113ca1410 100644
--- a/lisp/speedbar.el
+++ b/lisp/speedbar.el
@@ -1,6 +1,6 @@
 ;;; speedbar.el --- quick access to files and tags in a frame  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: file, tags, tools
diff --git a/lisp/sqlite-mode.el b/lisp/sqlite-mode.el
index fb2ceab383f..83762b61943 100644
--- a/lisp/sqlite-mode.el
+++ b/lisp/sqlite-mode.el
@@ -1,6 +1,6 @@
 ;;; sqlite-mode.el --- Mode for examining sqlite3 database files  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/sqlite.el b/lisp/sqlite.el
index 6a8a53a699e..aad0aa40fa4 100644
--- a/lisp/sqlite.el
+++ b/lisp/sqlite.el
@@ -1,6 +1,6 @@
 ;;; sqlite.el --- Functions for interacting with sqlite3 databases  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/startup.el b/lisp/startup.el
index 6270de2ace6..fa84985580e 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -1,6 +1,6 @@
 ;;; startup.el --- process Emacs shell arguments  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1992, 1994-2022 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1992, 1994-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -2921,7 +2921,7 @@ nil default-directory" name)
        (when (looking-at "#!")
          (forward-line))
        (let (value form)
-         (while (ignore-error 'end-of-file
+         (while (ignore-error end-of-file
                   (setq form (read (current-buffer))))
            (setq value (eval form t)))
          (kill-emacs (if (numberp value)
diff --git a/lisp/strokes.el b/lisp/strokes.el
index e5719dfd5de..fe244d448d8 100644
--- a/lisp/strokes.el
+++ b/lisp/strokes.el
@@ -1,6 +1,6 @@
 ;;; strokes.el --- control Emacs through mouse strokes  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1997, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: David Bakhash <cadet@alum.mit.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/subr.el b/lisp/subr.el
index 4fa63a1f3cd..2adf1033911 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -1,6 +1,6 @@
 ;;; subr.el --- basic lisp subroutines for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1992, 1994-1995, 1999-2022 Free Software
+;; Copyright (C) 1985-1986, 1992, 1994-1995, 1999-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -280,14 +280,20 @@ change the list."
 When COND yields non-nil, eval BODY forms sequentially and return
 value of last one, or nil if there are none."
   (declare (indent 1) (debug t))
-  (list 'if cond (cons 'progn body)))
+  (if body
+      (list 'if cond (cons 'progn body))
+    (macroexp-warn-and-return (format-message "`when' with empty body")
+                              cond '(empty-body when) t)))
 
 (defmacro unless (cond &rest body)
   "If COND yields nil, do BODY, else return nil.
 When COND yields nil, eval BODY forms sequentially and return
 value of last one, or nil if there are none."
   (declare (indent 1) (debug t))
-  (cons 'if (cons cond (cons nil body))))
+  (if body
+      (cons 'if (cons cond (cons nil body)))
+    (macroexp-warn-and-return (format-message "`unless' with empty body")
+                              cond '(empty-body unless) t)))
 
 (defsubst subr-primitive-p (object)
   "Return t if OBJECT is a built-in primitive function."
@@ -380,9 +386,24 @@ without silencing all errors."
   "Execute BODY; if the error CONDITION occurs, return nil.
 Otherwise, return result of last form in BODY.
 
-CONDITION can also be a list of error conditions."
+CONDITION can also be a list of error conditions.
+The CONDITION argument is not evaluated.  Do not quote it."
   (declare (debug t) (indent 1))
-  `(condition-case nil (progn ,@body) (,condition nil)))
+  (cond
+   ((and (eq (car-safe condition) 'quote)
+         (cdr condition) (null (cddr condition)))
+    (macroexp-warn-and-return
+     (format-message
+      "`ignore-error' condition argument should not be quoted: %S"
+      condition)
+     `(condition-case nil (progn ,@body) (,(cadr condition) nil))
+     nil t condition))
+   (body
+    `(condition-case nil (progn ,@body) (,condition nil)))
+   (t
+    (macroexp-warn-and-return (format-message "`ignore-error' with empty body")
+                              nil '(empty-body ignore-error) t condition))))
+
 
 ;;;; Basic Lisp functions.
 
@@ -510,8 +531,9 @@ This function is provided for compatibility.  In new code, 
use `ash'
 instead."
   (declare (compiler-macro
             (lambda (form)
-              (macroexp-warn-and-return "avoid `lsh'; use `ash' instead"
-                                        form '(suspicious lsh) t form))))
+              (macroexp-warn-and-return
+               (format-message "avoid `lsh'; use `ash' instead")
+               form '(suspicious lsh) t form))))
   (when (and (< value 0) (< count 0))
     (when (< value most-negative-fixnum)
       (signal 'args-out-of-range (list value count)))
@@ -1576,16 +1598,18 @@ in the current Emacs session, then this function may 
return nil."
   ;; Use `window-point' for the case when the current buffer
   ;; is temporarily switched to some other buffer (bug#50256)
   (let* ((pos (window-point))
-         (posn (posn-at-point pos)))
-    (if (null posn) ;; `pos' is "out of sight".
-        (list (selected-window) pos '(0 . 0) 0)
-      ;; If `pos' is inside a chunk of text hidden by an `invisible'
-      ;; or `display' property, `posn-at-point' returns the position
-      ;; that *is* visible, whereas `event--posn-at-point' is used
-      ;; when we have a keyboard event, whose position is `point' even
-      ;; if that position is invisible.
-      (setf (nth 5 posn) pos)
-      posn)))
+         (posn (posn-at-point pos (if (minibufferp (current-buffer))
+                                      (minibuffer-window)))))
+    (cond ((null posn) ;; `pos' is "out of sight".
+           (setq posn (list (selected-window) pos '(0 . 0) 0)))
+          ;; If `pos' is inside a chunk of text hidden by an `invisible'
+          ;; or `display' property, `posn-at-point' returns the position
+          ;; that *is* visible, whereas `event--posn-at-point' is used
+          ;; when we have a keyboard event, whose position is `point' even
+          ;; if that position is invisible.
+          ((> (length posn) 5)
+           (setf (nth 5 posn) pos)))
+    posn))
 
 (defun event-start (event)
   "Return the starting position of EVENT.
@@ -3278,7 +3302,7 @@ floating point support."
             (lambda (form)
               (if (not (or (numberp nodisp) obsolete)) form
                 (macroexp-warn-and-return
-                 "Obsolete calling convention for 'sit-for'"
+                 (format-message "Obsolete calling convention for `sit-for'")
                  `(,(car form) (+ ,seconds (/ (or ,nodisp 0) 1000.0)) 
,obsolete)
                  '(obsolete sit-for))))))
   ;; This used to be implemented in C until the following discussion:
@@ -4848,6 +4872,7 @@ but that should be robust in the unexpected case that an 
error is signaled."
   (declare (debug t) (indent 1))
   (let* ((err (make-symbol "err"))
          (orig-body body)
+         (orig-format format)
          (format (if (and (stringp format) body) format
                    (prog1 "Error: %S"
                      (if format (push format body)))))
@@ -4858,7 +4883,10 @@ but that should be robust in the unexpected case that an 
error is signaled."
     (if (eq orig-body body) exp
       ;; The use without `format' is obsolete, let's warn when we bump
       ;; into any such remaining uses.
-      (macroexp-warn-and-return "Missing format argument" exp nil nil 
format))))
+      (macroexp-warn-and-return
+       (format-message "Missing format argument in `with-demote-errors'")
+       exp nil nil
+       orig-format))))
 
 (defmacro combine-after-change-calls (&rest body)
   "Execute BODY, but don't call the after-change functions till the end.
@@ -6903,11 +6931,8 @@ sentence (see Info node `(elisp) Documentation Tips')."
 
 (defun json-available-p ()
   "Return non-nil if Emacs has libjansson support."
-  (and (fboundp 'json-serialize)
-       (condition-case nil
-           (json-serialize t)
-         (:success t)
-         (json-unavailable nil))))
+  (and (fboundp 'json--available-p)
+       (json--available-p)))
 
 (defun ensure-list (object)
   "Return OBJECT as a list.
@@ -7041,7 +7066,7 @@ CONDITION is either:
   * `major-mode': the buffer matches if the buffer's major mode
     is eq to the cons-cell's cdr.  Prefer using `derived-mode'
     instead when both can work.
-  * `not': the cdr is interpreted as a negation of a condition.
+  * `not': the cadr is interpreted as a negation of a condition.
   * `and': the cdr is a list of recursive conditions, that all have
     to be met.
   * `or': the cdr is a list of recursive condition, of which at
diff --git a/lisp/svg.el b/lisp/svg.el
index 3c97b4a46b6..15004357811 100644
--- a/lisp/svg.el
+++ b/lisp/svg.el
@@ -1,6 +1,6 @@
 ;;; svg.el --- SVG image creation functions -*- lexical-binding: t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;         Felix E. Klee <felix.klee@inka.de>
diff --git a/lisp/t-mouse.el b/lisp/t-mouse.el
index 7a4e7f330ea..c461743b0f1 100644
--- a/lisp/t-mouse.el
+++ b/lisp/t-mouse.el
@@ -4,7 +4,7 @@
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: mouse gpm linux
 
-;; Copyright (C) 1994-1995, 1998, 2006-2022 Free Software Foundation,
+;; Copyright (C) 1994-1995, 1998, 2006-2023 Free Software Foundation,
 ;; Inc.
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el
index 065116d5129..9f53b649efd 100644
--- a/lisp/tab-bar.el
+++ b/lisp/tab-bar.el
@@ -1,6 +1,6 @@
 ;;; tab-bar.el --- frame-local tabs with named persistent window 
configurations -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <juri@linkov.net>
 ;; Keywords: frames tabs
@@ -1029,7 +1029,7 @@ This variable has effect only when `tab-bar-auto-width' 
is non-nil."
   :initialize #'custom-initialize-default
   :set (lambda (sym val)
          (set-default sym val)
-         (setq tab-bar--fixed-width-hash nil))
+         (setq tab-bar--auto-width-hash nil))
   :group 'tab-bar
   :version "29.1")
 
@@ -1048,17 +1048,17 @@ tab bar might wrap to the second line when it 
shouldn't.")
      tab-bar-tab-group-inactive)
   "Resize tabs only with these faces.")
 
-(defvar tab-bar--fixed-width-hash nil
+(defvar tab-bar--auto-width-hash nil
   "Memoization table for `tab-bar-auto-width'.")
 
 (defun tab-bar-auto-width (items)
   "Return tab-bar items with resized tab names."
-  (unless tab-bar--fixed-width-hash
-    (define-hash-table-test 'tab-bar--fixed-width-hash-test
+  (unless tab-bar--auto-width-hash
+    (define-hash-table-test 'tab-bar--auto-width-hash-test
                             #'equal-including-properties
                             #'sxhash-equal-including-properties)
-    (setq tab-bar--fixed-width-hash
-          (make-hash-table :test 'tab-bar--fixed-width-hash-test)))
+    (setq tab-bar--auto-width-hash
+          (make-hash-table :test 'tab-bar--auto-width-hash-test)))
   (let ((tabs nil)    ;; list of resizable tabs
         (non-tabs "") ;; concatenated names of non-resizable tabs
         (width 0))    ;; resize tab names to this width
@@ -1086,7 +1086,7 @@ tab bar might wrap to the second line when it shouldn't.")
         (setf (nth 2 item)
               (with-memoization (gethash (list (selected-frame)
                                                width (nth 2 item))
-                                         tab-bar--fixed-width-hash)
+                                         tab-bar--auto-width-hash)
                 (let* ((name (nth 2 item))
                        (len (length name))
                        (close-p (get-text-property (1- len) 'close-tab name))
@@ -1116,7 +1116,8 @@ tab bar might wrap to the second line when it shouldn't.")
                           (del-pos2 (if close-p -1 nil)))
                       (while continue
                         (setq name (concat (substring name 0 del-pos1)
-                                           (substring name del-pos2)))
+                                           (and del-pos2
+                                                (substring name del-pos2))))
                         (setq curr-width (string-pixel-width name))
                         (if (and (> curr-width width)
                                  (< curr-width prev-width))
@@ -2654,18 +2655,16 @@ When `switch-to-buffer-obey-display-actions' is non-nil,
 (defvar-keymap tab-bar-switch-repeat-map
   :doc "Keymap to repeat tab switch key sequences \\`C-x t o o O'.
 Used in `repeat-mode'."
+  :repeat t
   "o" #'tab-next
   "O" #'tab-previous)
-(put 'tab-next 'repeat-map 'tab-bar-switch-repeat-map)
-(put 'tab-previous 'repeat-map 'tab-bar-switch-repeat-map)
 
 (defvar-keymap tab-bar-move-repeat-map
   :doc "Keymap to repeat tab move key sequences \\`C-x t m m M'.
 Used in `repeat-mode'."
+  :repeat t
   "m" #'tab-move
   "M" #'tab-bar-move-tab-backward)
-(put 'tab-move 'repeat-map 'tab-bar-move-repeat-map)
-(put 'tab-bar-move-tab-backward 'repeat-map 'tab-bar-move-repeat-map)
 
 
 (provide 'tab-bar)
diff --git a/lisp/tab-line.el b/lisp/tab-line.el
index c4e4a688720..1958f12975f 100644
--- a/lisp/tab-line.el
+++ b/lisp/tab-line.el
@@ -1,6 +1,6 @@
 ;;; tab-line.el --- window-local tabs with window buffers -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <juri@linkov.net>
 ;; Keywords: windows tabs
@@ -572,9 +572,14 @@ For use in `tab-line-tab-face-functions'."
 
 (defvar tab-line-auto-hscroll)
 
-(defun tab-line-cache-key-default (_tabs)
+(defun tab-line-cache-key-default (tabs)
   "Return default list of cache keys."
   (list
+   tabs
+   ;; handle buffer renames
+   (buffer-name (window-buffer))
+   ;; handle tab-line scrolling
+   (window-parameter nil 'tab-line-hscroll)
    ;; for setting face 'tab-line-tab-current'
    (mode-line-window-selected-p)
    ;; for `tab-line-tab-face-modified'
@@ -591,12 +596,7 @@ of cache keys.  You can use `add-function' to add more 
cache keys.")
 (defun tab-line-format ()
   "Format for displaying the tab line of the selected window."
   (let* ((tabs (funcall tab-line-tabs-function))
-         (cache-key (append (list tabs
-                                  ;; handle buffer renames
-                                  (buffer-name (window-buffer))
-                                  ;; handle tab-line scrolling
-                                  (window-parameter nil 'tab-line-hscroll))
-                            (funcall tab-line-cache-key-function tabs)))
+         (cache-key (funcall tab-line-cache-key-function tabs))
          (cache (window-parameter nil 'tab-line-cache)))
     ;; Enable auto-hscroll again after it was disabled on manual scrolling.
     ;; The moment to enable it is when the window-buffer was updated.
diff --git a/lisp/tabify.el b/lisp/tabify.el
index 61d5fe5131c..019c83cf7df 100644
--- a/lisp/tabify.el
+++ b/lisp/tabify.el
@@ -1,6 +1,6 @@
 ;;; tabify.el --- tab conversion commands for Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985, 1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Package: emacs
diff --git a/lisp/talk.el b/lisp/talk.el
index 9ed6540d834..46c36c0b6e5 100644
--- a/lisp/talk.el
+++ b/lisp/talk.el
@@ -1,6 +1,6 @@
 ;;; talk.el --- allow several users to talk to each other through Emacs  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: comm, frames
diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el
index 49d84319c51..c9206028e94 100644
--- a/lisp/tar-mode.el
+++ b/lisp/tar-mode.el
@@ -1,6 +1,6 @@
 ;;; tar-mode.el --- simple editing of tar files from GNU Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1990-1991, 1993-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1991, 1993-2023 Free Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski <jwz@lucid.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/tempo.el b/lisp/tempo.el
index 6da7e82d7cb..b59342b2c9d 100644
--- a/lisp/tempo.el
+++ b/lisp/tempo.el
@@ -1,6 +1,6 @@
 ;;; tempo.el --- Flexible template insertion -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1994-1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: David Kågedal <davidk@lysator.liu.se>
 ;; Created: 16 Feb 1994
diff --git a/lisp/term.el b/lisp/term.el
index 550aa781cc5..3e4907e8bfc 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -1,6 +1,6 @@
 ;;; term.el --- general command interpreter in a window stuff -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1988, 1990, 1992, 1994-1995, 2001-2022 Free Software
+;; Copyright (C) 1988, 1990, 1992, 1994-1995, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Per Bothner <per@bothner.com>
diff --git a/lisp/term/AT386.el b/lisp/term/AT386.el
index 3169f712bc5..27065b73591 100644
--- a/lisp/term/AT386.el
+++ b/lisp/term/AT386.el
@@ -1,6 +1,6 @@
 ;;; AT386.el --- terminal support package for IBM AT keyboards  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1992, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
 ;; Keywords: terminals
diff --git a/lisp/term/README b/lisp/term/README
index ff3c1de6350..6940e30c002 100644
--- a/lisp/term/README
+++ b/lisp/term/README
@@ -1,4 +1,4 @@
-Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/lisp/term/common-win.el b/lisp/term/common-win.el
index f7faba9cb7c..38b3c580625 100644
--- a/lisp/term/common-win.el
+++ b/lisp/term/common-win.el
@@ -1,6 +1,6 @@
 ;;; common-win.el --- common part of handling window systems  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: terminals
diff --git a/lisp/term/fbterm.el b/lisp/term/fbterm.el
index ad7150c1a1f..d9981778dbe 100644
--- a/lisp/term/fbterm.el
+++ b/lisp/term/fbterm.el
@@ -1,6 +1,6 @@
 ;;; fbterm.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Note that, in some versions of fbterm, the TERM environment
 ;; variable is set to "linux".  When that's the case, the code below
diff --git a/lisp/term/haiku-win.el b/lisp/term/haiku-win.el
index 24942d96c18..ae5a2f2fc6b 100644
--- a/lisp/term/haiku-win.el
+++ b/lisp/term/haiku-win.el
@@ -1,6 +1,6 @@
 ;;; haiku-win.el --- set up windowing on Haiku -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/term/internal.el b/lisp/term/internal.el
index 141adbf8534..14ebb0f6609 100644
--- a/lisp/term/internal.el
+++ b/lisp/term/internal.el
@@ -1,6 +1,6 @@
 ;;; internal.el --- support for PC internal terminal  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1993-1994, 1998-1999, 2001-2022 Free Software
+;; Copyright (C) 1993-1994, 1998-1999, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Morten Welinder <terra@diku.dk>
diff --git a/lisp/term/iris-ansi.el b/lisp/term/iris-ansi.el
index 1daaa604007..abe7282f823 100644
--- a/lisp/term/iris-ansi.el
+++ b/lisp/term/iris-ansi.el
@@ -1,6 +1,6 @@
 ;;; iris-ansi.el --- configure Emacs for SGI xwsh and winterm apps  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Dan Nicolaescu <dann@ics.uci.edu>
 
diff --git a/lisp/term/konsole.el b/lisp/term/konsole.el
index 44ef8b9fac9..7db3695f5d0 100644
--- a/lisp/term/konsole.el
+++ b/lisp/term/konsole.el
@@ -1,5 +1,5 @@
 ;;; konsole.el --- terminal initialization for konsole  -*- lexical-binding:t 
-*-
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 (require 'term/xterm)
 
diff --git a/lisp/term/news.el b/lisp/term/news.el
index 3e896b3dd6d..f2fd814d438 100644
--- a/lisp/term/news.el
+++ b/lisp/term/news.el
@@ -1,6 +1,6 @@
 ;;; news.el --- keypad and function key bindings for the Sony NEWS keyboard  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1989, 1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals
diff --git a/lisp/term/ns-win.el b/lisp/term/ns-win.el
index 82b6281eb69..7525b9321ca 100644
--- a/lisp/term/ns-win.el
+++ b/lisp/term/ns-win.el
@@ -1,6 +1,6 @@
 ;;; ns-win.el --- lisp side of interface with NeXT/Open/GNUstep/macOS window 
system  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1993-1994, 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2005-2023 Free Software Foundation, Inc.
 
 ;; Authors: Carl Edman
 ;;     Christian Limpach
diff --git a/lisp/term/pc-win.el b/lisp/term/pc-win.el
index 514267a52d6..589a2dc85e0 100644
--- a/lisp/term/pc-win.el
+++ b/lisp/term/pc-win.el
@@ -1,6 +1,6 @@
 ;;; pc-win.el --- setup support for `PC windows' (whatever that is)  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1994, 1996-1997, 1999, 2001-2022 Free Software
+;; Copyright (C) 1994, 1996-1997, 1999, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Morten Welinder <terra@diku.dk>
diff --git a/lisp/term/pgtk-win.el b/lisp/term/pgtk-win.el
index a398bb9fb22..f2552d3b057 100644
--- a/lisp/term/pgtk-win.el
+++ b/lisp/term/pgtk-win.el
@@ -1,6 +1,7 @@
 ;;; pgtk-win.el --- parse relevant switches and set up for Pure-GTK  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1995, 2001-2020, 2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2020, 2022-2023 Free Software Foundation,
+;; Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals
diff --git a/lisp/term/rxvt.el b/lisp/term/rxvt.el
index 4f21d9c7b4e..af1ea36ff7d 100644
--- a/lisp/term/rxvt.el
+++ b/lisp/term/rxvt.el
@@ -1,6 +1,6 @@
 ;;; rxvt.el --- define function key sequences and standard colors for rxvt  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Eli Zaretskii
 ;; Keywords: terminals
diff --git a/lisp/term/screen.el b/lisp/term/screen.el
index 62e3e64ca9e..912664f2bae 100644
--- a/lisp/term/screen.el
+++ b/lisp/term/screen.el
@@ -1,5 +1,5 @@
 ;;; screen.el --- terminal initialization for screen and tmux  -*- 
lexical-binding: t -*-
-;; Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2023 Free Software Foundation, Inc.
 
 (require 'term/xterm)
 
diff --git a/lisp/term/st.el b/lisp/term/st.el
index f44644e4db1..334acdba560 100644
--- a/lisp/term/st.el
+++ b/lisp/term/st.el
@@ -1,6 +1,6 @@
 ;;; st.el --- terminal initialization for st  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;;; Commentary:
 
diff --git a/lisp/term/sun.el b/lisp/term/sun.el
index 2742d8df91a..2189c394bfc 100644
--- a/lisp/term/sun.el
+++ b/lisp/term/sun.el
@@ -1,6 +1,6 @@
 ;;; sun.el --- keybinding for standard default sunterm keys  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1987, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Jeff Peck <peck@sun.com>
 ;; Keywords: terminals
diff --git a/lisp/term/tmux.el b/lisp/term/tmux.el
index 02d1a3c0327..5dba3aa4ebe 100644
--- a/lisp/term/tmux.el
+++ b/lisp/term/tmux.el
@@ -1,5 +1,5 @@
 ;;; tmux.el --- terminal initialization for tmux  -*- lexical-binding: t -*-
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 (require 'term/xterm)
 
diff --git a/lisp/term/tty-colors.el b/lisp/term/tty-colors.el
index 79dc1c63771..cb7ff385ce7 100644
--- a/lisp/term/tty-colors.el
+++ b/lisp/term/tty-colors.el
@@ -1,6 +1,6 @@
 ;;; tty-colors.el --- color support for character terminals  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Eli Zaretskii
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/term/tvi970.el b/lisp/term/tvi970.el
index 96b0f936d1f..5f6e1a20f85 100644
--- a/lisp/term/tvi970.el
+++ b/lisp/term/tvi970.el
@@ -1,6 +1,6 @@
 ;;; tvi970.el --- terminal support for the Televideo 970  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 1992, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Jim Blandy <jimb@occs.cs.oberlin.edu>
 ;; Keywords: terminals
diff --git a/lisp/term/vt100.el b/lisp/term/vt100.el
index 2147c45784e..1275556b9cb 100644
--- a/lisp/term/vt100.el
+++ b/lisp/term/vt100.el
@@ -1,6 +1,6 @@
 ;;; vt100.el --- define VT100 function key sequences in function-key-map  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1989, 1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals
diff --git a/lisp/term/w32-win.el b/lisp/term/w32-win.el
index 34f899ecaaa..c9e25f4f83d 100644
--- a/lisp/term/w32-win.el
+++ b/lisp/term/w32-win.el
@@ -1,6 +1,6 @@
 ;;; w32-win.el --- parse switches controlling interface with W32 window system 
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Kevin Gallo
 ;; Keywords: terminals
diff --git a/lisp/term/w32console.el b/lisp/term/w32console.el
index c039470c0c7..396d80040ed 100644
--- a/lisp/term/w32console.el
+++ b/lisp/term/w32console.el
@@ -1,6 +1,6 @@
 ;;; w32console.el --- Setup w32 console keys and colors.  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals
diff --git a/lisp/term/wyse50.el b/lisp/term/wyse50.el
index 7bcbbbe72c2..5fe3e7fce31 100644
--- a/lisp/term/wyse50.el
+++ b/lisp/term/wyse50.el
@@ -1,6 +1,6 @@
 ;;; wyse50.el --- terminal support code for Wyse 50  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1989, 1993-1994, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1989, 1993-1994, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Daniel Pfeiffer <occitan@esperanto.org>,
diff --git a/lisp/term/x-win.el b/lisp/term/x-win.el
index 62684f52cc9..a9af6bd6d1c 100644
--- a/lisp/term/x-win.el
+++ b/lisp/term/x-win.el
@@ -1,6 +1,6 @@
 ;;; x-win.el --- parse relevant switches and set up for X  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals, i18n
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index bcd3907d1ea..295ef2b3f4c 100644
--- a/lisp/term/xterm.el
+++ b/lisp/term/xterm.el
@@ -1,6 +1,6 @@
 ;;; xterm.el --- define function key sequences and standard colors for xterm  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals
diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el
index 76675328daa..e0f311552d0 100644
--- a/lisp/textmodes/artist.el
+++ b/lisp/textmodes/artist.el
@@ -1,6 +1,6 @@
 ;;; artist.el --- draw ascii graphics with your mouse -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author:       Tomas Abrahamsson <tab@lysator.liu.se>
 ;; Keywords:     mouse
diff --git a/lisp/textmodes/bib-mode.el b/lisp/textmodes/bib-mode.el
index af49464d1ee..7037cabffc5 100644
--- a/lisp/textmodes/bib-mode.el
+++ b/lisp/textmodes/bib-mode.el
@@ -1,6 +1,6 @@
 ;;; bib-mode.el --- major mode for editing bib files  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1989, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Henry Kautz
 ;; (according to authors.el)
diff --git a/lisp/textmodes/bibtex-style.el b/lisp/textmodes/bibtex-style.el
index d1ffce37d34..649f1831558 100644
--- a/lisp/textmodes/bibtex-style.el
+++ b/lisp/textmodes/bibtex-style.el
@@ -1,6 +1,6 @@
 ;;; bibtex-style.el --- Major mode for BibTeX Style files -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2005, 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: tex
diff --git a/lisp/textmodes/bibtex.el b/lisp/textmodes/bibtex.el
index f4b557f443f..394f80f47ee 100644
--- a/lisp/textmodes/bibtex.el
+++ b/lisp/textmodes/bibtex.el
@@ -1,6 +1,6 @@
 ;;; bibtex.el --- BibTeX mode for GNU Emacs -*- lexical-binding: t -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Schoef <schoef@offis.uni-oldenburg.de>
 ;;      Bengt Martensson <bengt@mathematik.uni-Bremen.de>
@@ -1822,8 +1822,9 @@ Initialized by `bibtex-set-dialect'.")
      1 '(11))))
 
 (defvar bibtex-font-lock-keywords
-  ;; entry type and reference key
-  `((,bibtex-any-entry-maybe-empty-head
+  `(("\\$[^$\n]+\\$" . font-lock-string-face) ; bug#50202
+    ;; entry type and reference key
+    (,bibtex-any-entry-maybe-empty-head
      (,bibtex-type-in-head font-lock-function-name-face)
      (,bibtex-key-in-head font-lock-constant-face nil t))
     ;; optional field names (treated as comments)
@@ -3631,8 +3632,11 @@ if that value is non-nil.
   (setq-local fill-paragraph-function #'bibtex-fill-field)
   (setq-local font-lock-defaults
               '(bibtex-font-lock-keywords
-                nil t ((?$ . "\"")
-                       ;; Mathematical expressions should be fontified as 
strings
+                nil t ((?$ . ".")
+                       ;; Mathematical expressions should be fontified
+                       ;; as strings.  Yet `$' may also appear in certain
+                       ;; fields like `URL' when it does not delimit
+                       ;; a math expression (bug#50202).
                        (?\" . ".")
                        ;; Quotes are field delimiters and quote-delimited
                        ;; entries should be fontified in the same way as
@@ -4079,11 +4083,19 @@ INIT is surrounded by field delimiters, unless NODELIM 
is non-nil."
 If inside an entry, move to the beginning of it, otherwise move to the
 beginning of the previous entry.  If point is ahead of all BibTeX entries
 move point to the beginning of buffer.  Return the new location of point."
+  ;; This command is similar to `beginning-of-defun', but with historical
+  ;; differences.
+  ;; - It does not move point to the previous entry if point is already
+  ;;   at the beginning of an entry
+  ;; - It does not take an optional ARG that moves backward to the beginning
+  ;;   of a defun ARG times.
+  ;; - It returns point and the code relies on this.
   (interactive)
-  (skip-chars-forward " \t")
-  (if (looking-at "@")
-      (forward-char))
-  (re-search-backward "^[ \t]*@" nil 'move)
+  (beginning-of-line)
+  ;; `bibtex-any-valid-entry-type' would fail if users "disable"
+  ;; an entry by choosing an invalid entry type.
+  (or (looking-at bibtex-any-entry-maybe-empty-head)
+      (re-search-backward bibtex-any-entry-maybe-empty-head nil 'move))
   (point))
 
 (defun bibtex-end-of-entry ()
diff --git a/lisp/textmodes/conf-mode.el b/lisp/textmodes/conf-mode.el
index c3c9af5a834..d15fba9c43a 100644
--- a/lisp/textmodes/conf-mode.el
+++ b/lisp/textmodes/conf-mode.el
@@ -1,6 +1,6 @@
 ;;; conf-mode.el --- Simple major mode for editing conf/ini/properties files  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Daniel Pfeiffer <occitan@esperanto.org>
 ;; Keywords: conf ini windows java
diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el
index 822097a86d8..8991610a50f 100644
--- a/lisp/textmodes/css-mode.el
+++ b/lisp/textmodes/css-mode.el
@@ -1,6 +1,6 @@
 ;;; css-mode.el --- Major mode to edit CSS files  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Maintainer: Simen Heggestøyl <simenheg@gmail.com>
@@ -1412,39 +1412,18 @@ for determining whether point is within a selector."
    '((ERROR) @error))
   "Tree-sitter font-lock settings for `css-ts-mode'.")
 
-(defun css--treesit-imenu-1 (node)
-  "Helper for `css--treesit-imenu'.
-Find string representation for NODE and set marker, then recurse
-the subtrees."
-  (let* ((ts-node (car node))
-         (subtrees (mapcan #'css--treesit-imenu-1 (cdr node)))
-         (name (when ts-node
-                 (pcase (treesit-node-type ts-node)
-                   ("rule_set" (treesit-node-text
-                                (treesit-node-child ts-node 0) t))
-                   ("media_statement"
-                    (let ((block (treesit-node-child ts-node -1)))
-                      (string-trim
-                       (buffer-substring-no-properties
-                        (treesit-node-start ts-node)
-                        (treesit-node-start block))))))))
-         (marker (when ts-node
-                   (set-marker (make-marker)
-                               (treesit-node-start ts-node)))))
-    (cond
-     ((or (null ts-node) (null name)) subtrees)
-     (subtrees
-      `((,name ,(cons name marker) ,@subtrees)))
-     (t
-      `((,name . ,marker))))))
-
-(defun css--treesit-imenu ()
-  "Return Imenu alist for the current buffer."
-  (let* ((node (treesit-buffer-root-node))
-         (tree (treesit-induce-sparse-tree
-                node (rx (or "rule_set" "media_statement"))
-                nil 1000)))
-    (css--treesit-imenu-1 tree)))
+(defun css--treesit-defun-name (node)
+  "Return the defun name of NODE.
+Return nil if there is no name or if NODE is not a defun node."
+  (pcase (treesit-node-type node)
+    ("rule_set" (treesit-node-text
+                 (treesit-node-child node 0) t))
+    ("media_statement"
+     (let ((block (treesit-node-child node -1)))
+       (string-trim
+        (buffer-substring-no-properties
+         (treesit-node-start node)
+         (treesit-node-start block)))))))
 
 ;;; Completion
 
@@ -1825,23 +1804,29 @@ can also be used to fill comments.
   :syntax-table css-mode-syntax-table
   (when (treesit-ready-p 'css)
     ;; Borrowed from `css-mode'.
+    (setq-local syntax-propertize-function
+                css-syntax-propertize-function)
     (add-hook 'completion-at-point-functions
               #'css-completion-at-point nil 'local)
     (setq-local fill-paragraph-function #'css-fill-paragraph)
     (setq-local adaptive-fill-function #'css-adaptive-fill)
-    (setq-local add-log-current-defun-function #'css-current-defun-name)
+    ;; `css--fontify-region' first calls the default function, which
+    ;; will call tree-sitter's function, then it fontifies colors.
+    (setq-local font-lock-fontify-region-function #'css--fontify-region)
 
     ;; Tree-sitter specific setup.
     (treesit-parser-create 'css)
     (setq-local treesit-simple-indent-rules css--treesit-indent-rules)
     (setq-local treesit-defun-type-regexp "rule_set")
+    (setq-local treesit-defun-name-function #'css--treesit-defun-name)
     (setq-local treesit-font-lock-settings css--treesit-settings)
     (setq-local treesit-font-lock-feature-list
                 '((selector comment query keyword)
                   (property constant string)
                   (error variable function operator bracket)))
-    (setq-local imenu-create-index-function #'css--treesit-imenu)
-    (setq-local which-func-functions nil)
+    (setq-local treesit-simple-imenu-settings
+                `(( nil ,(rx bos (or "rule_set" "media_statement") eos)
+                    nil nil)))
     (treesit-major-mode-setup)))
 
 ;;;###autoload
diff --git a/lisp/textmodes/dns-mode.el b/lisp/textmodes/dns-mode.el
index 86da09c2168..0167c757473 100644
--- a/lisp/textmodes/dns-mode.el
+++ b/lisp/textmodes/dns-mode.el
@@ -1,6 +1,6 @@
 ;;; dns-mode.el --- a mode for viewing/editing Domain Name System master files 
 -*- lexical-binding: t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;; Keywords: DNS master zone file SOA comm
diff --git a/lisp/textmodes/emacs-authors-mode.el 
b/lisp/textmodes/emacs-authors-mode.el
index 3eba8e0e456..248234b1db1 100644
--- a/lisp/textmodes/emacs-authors-mode.el
+++ b/lisp/textmodes/emacs-authors-mode.el
@@ -1,6 +1,6 @@
 ;;; emacs-authors-mode.el --- font-locking for etc/AUTHORS  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 ;; Keywords: internal
diff --git a/lisp/textmodes/emacs-news-mode.el 
b/lisp/textmodes/emacs-news-mode.el
index 26f8f610eff..b844955e1be 100644
--- a/lisp/textmodes/emacs-news-mode.el
+++ b/lisp/textmodes/emacs-news-mode.el
@@ -1,6 +1,6 @@
 ;;; emacs-news-mode.el --- major mode to edit and view the NEWS file -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Keywords: tools
 
diff --git a/lisp/textmodes/enriched.el b/lisp/textmodes/enriched.el
index 26f22a9a4a7..ec3046decd4 100644
--- a/lisp/textmodes/enriched.el
+++ b/lisp/textmodes/enriched.el
@@ -1,6 +1,6 @@
 ;;; enriched.el --- read and save files in text/enriched format  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1994-1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <boris@gnu.org>
 ;; Keywords: wp, faces
diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el
index 23ba1a24f1f..2fde2ff6c4d 100644
--- a/lisp/textmodes/fill.el
+++ b/lisp/textmodes/fill.el
@@ -1,6 +1,6 @@
 ;;; fill.el --- fill commands for Emacs  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1985-1986, 1992, 1994-1997, 1999, 2001-2022 Free
+;; Copyright (C) 1985-1986, 1992, 1994-1997, 1999, 2001-2023 Free
 ;; Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el
index 11039f29630..84c207b8a48 100644
--- a/lisp/textmodes/flyspell.el
+++ b/lisp/textmodes/flyspell.el
@@ -1,6 +1,6 @@
 ;;; flyspell.el --- On-the-fly spell checker  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Manuel Serrano <Manuel.Serrano@sophia.inria.fr>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/glyphless-mode.el b/lisp/textmodes/glyphless-mode.el
index 4d48d90b562..99bbb2769e4 100644
--- a/lisp/textmodes/glyphless-mode.el
+++ b/lisp/textmodes/glyphless-mode.el
@@ -1,6 +1,6 @@
 ;;; glyphless-mode.el --- minor mode for displaying glyphless characters  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index b3fb326cf9b..3da6effbcfe 100644
--- a/lisp/textmodes/ispell.el
+++ b/lisp/textmodes/ispell.el
@@ -1,6 +1,6 @@
 ;;; ispell.el --- interface to spell checkers  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1994-1995, 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Ken Stevens <k.stevens@ieee.org>
 
diff --git a/lisp/textmodes/less-css-mode.el b/lisp/textmodes/less-css-mode.el
index bfb5566e896..c3905afb4e7 100644
--- a/lisp/textmodes/less-css-mode.el
+++ b/lisp/textmodes/less-css-mode.el
@@ -1,6 +1,6 @@
 ;;; less-css-mode.el --- Major mode for editing Less CSS files  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Steve Purcell <steve@sanityinc.com>
 ;; Maintainer: Simen Heggestøyl <simenheg@gmail.com>
diff --git a/lisp/textmodes/makeinfo.el b/lisp/textmodes/makeinfo.el
index 0c908c722db..16821944145 100644
--- a/lisp/textmodes/makeinfo.el
+++ b/lisp/textmodes/makeinfo.el
@@ -1,6 +1,6 @@
 ;;; makeinfo.el --- run makeinfo conveniently  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1991, 1993, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 1993, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Robert J. Chassell
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/mhtml-mode.el b/lisp/textmodes/mhtml-mode.el
index 2ce74dd68b3..ebb55ec279c 100644
--- a/lisp/textmodes/mhtml-mode.el
+++ b/lisp/textmodes/mhtml-mode.el
@@ -1,6 +1,6 @@
 ;;; mhtml-mode.el --- HTML editing mode that handles CSS and JS -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Keywords: wp, hypermedia, comm, languages
 
diff --git a/lisp/textmodes/nroff-mode.el b/lisp/textmodes/nroff-mode.el
index 4d1de18b2c8..7374fa63bec 100644
--- a/lisp/textmodes/nroff-mode.el
+++ b/lisp/textmodes/nroff-mode.el
@@ -1,6 +1,6 @@
 ;;; nroff-mode.el --- GNU Emacs major mode for editing nroff source  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: wp
diff --git a/lisp/textmodes/page-ext.el b/lisp/textmodes/page-ext.el
index b133b1e9e38..446112bce27 100644
--- a/lisp/textmodes/page-ext.el
+++ b/lisp/textmodes/page-ext.el
@@ -1,6 +1,6 @@
 ;;; page-ext.el --- extended page handling commands  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1990-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1990-2023 Free Software Foundation, Inc.
 
 ;; Author: Robert J. Chassell <bob@gnu.org>
 ;; (according to ack.texi)
diff --git a/lisp/textmodes/page.el b/lisp/textmodes/page.el
index 5d6f017eb99..86a2762b0ee 100644
--- a/lisp/textmodes/page.el
+++ b/lisp/textmodes/page.el
@@ -1,6 +1,6 @@
 ;;; page.el --- page motion commands for Emacs  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: wp convenience
diff --git a/lisp/textmodes/paragraphs.el b/lisp/textmodes/paragraphs.el
index c500dc014fb..73abb155aaa 100644
--- a/lisp/textmodes/paragraphs.el
+++ b/lisp/textmodes/paragraphs.el
@@ -1,6 +1,6 @@
 ;;; paragraphs.el --- paragraph and sentence parsing  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1985-1987, 1991, 1994-1997, 1999-2022 Free Software
+;; Copyright (C) 1985-1987, 1991, 1994-1997, 1999-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el
index ab211fdd7bf..9aa9b72c513 100644
--- a/lisp/textmodes/picture.el
+++ b/lisp/textmodes/picture.el
@@ -1,6 +1,6 @@
 ;;; picture.el --- "Picture mode" -- editing using quarter-plane screen model 
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/pixel-fill.el b/lisp/textmodes/pixel-fill.el
index e47653e734a..9fd62d98fd6 100644
--- a/lisp/textmodes/pixel-fill.el
+++ b/lisp/textmodes/pixel-fill.el
@@ -1,6 +1,6 @@
 ;;; pixel-fill.el --- variable pitch filling functions  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: filling
diff --git a/lisp/textmodes/po.el b/lisp/textmodes/po.el
index 16c9140dcb7..f9d2198b7fc 100644
--- a/lisp/textmodes/po.el
+++ b/lisp/textmodes/po.el
@@ -1,6 +1,6 @@
 ;;; po.el --- basic support of PO translation files  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1995-1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Authors: François Pinard <pinard@iro.umontreal.ca>,
 ;;          Greg McGary <gkm@magilla.cichlid.com>,
diff --git a/lisp/textmodes/refbib.el b/lisp/textmodes/refbib.el
index 203a0fdbb72..8f187e745c8 100644
--- a/lisp/textmodes/refbib.el
+++ b/lisp/textmodes/refbib.el
@@ -1,6 +1,6 @@
 ;;; refbib.el --- convert refer-style references to ones usable by Latex bib  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1989, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Henry Kautz <kautz@research.att.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/refer.el b/lisp/textmodes/refer.el
index 1ee35d6a711..9200c401226 100644
--- a/lisp/textmodes/refer.el
+++ b/lisp/textmodes/refer.el
@@ -1,6 +1,6 @@
 ;;; refer.el --- look up references in bibliography files  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1992, 1996, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1996, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Ashwin Ram <ashwin@cc.gatech.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/refill.el b/lisp/textmodes/refill.el
index 7d6d909966f..bd8e7cd7435 100644
--- a/lisp/textmodes/refill.el
+++ b/lisp/textmodes/refill.el
@@ -1,6 +1,6 @@
 ;;; refill.el --- `auto-fill' by refilling paragraphs on changes  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Maintainer: Miles Bader <miles@gnu.org>
diff --git a/lisp/textmodes/reftex-auc.el b/lisp/textmodes/reftex-auc.el
index 47ad280edce..680d9d28df9 100644
--- a/lisp/textmodes/reftex-auc.el
+++ b/lisp/textmodes/reftex-auc.el
@@ -1,6 +1,6 @@
 ;;; reftex-auc.el --- RefTeX's interface to AUCTeX  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Maintainer: auctex-devel@gnu.org
diff --git a/lisp/textmodes/reftex-cite.el b/lisp/textmodes/reftex-cite.el
index 41a5b52f993..77373707d65 100644
--- a/lisp/textmodes/reftex-cite.el
+++ b/lisp/textmodes/reftex-cite.el
@@ -1,6 +1,6 @@
 ;;; reftex-cite.el --- creating citations with RefTeX  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Maintainer: auctex-devel@gnu.org
diff --git a/lisp/textmodes/reftex-dcr.el b/lisp/textmodes/reftex-dcr.el
index 2d340de9478..c3ecea3acda 100644
--- a/lisp/textmodes/reftex-dcr.el
+++ b/lisp/textmodes/reftex-dcr.el
@@ -1,6 +1,6 @@
 ;;; reftex-dcr.el --- viewing cross references and citations with RefTeX  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Maintainer: auctex-devel@gnu.org
diff --git a/lisp/textmodes/reftex-global.el b/lisp/textmodes/reftex-global.el
index 9f308646fc9..acf0891432f 100644
--- a/lisp/textmodes/reftex-global.el
+++ b/lisp/textmodes/reftex-global.el
@@ -1,6 +1,6 @@
 ;;; reftex-global.el --- operations on entire documents with RefTeX  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Maintainer: auctex-devel@gnu.org
diff --git a/lisp/textmodes/reftex-index.el b/lisp/textmodes/reftex-index.el
index 38d6ebe7e6f..778591a8069 100644
--- a/lisp/textmodes/reftex-index.el
+++ b/lisp/textmodes/reftex-index.el
@@ -1,6 +1,6 @@
 ;;; reftex-index.el --- index support with RefTeX  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Maintainer: auctex-devel@gnu.org
diff --git a/lisp/textmodes/reftex-parse.el b/lisp/textmodes/reftex-parse.el
index 49cef297882..e2b9a0d983e 100644
--- a/lisp/textmodes/reftex-parse.el
+++ b/lisp/textmodes/reftex-parse.el
@@ -1,6 +1,6 @@
 ;;; reftex-parse.el --- parser functions for RefTeX  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Maintainer: auctex-devel@gnu.org
diff --git a/lisp/textmodes/reftex-ref.el b/lisp/textmodes/reftex-ref.el
index fead734be71..7315c1e1e74 100644
--- a/lisp/textmodes/reftex-ref.el
+++ b/lisp/textmodes/reftex-ref.el
@@ -1,6 +1,6 @@
 ;;; reftex-ref.el --- code to create labels and references with RefTeX  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Maintainer: auctex-devel@gnu.org
diff --git a/lisp/textmodes/reftex-sel.el b/lisp/textmodes/reftex-sel.el
index 80c01948e5a..3c9f9ca94c8 100644
--- a/lisp/textmodes/reftex-sel.el
+++ b/lisp/textmodes/reftex-sel.el
@@ -1,6 +1,6 @@
 ;;; reftex-sel.el --- the selection modes for RefTeX  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Maintainer: auctex-devel@gnu.org
diff --git a/lisp/textmodes/reftex-toc.el b/lisp/textmodes/reftex-toc.el
index a7f3a9452a6..3b3f892a688 100644
--- a/lisp/textmodes/reftex-toc.el
+++ b/lisp/textmodes/reftex-toc.el
@@ -1,6 +1,6 @@
 ;;; reftex-toc.el --- RefTeX's table of contents mode  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1997-2000, 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2000, 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Maintainer: auctex-devel@gnu.org
diff --git a/lisp/textmodes/reftex-vars.el b/lisp/textmodes/reftex-vars.el
index ee94cc5d693..60ee40180d1 100644
--- a/lisp/textmodes/reftex-vars.el
+++ b/lisp/textmodes/reftex-vars.el
@@ -1,6 +1,6 @@
 ;;; reftex-vars.el --- configuration variables for RefTeX  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1997-1999, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1999, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Maintainer: auctex-devel@gnu.org
@@ -2096,8 +2096,8 @@ may require a restart of Emacs in order to become 
effective."
 
 (defcustom reftex-allow-detached-macro-args nil
   "Non-nil means, allow arguments of macros to be detached by whitespace.
-When this is t, `aaa' will be considered as argument of \\bb in the following
-construct:  \\bbb [xxx] {aaa}."
+When this is t, `aaa' will be considered as argument of \\bbb in
+the following construct: \\bbb [xxx] {aaa}."
   :group 'reftex-miscellaneous-configurations
   :type 'boolean)
 
diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el
index 126b3777f55..57284db36b1 100644
--- a/lisp/textmodes/reftex.el
+++ b/lisp/textmodes/reftex.el
@@ -1,6 +1,6 @@
 ;;; reftex.el --- minor mode for doing \label, \ref, \cite, \index in LaTeX  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997-2000, 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2000, 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Maintainer: auctex-devel@gnu.org
diff --git a/lisp/textmodes/remember.el b/lisp/textmodes/remember.el
index f8c7af25005..95e18b7d1d5 100644
--- a/lisp/textmodes/remember.el
+++ b/lisp/textmodes/remember.el
@@ -1,6 +1,6 @@
 ;;; remember.el --- a mode for quickly jotting down things to remember  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2001, 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2001, 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/rst.el b/lisp/textmodes/rst.el
index 7fe46b9628c..9d68feed0e0 100644
--- a/lisp/textmodes/rst.el
+++ b/lisp/textmodes/rst.el
@@ -1,6 +1,6 @@
 ;;; rst.el --- Mode for viewing and editing reStructuredText-documents  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: Stefan Merten <stefan at merten-home dot de>
 ;; Author: Stefan Merten <stefan at merten-home dot de>,
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index 7ce30cba8a4..b4f5ebf5cd0 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -1,6 +1,6 @@
 ;;; sgml-mode.el --- SGML- and HTML-editing modes -*- lexical-binding:t -*-
 
-;; Copyright (C) 1992, 1995-1996, 1998, 2001-2022 Free Software
+;; Copyright (C) 1992, 1995-1996, 1998, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: James Clark <jjc@jclark.com>
diff --git a/lisp/textmodes/string-edit.el b/lisp/textmodes/string-edit.el
index 3270050ca4a..c366611f26e 100644
--- a/lisp/textmodes/string-edit.el
+++ b/lisp/textmodes/string-edit.el
@@ -1,6 +1,6 @@
 ;;; string-edit.el --- editing long strings  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
diff --git a/lisp/textmodes/table.el b/lisp/textmodes/table.el
index 2f34a58b5bc..2271d83eff5 100644
--- a/lisp/textmodes/table.el
+++ b/lisp/textmodes/table.el
@@ -1,6 +1,6 @@
 ;;; table.el --- create and edit WYSIWYG text based embedded tables  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Keywords: wp, convenience
 ;; Author: Takaaki Ota <Takaaki.Ota@am.sony.com>
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index a1914a8cc82..fcb01fb6c08 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -1,6 +1,6 @@
 ;;; tex-mode.el --- TeX, LaTeX, and SliTeX mode commands  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1985-1986, 1989, 1992, 1994-1999, 2001-2022 Free
+;; Copyright (C) 1985-1986, 1989, 1992, 1994-1999, 2001-2023 Free
 ;; Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/texinfmt.el b/lisp/textmodes/texinfmt.el
index 85110c3d1be..c8c493f5e31 100644
--- a/lisp/textmodes/texinfmt.el
+++ b/lisp/textmodes/texinfmt.el
@@ -1,6 +1,6 @@
 ;;; texinfmt.el --- format Texinfo files into Info files  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1985-1986, 1988, 1990-1998, 2000-2022 Free Software
+;; Copyright (C) 1985-1986, 1988, 1990-1998, 2000-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/texinfo.el b/lisp/textmodes/texinfo.el
index 24e93bf001d..7416c631c9f 100644
--- a/lisp/textmodes/texinfo.el
+++ b/lisp/textmodes/texinfo.el
@@ -1,6 +1,6 @@
 ;;; texinfo.el --- major mode for editing Texinfo files  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1985, 1988-1993, 1996-1997, 2000-2022 Free Software
+;; Copyright (C) 1985, 1988-1993, 1996-1997, 2000-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Robert J. Chassell
diff --git a/lisp/textmodes/texnfo-upd.el b/lisp/textmodes/texnfo-upd.el
index e44aa06e3dd..5961f5960bd 100644
--- a/lisp/textmodes/texnfo-upd.el
+++ b/lisp/textmodes/texnfo-upd.el
@@ -1,6 +1,6 @@
 ;;; texnfo-upd.el --- utilities for updating nodes and menus in Texinfo files  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1989-1992, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1989-1992, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Robert J. Chassell
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/text-mode.el b/lisp/textmodes/text-mode.el
index 9e8f3747c5f..48cefc74d06 100644
--- a/lisp/textmodes/text-mode.el
+++ b/lisp/textmodes/text-mode.el
@@ -1,6 +1,6 @@
 ;;; text-mode.el --- text mode, and its idiosyncratic commands  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985, 1992, 1994, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1985, 1992, 1994, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/tildify.el b/lisp/textmodes/tildify.el
index 2a7ad295ab7..18ba83e86e8 100644
--- a/lisp/textmodes/tildify.el
+++ b/lisp/textmodes/tildify.el
@@ -1,6 +1,6 @@
 ;;; tildify.el --- adding hard spaces into texts -*- lexical-binding: t -*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author:     Milan Zamazal <pdm@zamazal.org>
 ;;             Michal Nazarewicz <mina86@mina86.com>
diff --git a/lisp/textmodes/toml-ts-mode.el b/lisp/textmodes/toml-ts-mode.el
index bca6a5e81ad..1b68632f58c 100644
--- a/lisp/textmodes/toml-ts-mode.el
+++ b/lisp/textmodes/toml-ts-mode.el
@@ -1,6 +1,6 @@
 ;;; toml-ts-mode.el --- tree-sitter support for TOML  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author     : Jostein Kjønigsen <jostein@kjonigsen.net>
 ;; Maintainer : Jostein Kjønigsen <jostein@kjonigsen.net>
@@ -32,6 +32,8 @@
 (declare-function treesit-parser-create "treesit.c")
 (declare-function treesit-induce-sparse-tree "treesit.c")
 (declare-function treesit-node-start "treesit.c")
+(declare-function treesit-node-type "treesit.c")
+(declare-function treesit-node-child "treesit.c")
 (declare-function treesit-node-child-by-field-name "treesit.c")
 
 (defcustom toml-ts-mode-indent-offset 2
@@ -107,43 +109,13 @@
    '((ERROR) @font-lock-warning-face))
   "Font-lock settings for TOML.")
 
-(defun toml-ts-mode--get-table-name (node)
-  "Obtains the header-name for the associated tree-sitter `NODE'."
-  (if node
-      (treesit-node-text
-       (car (cdr (treesit-node-children node))))
-    "Root table"))
-
-(defun toml-ts-mode--imenu-1 (node)
-  "Helper for `toml-ts-mode--imenu'.
-Find string representation for NODE and set marker, then recurse
-the subtrees."
-  (let* ((ts-node (car node))
-         (subtrees (mapcan #'toml-ts-mode--imenu-1 (cdr node)))
-         (name (toml-ts-mode--get-table-name ts-node))
-         (marker (when ts-node
-                   (set-marker (make-marker)
-                               (treesit-node-start ts-node)))))
-    (cond
-     ((null ts-node) subtrees)
-     (subtrees
-      `((,name ,(cons name marker) ,@subtrees)))
-     (t
-      `((,name . ,marker))))))
-
-(defun toml-ts-mode--imenu ()
-  "Return Imenu alist for the current buffer."
-  (let* ((node (treesit-buffer-root-node))
-         (table-tree (treesit-induce-sparse-tree
-                      node "^table$" nil 1000))
-         (table-array-tree (treesit-induce-sparse-tree
-                            node "^table_array_element$" nil 1000))
-         (table-index (toml-ts-mode--imenu-1 table-tree))
-         (table-array-index (toml-ts-mode--imenu-1 table-array-tree)))
-    (append
-     (when table-index `(("Headers" . ,table-index)))
-     (when table-array-index `(("Arrays" . ,table-array-index))))))
-
+(defun toml-ts-mode--defun-name (node)
+  "Return the defun name of NODE.
+Return nil if there is no name or if NODE is not a defun node."
+  (pcase (treesit-node-type node)
+    ((or "table" "table_array_element")
+     (or (treesit-node-text (treesit-node-child node 1) t)
+         "Root table"))))
 
 ;;;###autoload
 (add-to-list 'auto-mode-alist '("\\.toml\\'" . toml-ts-mode))
@@ -167,6 +139,7 @@ the subtrees."
     ;; Navigation.
     (setq-local treesit-defun-type-regexp
                 (rx (or "table" "table_array_element")))
+    (setq-local treesit-defun-name-function #'toml-ts-mode--defun-name)
 
     ;; Font-lock.
     (setq-local treesit-font-lock-settings toml-ts-mode--font-lock-settings)
@@ -177,8 +150,9 @@ the subtrees."
                   (delimiter error)))
 
     ;; Imenu.
-    (setq-local imenu-create-index-function #'toml-ts-mode--imenu)
-    (setq-local which-func-functions nil) ;; Piggyback on imenu
+    (setq-local treesit-simple-imenu-settings
+                '(("Header" "\\`table\\'" nil nil)
+                  ("Array" "\\`table_array_element\\'" nil nil)))
 
     (treesit-major-mode-setup)))
 
diff --git a/lisp/textmodes/two-column.el b/lisp/textmodes/two-column.el
index 2fb5287aa05..23dcc7e5945 100644
--- a/lisp/textmodes/two-column.el
+++ b/lisp/textmodes/two-column.el
@@ -1,6 +1,6 @@
 ;;; two-column.el --- minor mode for editing of two-column text  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1992-1995, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1995, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Daniel Pfeiffer <occitan@esperanto.org>
 ;; Adapted-By: ESR, Daniel Pfeiffer
diff --git a/lisp/textmodes/underline.el b/lisp/textmodes/underline.el
index 49503cb5d3c..b22652b6824 100644
--- a/lisp/textmodes/underline.el
+++ b/lisp/textmodes/underline.el
@@ -1,6 +1,6 @@
 ;;; underline.el --- insert/remove underlining (done by overstriking) in Emacs 
 -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: wp
diff --git a/lisp/textmodes/word-wrap-mode.el b/lisp/textmodes/word-wrap-mode.el
index c354fc773a7..28bca7e27ea 100644
--- a/lisp/textmodes/word-wrap-mode.el
+++ b/lisp/textmodes/word-wrap-mode.el
@@ -1,6 +1,6 @@
 ;;; word-wrap-mode.el --- minor mode for `word-wrap' tweaks  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
diff --git a/lisp/textmodes/yaml-ts-mode.el b/lisp/textmodes/yaml-ts-mode.el
index 6ef6dabb3a6..8c61ee062cf 100644
--- a/lisp/textmodes/yaml-ts-mode.el
+++ b/lisp/textmodes/yaml-ts-mode.el
@@ -1,6 +1,6 @@
 ;;; yaml-ts-mode.el --- tree-sitter support for YAML  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author     : Randy Taylor <dev@rjt.dev>
 ;; Maintainer : Randy Taylor <dev@rjt.dev>
diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el
index 9dda3e1fcb2..9363a474cb5 100644
--- a/lisp/thingatpt.el
+++ b/lisp/thingatpt.el
@@ -1,6 +1,6 @@
 ;;; thingatpt.el --- get the `thing' at point  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1991-1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991-1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Mike Williams <mikew@gopher.dosli.govt.nz>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/thread.el b/lisp/thread.el
index c0cc5feb97c..7363e9a06c8 100644
--- a/lisp/thread.el
+++ b/lisp/thread.el
@@ -1,6 +1,6 @@
 ;;; thread.el --- Thread support in Emacs Lisp -*- lexical-binding: t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Gemini Lasswell <gazally@runbox.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/time-stamp.el b/lisp/time-stamp.el
index 7dd79d5bd3c..1447b6b4368 100644
--- a/lisp/time-stamp.el
+++ b/lisp/time-stamp.el
@@ -1,6 +1,6 @@
 ;;; time-stamp.el --- Maintain last change time stamps in files edited by 
Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1989, 1993-1995, 1997, 2000-2022 Free Software
+;; Copyright (C) 1989, 1993-1995, 1997, 2000-2023 Free Software
 ;; Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/time.el b/lisp/time.el
index 247d715ab66..f04a22dfd28 100644
--- a/lisp/time.el
+++ b/lisp/time.el
@@ -1,6 +1,6 @@
 ;;; time.el --- display time, load and mail indicator in mode line of Emacs  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1987, 1993-1994, 1996, 2000-2022 Free Software
+;; Copyright (C) 1985-1987, 1993-1994, 1996, 2000-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/timezone.el b/lisp/timezone.el
index 1e257c62d39..9a199f0939e 100644
--- a/lisp/timezone.el
+++ b/lisp/timezone.el
@@ -1,6 +1,6 @@
 ;;; timezone.el --- time zone package for GNU Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1990-1993, 1996, 1999, 2001-2022 Free Software
+;; Copyright (C) 1990-1993, 1996, 1999, 2001-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Masanobu Umeda <umerin@mse.kyutech.ac.jp>
diff --git a/lisp/tmm.el b/lisp/tmm.el
index d8beddca619..1f9a877c20b 100644
--- a/lisp/tmm.el
+++ b/lisp/tmm.el
@@ -1,6 +1,6 @@
 ;;; tmm.el --- text mode access to menu-bar  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1994-1996, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Ilya Zakharevich <ilya@math.mps.ohio-state.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/tool-bar.el b/lisp/tool-bar.el
index b1f7a70e33c..1a0faf3a584 100644
--- a/lisp/tool-bar.el
+++ b/lisp/tool-bar.el
@@ -1,6 +1,6 @@
 ;;; tool-bar.el --- setting up the tool bar  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: mouse frames
diff --git a/lisp/tooltip.el b/lisp/tooltip.el
index 95cb1cc62c0..8d92caed08e 100644
--- a/lisp/tooltip.el
+++ b/lisp/tooltip.el
@@ -1,6 +1,6 @@
 ;;; tooltip.el --- show tooltip windows  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1997, 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <gerd@acm.org>
 ;; Keywords: help c mouse tools
diff --git a/lisp/transient.el b/lisp/transient.el
index 01c492c68c1..42268aedab7 100644
--- a/lisp/transient.el
+++ b/lisp/transient.el
@@ -1,6 +1,6 @@
 ;;; transient.el --- Transient commands  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Jonas Bernoulli <jonas@bernoul.li>
 ;; URL: https://github.com/magit/transient
diff --git a/lisp/tree-widget.el b/lisp/tree-widget.el
index f91b36bfc28..01091f5493b 100644
--- a/lisp/tree-widget.el
+++ b/lisp/tree-widget.el
@@ -1,6 +1,6 @@
 ;;; tree-widget.el --- Tree widget  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <david@dponce.com>
 ;; Created: 16 Feb 2001
diff --git a/lisp/treesit.el b/lisp/treesit.el
index 1f366807ce2..e141f872c73 100644
--- a/lisp/treesit.el
+++ b/lisp/treesit.el
@@ -1,6 +1,10 @@
 ;;; treesit.el --- tree-sitter utilities -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
+
+;; Maintainer: 付禹安 (Yuan Fu) <casouri@gmail.com>
+;; Keywords: treesit, tree-sitter, languages
+;; Package: emacs
 
 ;; This file is part of GNU Emacs.
 
@@ -32,6 +36,7 @@
 (eval-when-compile (require 'subr-x)) ; For `string-join'.
 (require 'cl-seq)
 (require 'font-lock)
+(require 'seq)
 
 ;;; Function declarations
 
@@ -141,6 +146,9 @@ parser in `treesit-parser-list', or nil if there is no 
parser."
 
 ;;; Node API supplement
 
+(define-error 'treesit-no-parser "No available parser for this buffer"
+              'treesit-error)
+
 (defun treesit-node-buffer (node)
   "Return the buffer in which NODE belongs."
   (treesit-parser-buffer
@@ -168,13 +176,14 @@ before POS.
 Return nil if no leaf node can be returned.  If NAMED is non-nil,
 only look for named nodes.
 
-If PARSER-OR-LANG is nil, use the first parser in
-`treesit-parser-list'; if PARSER-OR-LANG is a parser, use
-that parser; if PARSER-OR-LANG is a language, find a parser using
-that language in the current buffer, and use that."
+If PARSER-OR-LANG is a parser, use that parser; if PARSER-OR-LANG
+is a language, find the first parser for that language in the
+current buffer, or create one if none exists; If PARSER-OR-LANG
+is nil, try to guess the language at POS using `treesit-language-at'."
   (let* ((root (if (treesit-parser-p parser-or-lang)
                    (treesit-parser-root-node parser-or-lang)
-                 (treesit-buffer-root-node parser-or-lang)))
+                 (treesit-buffer-root-node
+                  (or parser-or-lang (treesit-language-at pos)))))
          (node root)
          (node-before root)
          (pos-1 (max (1- pos) (point-min)))
@@ -216,43 +225,51 @@ to use `treesit-node-at' instead.
 Return nil if none was found.  If NAMED is non-nil, only look for
 named node.
 
-If PARSER-OR-LANG is nil, use the first parser in
-`treesit-parser-list'; if PARSER-OR-LANG is a parser, use
-that parser; if PARSER-OR-LANG is a language, find a parser using
-that language in the current buffer, and use that."
+If PARSER-OR-LANG is a parser, use that parser; if PARSER-OR-LANG
+is a language, find the first parser for that language in the
+current buffer, or create one if none exists; If PARSER-OR-LANG
+is nil, try to guess the language at BEG using `treesit-language-at'."
   (let ((root (if (treesit-parser-p parser-or-lang)
                   (treesit-parser-root-node parser-or-lang)
-                (treesit-buffer-root-node parser-or-lang))))
+                (treesit-buffer-root-node
+                 (or parser-or-lang (treesit-language-at beg))))))
     (treesit-node-descendant-for-range root beg (or end beg) named)))
 
-(defun treesit-node-top-level (node &optional type)
+(defun treesit-node-top-level (node &optional pred include-node)
   "Return the top-level equivalent of NODE.
+
 Specifically, return the highest parent of NODE that has the same
 type as it.  If no such parent exists, return nil.
 
-If TYPE is non-nil, match each parent's type with TYPE as a
-regexp, rather than using NODE's type."
-  (let ((type (or type (treesit-node-type node)))
+If PRED is non-nil, match each parent's type with PRED as a
+regexp, rather than using NODE's type.  PRED can also be a
+function that takes the node as an argument, and return
+non-nil/nil for match/no match.
+
+If INCLUDE-NODE is non-nil, return NODE if it satisfies PRED."
+  (let ((pred (or pred (treesit-node-type node)))
         (result nil))
-    (cl-loop for cursor = (treesit-node-parent node)
+    (cl-loop for cursor = (if include-node node
+                            (treesit-node-parent node))
              then (treesit-node-parent cursor)
              while cursor
-             if (string-match-p type (treesit-node-type cursor))
+             if (if (stringp pred)
+                    (string-match-p pred (treesit-node-type cursor))
+                  (funcall pred cursor))
              do (setq result cursor))
     result))
 
 (defun treesit-buffer-root-node (&optional language)
   "Return the root node of the current buffer.
-Use the first parser in `treesit-parser-list'.
 
-If optional argument LANGUAGE is non-nil, use the first parser
-for LANGUAGE."
+Use the first parser in the parser list if LANGUAGE is omitted.
+If LANGUAGE is non-nil, use the first parser for LANGUAGE in the
+parser list, or create one if none exists."
   (if-let ((parser
-            (or (if language
-                    (treesit-parser-create language)
-                  (or (car (treesit-parser-list))
-                      (signal 'treesit-error
-                              '("Buffer has no parser")))))))
+            (if language
+                (treesit-parser-create language)
+              (or (car (treesit-parser-list))
+                  (signal 'treesit-no-parser (list (current-buffer)))))))
       (treesit-parser-root-node parser)))
 
 (defun treesit-filter-child (node pred &optional named)
@@ -282,11 +299,16 @@ properties."
          (treesit-node-start node)
          (treesit-node-end node))))))
 
-(defun treesit-parent-until (node pred)
+(defun treesit-parent-until (node pred &optional include-node)
   "Return the closest parent of NODE that satisfies PRED.
+
 Return nil if none was found.  PRED should be a function that
-takes one argument, the parent node."
-  (let ((node (treesit-node-parent node)))
+takes one argument, the parent node, and return non-nil/nil for
+match/no match.
+
+If INCLUDE-NODE is non-nil, return NODE if it satisfies PRED."
+  (let ((node (if include-node node
+                (treesit-node-parent node))))
     (while (and node (not (funcall pred node)))
       (setq node (treesit-node-parent node)))
     node))
@@ -301,8 +323,6 @@ takes one argument, the parent node."
             node (treesit-node-parent node)))
     last))
 
-(defalias 'treesit-traverse-parent #'treesit-parent-until)
-
 (defun treesit-node-children (node &optional named)
   "Return a list of NODE's children.
 If NAMED is non-nil, collect named child only."
@@ -859,7 +879,7 @@ LIMIT is the recursion limit, which defaults to 100."
         (push child result))
       (setq child (treesit-node-next-sibling child)))
     ;; If NODE has no child, keep NODE.
-    (or result node)))
+    (or result (list node))))
 
 (defsubst treesit--node-length (node)
   "Return the length of the text of NODE."
@@ -1107,6 +1127,22 @@ See `treesit-simple-indent-presets'.")
                   (re-search-forward comment-start-skip)
                   (skip-syntax-backward "-")
                   (point))))
+        (cons 'prev-adaptive-prefix
+              (lambda (_n parent &rest _)
+                (save-excursion
+                  (re-search-backward
+                   (rx (not (or " " "\t" "\n"))) nil t)
+                  (beginning-of-line)
+                  (and (>= (point) (treesit-node-start parent))
+                       ;; `adaptive-fill-regexp' will not match "/*",
+                       ;; so we need to also try `comment-start-skip'.
+                       (or (and adaptive-fill-regexp
+                                (looking-at adaptive-fill-regexp)
+                                (> (- (match-end 0) (match-beginning 0)) 0)
+                                (match-end 0))
+                           (and comment-start-skip
+                                (looking-at comment-start-skip)
+                                (match-end 0)))))))
         ;; TODO: Document.
         (cons 'grand-parent
               (lambda (_n parent &rest _)
@@ -1141,7 +1177,6 @@ See `treesit-simple-indent-presets'.")
                                          fns)))))
         (cons 'not (lambda (fn)
                      (lambda (node parent bol &rest _)
-                       (debug)
                        (not (funcall fn node parent bol)))))
         (cons 'list (lambda (&rest fns)
                       (lambda (node parent bol &rest _)
@@ -1183,7 +1218,7 @@ no-node
 
 \(n-p-gp NODE-TYPE PARENT-TYPE GRANDPARENT-TYPE)
 
-    Checks that NODE, its parent, and its grandparent's type.
+    Checks for NODE's, its parent's, and its grandparent's type.
 
 \(query QUERY)
 
@@ -1229,7 +1264,14 @@ comment-start
 
     Goes to the position that `comment-start-skip' would return,
     skips whitespace backwards, and returns the resulting
-    position.  Assumes PARENT is a comment node.")
+    position.  Assumes PARENT is a comment node.
+
+prev-adaptive-prefix
+
+    Goes to the beginning of previous non-empty line, and tries
+    to match `adaptive-fill-regexp'.  If it matches, return the
+    end of the match, otherwise return nil.  This is useful for a
+    `indent-relative'-like indent behavior for block comments.")
 
 (defun treesit--simple-indent-eval (exp)
   "Evaluate EXP.
@@ -1555,7 +1597,61 @@ BACKWARD and ALL are the same as in 
`treesit-search-forward'."
       (goto-char current-pos)))
     node))
 
-;;; Navigation
+(defun treesit-transpose-sexps (&optional arg)
+  "Tree-sitter `transpose-sexps' function.
+Arg is the same as in `transpose-sexps'.
+
+Locate the node closest to POINT, and transpose that node with
+its sibling node ARG nodes away.
+
+Return a pair of positions as described by
+`transpose-sexps-function' for use in `transpose-subr' and
+friends."
+  (let* ((parent (treesit-node-parent (treesit-node-at (point))))
+         (child (treesit-node-child parent 0 t)))
+    (named-let loop ((prev child)
+                     (next (treesit-node-next-sibling child t)))
+      (when (and prev next)
+        (if (< (point) (treesit-node-end next))
+            (if (= arg -1)
+                (cons (treesit-node-start prev)
+                      (treesit-node-end prev))
+              (when-let ((n (treesit-node-child
+                             parent (+ arg (treesit-node-index prev t)) t)))
+                (cons (treesit-node-end n)
+                      (treesit-node-start n))))
+          (loop (treesit-node-next-sibling prev t)
+                (treesit-node-next-sibling next t)))))))
+
+;;; Navigation, defun, things
+;;
+;; Emacs lets you define "things" by a regexp that matches the type of
+;; a node, and here are some functions that lets you find the "things"
+;; at/around point, navigate backward/forward a "thing", etc.
+;;
+;; The most obvious "thing" is a defun, and there are thin wrappers
+;; around thing functions for defun for convenience.
+;;
+;; We have more command-like functions like:
+;; - treesit-beginning-of-thing/defun
+;; - treesit-end-of-thing/defun
+;; - treesit-thing/defun-at-point
+;;
+;; And more generic functions like:
+;; - treesit--things-around
+;; - treesit--top-level-thing
+;; - treesit--navigate-thing
+;;
+;; There are also some defun-specific functions, like
+;; treesit-defun-name, treesit-add-log-current-defun.
+;;
+;; TODO: I'm not entirely sure how would this go, so I only documented
+;; the "defun" functions and didn't document any "thing" functions.
+;; We should also document `treesit-block-type-regexp' and support it
+;; in major modes if we can meaningfully integrate hideshow: I tried
+;; and failed, we need SomeOne that understands hideshow to look at
+;; it.  (BTW, hideshow should use its own
+;; `treesit-hideshow-block-type-regexp'.)
 
 (defvar-local treesit-defun-type-regexp nil
   "A regexp that matches the node type of defun nodes.
@@ -1563,12 +1659,15 @@ For example, \"(function|class)_definition\".
 
 Sometimes not all nodes matched by the regexp are valid defuns.
 In that case, set this variable to a cons cell of the
-form (REGEXP . FILTER), where FILTER is a function that takes a
+form (REGEXP . PRED), where PRED is a function that takes a
 node (the matched node) and returns t if node is valid, or nil
 for invalid node.
 
 This is used by `treesit-beginning-of-defun' and friends.")
 
+(defvar-local treesit-block-type-regexp nil
+  "Like `treesit-defun-type-regexp', but for blocks.")
+
 (defvar-local treesit-defun-tactic 'nested
   "Determines how does Emacs treat nested defuns.
 If the value is `top-level', Emacs only moves across top-level
@@ -1583,6 +1682,58 @@ newline after a defun, or the beginning of a defun.
 
 If the value is nil, no skipping is performed.")
 
+(defvar-local treesit-defun-name-function nil
+  "A function that is called with a node and returns its defun name or nil.
+If the node is a defun node, return the defun name, e.g., the
+function name of a function.  If the node is not a defun node, or
+the defun node doesn't have a name, or the node is nil, return
+nil.")
+
+(defvar-local treesit-add-log-defun-delimiter "."
+  "The delimiter used to connect several defun names.
+This is used in `treesit-add-log-current-defun'.")
+
+(defsubst treesit--thing-unpack-pattern (pattern)
+  "Unpack PATTERN in the shape of `treesit-defun-type-regexp'.
+
+Basically,
+
+    (unpack REGEXP) = (REGEXP . nil)
+    (unpack (REGEXP . PRED)) = (REGEXP . PRED)"
+  (if (consp pattern)
+      pattern
+    (cons pattern nil)))
+
+(defun treesit-beginning-of-thing (pattern &optional arg)
+  "Like `beginning-of-defun', but generalized into things.
+
+PATTERN is like `treesit-defun-type-regexp', ARG
+is the same as in `beginning-of-defun'.
+
+Return non-nil if successfully moved, nil otherwise."
+  (pcase-let* ((arg (or arg 1))
+               (`(,regexp . ,pred) (treesit--thing-unpack-pattern
+                                    pattern))
+               (dest (treesit--navigate-thing
+                      (point) (- arg) 'beg regexp pred)))
+    (when dest
+      (goto-char dest))))
+
+(defun treesit-end-of-thing (pattern &optional arg)
+  "Like `end-of-defun', but generalized into things.
+
+PATTERN is like `treesit-defun-type-regexp', ARG is the same as
+in `end-of-defun'.
+
+Return non-nil if successfully moved, nil otherwise."
+  (pcase-let* ((arg (or arg 1))
+               (`(,regexp . ,pred) (treesit--thing-unpack-pattern
+                                    pattern))
+               (dest (treesit--navigate-thing
+                      (point) arg 'end regexp pred)))
+    (when dest
+      (goto-char dest))))
+
 (defun treesit-beginning-of-defun (&optional arg)
   "Move backward to the beginning of a defun.
 
@@ -1595,9 +1746,7 @@ This is a tree-sitter equivalent of `beginning-of-defun'.
 Behavior of this function depends on `treesit-defun-type-regexp'
 and `treesit-defun-skipper'."
   (interactive "^p")
-  (when-let* ((arg (or arg 1))
-              (dest (treesit--navigate-defun (point) (- arg) 'beg)))
-    (goto-char dest)
+  (when (treesit-beginning-of-thing treesit-defun-type-regexp arg)
     (when treesit-defun-skipper
       (funcall treesit-defun-skipper))
     t))
@@ -1612,9 +1761,7 @@ This is a tree-sitter equivalent of `end-of-defun'.  
Behavior of
 this function depends on `treesit-defun-type-regexp' and
 `treesit-defun-skipper'."
   (interactive "^p\nd")
-  (when-let* ((arg (or arg 1))
-              (dest (treesit--navigate-defun (point) arg 'end)))
-    (goto-char dest)
+  (when (treesit-end-of-thing treesit-defun-type-regexp arg)
     (when treesit-defun-skipper
       (funcall treesit-defun-skipper))))
 
@@ -1632,13 +1779,17 @@ comments and multiline string literals.  For example,
 This function tries to move to the beginning of a line, either by
 moving to the empty newline after a defun, or to the beginning of
 the current line if the beginning of the defun is indented."
-  (cond ((and (looking-at (rx (* (or " " "\\t")) "\n"))
-              (not (looking-at (rx bol))))
-         (goto-char (match-end 0)))
-        ((save-excursion
-           (skip-chars-backward " \t")
-           (eq (point) (line-beginning-position)))
-         (goto-char (line-beginning-position)))))
+  ;; Moving forward, point at the end of a line and not already on an
+  ;; empty line: go to BOL of the next line (which hopefully is an
+  ;; empty line).
+  (cond ((and (looking-at (rx (* (or " " "\t")) "\n"))
+              (not (bolp)))
+         (forward-line 1))
+        ;; Moving backward, but there are some whitespace (and only
+        ;; whitespace) between point and BOL: go back to BOL.
+        ((looking-back (rx (+ (or " " "\t")))
+                       (line-beginning-position))
+         (beginning-of-line))))
 
 ;; prev-sibling:
 ;; 1. end-of-node before pos
@@ -1651,85 +1802,77 @@ the current line if the beginning of the defun is 
indented."
 ;; parent:
 ;; 1. node covers pos
 ;; 2. smallest such node
-(defun treesit--defuns-around (pos regexp &optional pred)
-  "Return the previous, next, and parent defun around POS.
+(defun treesit--things-around (pos regexp &optional pred)
+  "Return the previous, next, and parent thing around POS.
 
 Return a list of (PREV NEXT PARENT), where PREV and NEXT are
-previous and next sibling defuns around POS, and PARENT is the
-parent defun surrounding POS.  All of three could be nil if no
-sound defun exists.
+previous and next sibling things around POS, and PARENT is the
+parent thing surrounding POS.  All of three could be nil if no
+sound things exists.
 
-REGEXP and PRED are the same as in `treesit-defun-type-regexp'."
+REGEXP and PRED are the same as in `treesit-thing-at-point'."
   (let* ((node (treesit-node-at pos))
-         ;; NODE-BEFORE/AFTER = NODE when POS is completely in NODE,
-         ;; but if not, that means point could be in between two
-         ;; defun, in that case we want to use a node that's actually
-         ;; before/after point.
-         (node-before (if (>= (treesit-node-start node) pos)
-                          (treesit-search-forward-goto node "" t t t)
-                        node))
-         (node-after (if (<= (treesit-node-end node) pos)
-                         (treesit-search-forward-goto node "" nil nil t)
-                       node))
-         (result (list nil nil nil))
-         (pred (or pred (lambda (_) t))))
+         (result (list nil nil nil)))
     ;; 1. Find previous and next sibling defuns.
     (cl-loop
      for idx from 0 to 1
-     for node in (list node-before node-after)
      for backward in '(t nil)
+     ;; Make sure we go in the right direction, and the defun we find
+     ;; doesn't cover POS.
      for pos-pred in (list (lambda (n) (<= (treesit-node-end n) pos))
                            (lambda (n) (>= (treesit-node-start n) pos)))
-     ;; If point is inside a defun, our process below will never
-     ;; return a next/prev sibling outside of that defun, effectively
-     ;; any prev/next sibling is locked inside the smallest defun
-     ;; covering point, which is the correct behavior.  That's because
-     ;; when there exists a defun that covers point,
-     ;; `treesit-search-forward' will first reach that defun, after
-     ;; that we only go upwards in the tree, so other defuns outside
-     ;; of the covering defun is never reached.  (Don't use
-     ;; `treesit-search-forward-goto' as it breaks when NODE-AFTER is
-     ;; the last token of a parent defun: it will skip the parent
-     ;; defun because it wants to ensure progress.)
-     do (cl-loop for cursor = (when node
-                                (save-excursion
-                                  (treesit-search-forward
-                                   node regexp backward backward)))
-                 then (treesit-node-parent cursor)
-                 while cursor
-                 if (and (string-match-p
-                          regexp (treesit-node-type cursor))
-                         (funcall pred cursor)
-                         (funcall pos-pred cursor))
-                 do (setf (nth idx result) cursor)))
+     ;; We repeatedly find next defun candidate with
+     ;; `treesit-search-forward', and check if it is a valid defun,
+     ;; until the node we find covers POS, meaning we've gone through
+     ;; every possible sibling defuns.  But there is a catch:
+     ;; `treesit-search-forward' searches bottom-up, so for each
+     ;; candidate we need to go up the tree and find the top-most
+     ;; valid sibling, this defun will be at the same level as POS.
+     ;; Don't use `treesit-search-forward-goto', it skips nodes in
+     ;; order to enforce progress.
+     when node
+     do (let ((cursor node)
+              (iter-pred (lambda (node)
+                           (and (string-match-p
+                                 regexp (treesit-node-type node))
+                                (or (null pred) (funcall pred node))
+                                (funcall pos-pred node)))))
+          ;; Find the node just before/after POS to start searching.
+          (save-excursion
+            (while (and cursor (not (funcall pos-pred cursor)))
+              (setq cursor (treesit-search-forward-goto
+                            cursor "" backward backward t))))
+          ;; Keep searching until we run out of candidates.
+          (while (and cursor
+                      (funcall pos-pred cursor)
+                      (null (nth idx result)))
+            (setf (nth idx result)
+                  (treesit-node-top-level cursor iter-pred t))
+            (setq cursor (treesit-search-forward
+                          cursor regexp backward backward)))))
     ;; 2. Find the parent defun.
-    (setf (nth 2 result)
-          (cl-loop for cursor = (or (nth 0 result)
-                                    (nth 1 result)
-                                    node)
-                   then (treesit-node-parent cursor)
-                   while cursor
-                   if (and (string-match-p
-                            regexp (treesit-node-type cursor))
-                           (funcall pred cursor)
-                           (not (member cursor result)))
-                   return cursor))
+    (let ((cursor (or (nth 0 result) (nth 1 result) node))
+          (iter-pred (lambda (node)
+                       (and (string-match-p
+                             regexp (treesit-node-type node))
+                            (or (null pred) (funcall pred node))
+                            (not (treesit-node-eq node (nth 0 result)))
+                            (not (treesit-node-eq node (nth 1 result)))
+                            (< (treesit-node-start node)
+                               pos
+                               (treesit-node-end node))))))
+      (setf (nth 2 result)
+            (treesit-parent-until cursor iter-pred)))
     result))
 
-(defun treesit--top-level-defun (node regexp &optional pred)
-  "Return the top-level parent defun of NODE.
-REGEXP and PRED are the same as in `treesit-defun-type-regexp'."
-  (let* ((pred (or pred (lambda (_) t))))
-    ;; `treesit-search-forward-goto' will make sure the matched node
-    ;; is before POS.
-    (cl-loop for cursor = node
-             then (treesit-node-parent cursor)
-             while cursor
-             if (and (string-match-p
-                      regexp (treesit-node-type cursor))
-                     (funcall pred cursor))
-             do (setq node cursor))
-    node))
+(defun treesit--top-level-thing (node regexp &optional pred)
+  "Return the top-level parent thing of NODE.
+REGEXP and PRED are the same as in `treesit-thing-at-point'."
+  (treesit-node-top-level
+   node (lambda (node)
+          (and (string-match-p regexp (treesit-node-type node))
+               (or (null pred) (funcall pred node))))
+   t))
 
 ;; The basic idea for nested defun navigation is that we first try to
 ;; move across sibling defuns in the same level, if no more siblings
@@ -1758,25 +1901,23 @@ REGEXP and PRED are the same as in 
`treesit-defun-type-regexp'."
 ;;    -> Obviously we don't want to go to parent's end, instead, we
 ;;       want to go to parent's prev-sibling's end.  Again, we recurse
 ;;       in the function to do that.
-(defun treesit--navigate-defun (pos arg side &optional recursing)
-  "Navigate defun ARG steps from POS.
+(defun treesit--navigate-thing (pos arg side regexp &optional pred recursing)
+  "Navigate thing ARG steps from POS.
 
 If ARG is positive, move forward that many steps, if negative,
 move backward.  If SIDE is `beg', stop at the beginning of a
-defun, if SIDE is `end', stop at the end.
+thing, if SIDE is `end', stop at the end.
 
 This function doesn't actually move point, it just returns the
-position it would move to.  If there aren't enough defuns to move
+position it would move to.  If there aren't enough things to move
 across, return nil.
 
+REGEXP and PRED are the same as in `treesit-thing-at-point'.
+
 RECURSING is an internal parameter, if non-nil, it means this
 function is called recursively."
   (pcase-let*
       ((counter (abs arg))
-       (`(,regexp . ,pred)
-        (if (consp treesit-defun-type-regexp)
-            treesit-defun-type-regexp
-          (cons treesit-defun-type-regexp nil)))
        ;; Move POS to the beg/end of NODE.  If NODE is nil, terminate.
        ;; Return the position we moved to.
        (advance (lambda (node)
@@ -1790,13 +1931,13 @@ function is called recursively."
       (while (> counter 0)
         (pcase-let
             ((`(,prev ,next ,parent)
-              (treesit--defuns-around pos regexp pred)))
+              (treesit--things-around pos regexp pred)))
           ;; When PARENT is nil, nested and top-level are the same, if
           ;; there is a PARENT, make PARENT to be the top-level parent
           ;; and pretend there is no nested PREV and NEXT.
           (when (and (eq treesit-defun-tactic 'top-level)
                      parent)
-            (setq parent (treesit--top-level-defun
+            (setq parent (treesit--top-level-thing
                           parent regexp pred)
                   prev nil
                   next nil))
@@ -1817,9 +1958,9 @@ function is called recursively."
                   ;; (recursing) until we got out of the parents until
                   ;; (1) there is a next sibling defun, or (2) no more
                   ;; parents [2].
-                  (setq pos (or (treesit--navigate-defun
+                  (setq pos (or (treesit--navigate-thing
                                  (treesit-node-end (or next parent))
-                                 1 'beg t)
+                                 1 'beg regexp pred t)
                                 (throw 'term nil)))
                 ;; Normal case.
                 (setq pos (funcall advance (or next parent))))
@@ -1829,9 +1970,9 @@ function is called recursively."
                            (parent t)
                            (t nil)))
                 ;; Special case: go to prev end-of-defun.
-                (setq pos (or (treesit--navigate-defun
+                (setq pos (or (treesit--navigate-thing
                                (treesit-node-start (or prev parent))
-                               -1 'end t)
+                               -1 'end regexp pred t)
                               (throw 'term nil)))
               ;; Normal case.
               (setq pos (funcall advance (or prev parent)))))
@@ -1840,6 +1981,158 @@ function is called recursively."
     ;; Counter equal to 0 means we successfully stepped ARG steps.
     (if (eq counter 0) pos nil)))
 
+;; TODO: In corporate into thing-at-point.
+(defun treesit-thing-at-point (pattern tactic)
+  "Return the thing node at point or nil if none is found.
+
+\"Thing\" is defined by PATTERN, which can be either a string
+REGEXP or a cons cell (REGEXP . PRED): if a node's type matches
+REGEXP, it is a thing.  The \"thing\" could be further restricted
+by PRED: if non-nil, PRED should be a function that takes a node
+and returns t if the node is a \"thing\", and nil if not.
+
+Return the top-level defun if TACTIC is `top-level', return the
+immediate parent thing if TACTIC is `nested'."
+  (pcase-let* ((`(,regexp . ,pred)
+                (treesit--thing-unpack-pattern pattern))
+               (`(,_ ,next ,parent)
+                (treesit--things-around (point) regexp pred))
+               ;; If point is at the beginning of a thing, we
+               ;; prioritize that thing over the parent in nested
+               ;; mode.
+               (node (or (and (eq (treesit-node-start next) (point))
+                              next)
+                         parent)))
+    (if (eq tactic 'top-level)
+        (treesit--top-level-thing node regexp pred)
+      node)))
+
+(defun treesit-defun-at-point ()
+  "Return the defun node at point or nil if none is found.
+
+Respects `treesit-defun-tactic': return the top-level defun if it
+is `top-level', return the immediate parent defun if it is
+`nested'.
+
+Return nil if `treesit-defun-type-regexp' is not set."
+  (when treesit-defun-type-regexp
+    (treesit-thing-at-point
+     treesit-defun-type-regexp treesit-defun-tactic)))
+
+(defun treesit-defun-name (node)
+  "Return the defun name of NODE.
+
+Return nil if there is no name, or if NODE is not a defun node,
+or if NODE is nil.
+
+If `treesit-defun-name-function' is nil, always return nil."
+  (when treesit-defun-name-function
+    (funcall treesit-defun-name-function node)))
+
+(defun treesit-add-log-current-defun ()
+  "Return the name of the defun at point.
+
+Used for `add-log-current-defun-function'.
+
+The delimiter between nested defun names is controlled by
+`treesit-add-log-defun-delimiter'."
+  (let ((node (treesit-defun-at-point))
+        (name nil))
+    (while node
+      (when-let ((new-name (treesit-defun-name node)))
+        (if name
+            (setq name (concat new-name
+                               treesit-add-log-defun-delimiter
+                               name))
+          (setq name new-name)))
+      (setq node (treesit-node-parent node)))
+    name))
+
+;;; Imenu
+
+(defvar treesit-simple-imenu-settings nil
+  "Settings that configure `treesit-simple-imenu'.
+
+It should be a list of (CATEGORY REGEXP PRED NAME-FN).
+
+CATEGORY is the name of a category, like \"Function\", \"Class\",
+etc.  REGEXP should be a regexp matching the type of nodes that
+belong to CATEGORY.  PRED should be either nil or a function
+that takes a node an the argument.  It should return non-nil if
+the node is a valid node for CATEGORY, or nil if not.
+
+CATEGORY could also be nil.  In that case the entries matched by
+REGEXP and PRED are not grouped under CATEGORY.
+
+NAME-FN should be either nil or a function that takes a defun
+node and returns the name of that defun node.  If NAME-FN is nil,
+`treesit-defun-name' is used.
+
+`treesit-major-mode-setup' automatically sets up Imenu if this
+variable is non-nil.")
+
+(defun treesit--simple-imenu-1 (node pred name-fn)
+  "Given a sparse tree, create an Imenu index.
+
+NODE is a node in the tree returned by
+`treesit-induce-sparse-tree' (not a tree-sitter node, its car is
+a tree-sitter node).  Walk that tree and return an Imenu index.
+
+Return a list of entries where each ENTRY has the form:
+
+ENTRY := (NAME . MARKER)
+       | (NAME . ((\" \" . MARKER)
+                  ENTRY
+                  ...)
+
+PRED and NAME-FN are the same as described in
+`treesit-simple-imenu-settings'.  NAME-FN computes NAME in an
+ENTRY.  MARKER marks the start of each tree-sitter node."
+  (let* ((ts-node (car node))
+         (children (cdr node))
+         (subtrees (mapcan (lambda (node)
+                             (treesit--simple-imenu-1 node pred name-fn))
+                           children))
+         ;; The root of the tree could have a nil ts-node.
+         (name (when ts-node
+                 (or (if name-fn
+                         (funcall name-fn ts-node)
+                       (treesit-defun-name ts-node))
+                     "Anonymous")))
+         (marker (when ts-node
+                   (set-marker (make-marker)
+                               (treesit-node-start ts-node)))))
+    (cond
+     ;; The tree-sitter node in the root node of the tree returned by
+     ;; `treesit-induce-sparse-tree' is often nil.
+     ((null ts-node)
+      subtrees)
+     ;; This tree-sitter node is not a valid entry, skip it.
+     ((and pred (not (funcall pred ts-node)))
+      subtrees)
+     ;; Non-leaf node, return a (list of) subgroup.
+     (subtrees
+      `((,name
+         ,(cons " " marker)
+         ,@subtrees)))
+     ;; Leaf node, return a (list of) plain index entry.
+     (t (list (cons name marker))))))
+
+(defun treesit-simple-imenu ()
+  "Return an Imenu index for the current buffer."
+  (let ((root (treesit-buffer-root-node)))
+    (mapcan (lambda (setting)
+              (pcase-let ((`(,category ,regexp ,pred ,name-fn)
+                           setting))
+                (when-let* ((tree (treesit-induce-sparse-tree
+                                   root regexp))
+                            (index (treesit--simple-imenu-1
+                                    tree pred name-fn)))
+                  (if category
+                      (list (cons category index))
+                    index))))
+            treesit-simple-imenu-settings)))
+
 ;;; Activating tree-sitter
 
 (defun treesit-ready-p (language &optional quiet)
@@ -1870,7 +2163,7 @@ instead of emitting a warning."
         (pcase-let ((`(,available . ,err)
                      (treesit-language-available-p lang t)))
           (when (not available)
-            (setq msg (format "language definition for %s is unavailable (%s): 
%s"
+            (setq msg (format "language grammar for %s is unavailable (%s): %s"
                               lang (nth 0 err)
                               (string-join
                                (mapcar (lambda (x) (format "%s" x))
@@ -1897,6 +2190,11 @@ If `treesit-simple-indent-rules' is non-nil, setup 
indentation.
 If `treesit-defun-type-regexp' is non-nil, setup
 `beginning/end-of-defun' functions.
 
+If `treesit-defun-name-function' is non-nil, setup
+`add-log-current-defun'.
+
+If `treesit-simple-imenu-settings' is non-nil, setup Imenu.
+
 Make sure necessary parsers are created for the current buffer
 before calling this function."
   ;; Font-lock.
@@ -1924,7 +2222,27 @@ before calling this function."
     (keymap-set (current-local-map) "<remap> <beginning-of-defun>"
                 #'treesit-beginning-of-defun)
     (keymap-set (current-local-map) "<remap> <end-of-defun>"
-                #'treesit-end-of-defun)))
+                #'treesit-end-of-defun)
+    ;; `end-of-defun' will not work completely correctly in nested
+    ;; defuns due to its implementation.  However, many lisp programs
+    ;; use `beginning/end-of-defun', so we should still set
+    ;; `beginning/end-of-defun-function' so they still mostly work.
+    ;; This is also what `cc-mode' does: rebind user commands and set
+    ;; the variables.  In future we should update `end-of-defun' to
+    ;; work with nested defuns.
+    (setq-local beginning-of-defun-function #'treesit-beginning-of-defun)
+    (setq-local end-of-defun-function #'treesit-end-of-defun))
+  ;; Defun name.
+  (when treesit-defun-name-function
+    (setq-local add-log-current-defun-function
+                #'treesit-add-log-current-defun))
+
+  (setq-local transpose-sexps-function #'treesit-transpose-sexps)
+
+  ;; Imenu.
+  (when treesit-simple-imenu-settings
+    (setq-local imenu-create-index-function
+                #'treesit-simple-imenu)))
 
 ;;; Debugging
 
@@ -1992,7 +2310,7 @@ When this mode is enabled, the mode-line displays
 where NODE, CHILD, etc, are nodes which begin at point.  PARENT
 is the parent of NODE.  NODE is displayed in bold typeface.
 FIELD-NAMEs are field names of NODE and CHILD, etc (see Info
-node `(elisp)Language Definitions', heading \"Field names\").
+node `(elisp)Language Grammar', heading \"Field names\").
 
 If no node starts at point, i.e., point is in the middle of a
 node, then the mode line displays the earliest node that spans point,
@@ -2331,6 +2649,179 @@ window."
                  #'treesit--explorer-post-command t)
     (kill-buffer treesit--explorer-buffer)))
 
+;;; Install & build language grammar
+
+(defvar treesit-language-source-alist nil
+  "Configuration for downloading and installing tree-sitter language grammars.
+
+The value should be an alist where each element has the form
+
+    (LANG . (URL REVISION SOURCE-DIR CC C++))
+
+Only LANG and URL are mandatory.  LANG is the language symbol.
+URL is the Git repository URL for the grammar.
+
+REVISION is the Git tag or branch of the desired version,
+defaulting to the latest default branch.
+
+SOURCE-DIR is the relative subdirectory in the repository in which
+the grammar's parser.c file resides, defaulting to \"src\".
+
+CC and C++ are C and C++ compilers, defaulting to \"cc\" and
+\"c++\", respectively.")
+
+(defun treesit--install-language-grammar-build-recipe (lang)
+  "Interactively produce a download/build recipe for LANG and return it.
+See `treesit-language-source-alist' for details."
+  (when (y-or-n-p (format "There is no recipe for %s, do you want to build it 
interactively?" lang))
+    (cl-labels ((empty-string-to-nil (string)
+                  (if (equal string "") nil string)))
+      (list
+       lang
+       (read-string
+        "Enter the URL of the Git repository of the language grammar: ")
+       (empty-string-to-nil
+        (read-string
+         "Enter the tag or branch (default: default branch): "))
+       (empty-string-to-nil
+        (read-string
+         "Enter the subdirectory in which the parser.c file resides (default: 
\"src\"): "))
+       (empty-string-to-nil
+        (read-string
+         "Enter the C compiler to use (default: auto-detect): "))
+       (empty-string-to-nil
+        (read-string
+         "Enter the C++ compiler to use (default: auto-detect): "))))))
+
+;;;###autoload
+(defun treesit-install-language-grammar (lang)
+  "Build and install the tree-sitter language grammar library for LANG.
+
+Interactively, if `treesit-language-source-alist' doesn't already
+have data for building the grammar for LANG, prompt for its
+repository URL and the C/C++ compiler to use.
+
+This command requires Git, a C compiler and (sometimes) a C++ compiler,
+and the linker to be installed and on PATH.  It also requires that the
+recipe for LANG exists in `treesit-language-source-alist'.
+
+See `exec-path' for the current path where Emacs looks for
+executable programs, such as the C/C++ compiler and linker."
+  (interactive (list (intern
+                      (completing-read
+                       "Language: "
+                       (mapcar #'car treesit-language-source-alist)))))
+  (when-let ((recipe
+              (or (assoc lang treesit-language-source-alist)
+                  (treesit--install-language-grammar-build-recipe
+                   lang))))
+    (condition-case err
+        (apply #'treesit--install-language-grammar-1
+               ;; The nil is OUT-DIR.
+               (cons nil recipe))
+      (error
+       (display-warning
+        'treesit
+        (format "Error encountered when installing language grammar: %s"
+                err)))))
+
+  ;; Check that the installed language grammar is loadable.
+  (pcase-let ((`(,available . ,err)
+               (treesit-language-available-p lang t)))
+    (when (not available)
+      (display-warning
+       'treesit
+       (format "The installed language grammar for %s cannot be located or has 
problems (%s): %s"
+               lang (nth 0 err)
+               (string-join
+                (mapcar (lambda (x) (format "%s" x))
+                        (cdr err))
+                " "))))))
+
+(defun treesit--call-process-signal (&rest args)
+  "Run `call-process' with ARGS.
+If it returns anything but 0, signal an error.  Use the buffer
+content as signal data, and erase buffer afterwards."
+  (unless (eq 0 (apply #'call-process args))
+    (signal 'treesit-error (list "Command:"
+                                 (string-join (cons (car args)
+                                                    (nthcdr 4 args))
+                                              " ")
+                                 "Error output:"
+                                 (buffer-string)))
+    (erase-buffer)))
+
+(defun treesit--install-language-grammar-1
+    (out-dir lang url &optional revision source-dir cc c++)
+  "Install and compile a tree-sitter language grammar library.
+
+OUT-DIR is the directory to put the compiled library file.  If it
+is nil, the \"tree-sitter\" directory under user's Emacs
+configuration directory is used (and automatically created if it
+does not exist).
+
+For LANG, URL, REVISION, SOURCE-DIR, GRAMMAR-DIR, CC, C++, see
+`treesit-language-source-alist'.  If anything goes wrong, this
+function signals an error."
+  (let* ((lang (symbol-name lang))
+         (default-directory (make-temp-file "treesit-workdir" t))
+         (workdir (expand-file-name "repo"))
+         (source-dir (expand-file-name (or source-dir "src") workdir))
+         (cc (or cc (seq-find #'executable-find '("cc" "gcc" "c99"))
+                 ;; If no C compiler found, just use cc and let
+                 ;; `call-process' signal the error.
+                 "cc"))
+         (c++ (or c++ (seq-find #'executable-find '("c++" "g++"))
+                  "c++"))
+         (soext (or (car dynamic-library-suffixes)
+                    (signal 'treesit-error '("Emacs cannot figure out the file 
extension for dynamic libraries for this system, because 
`dynamic-library-suffixes' is nil"))))
+         (out-dir (or (and out-dir (expand-file-name out-dir))
+                      (locate-user-emacs-file "tree-sitter")))
+         (lib-name (concat "libtree-sitter-" lang soext)))
+    (unwind-protect
+        (with-temp-buffer
+          (message "Cloning repository")
+          ;; git clone xxx --depth 1 --quiet [-b yyy] workdir
+          (if revision
+              (treesit--call-process-signal
+               "git" nil t nil "clone" url "--depth" "1" "--quiet"
+               "-b" revision workdir)
+            (treesit--call-process-signal
+             "git" nil t nil "clone" url "--depth" "1" "--quiet"
+             workdir))
+          ;; We need to go into the source directory because some
+          ;; header files use relative path (#include "../xxx").
+          ;; cd "${sourcedir}"
+          (setq default-directory source-dir)
+          (message "Compiling library")
+          ;; cc -fPIC -c -I. parser.c
+          (treesit--call-process-signal
+           cc nil t nil "-fPIC" "-c" "-I." "parser.c")
+          ;; cc -fPIC -c -I. scanner.c
+          (when (file-exists-p "scanner.c")
+            (treesit--call-process-signal
+             cc nil t nil "-fPIC" "-c" "-I." "scanner.c"))
+          ;; c++ -fPIC -I. -c scanner.cc
+          (when (file-exists-p "scanner.cc")
+            (treesit--call-process-signal
+             c++ nil t nil "-fPIC" "-c" "-I." "scanner.cc"))
+          ;; cc/c++ -fPIC -shared *.o -o "libtree-sitter-${lang}.${soext}"
+          (apply #'treesit--call-process-signal
+                 (if (file-exists-p "scanner.cc") c++ cc)
+                 nil t nil
+                 `("-fPIC" "-shared"
+                   ,@(directory-files
+                      default-directory nil
+                      (rx bos (+ anychar) ".o" eos))
+                   "-o" ,lib-name))
+          ;; Copy out.
+          (unless (file-exists-p out-dir)
+            (make-directory out-dir t))
+          (copy-file lib-name (file-name-as-directory out-dir) t t)
+          (message "Library installed to %s/%s" out-dir lib-name))
+      (when (file-exists-p workdir)
+        (delete-directory workdir t)))))
+
 ;;; Etc
 
 (declare-function find-library-name "find-func.el")
diff --git a/lisp/tutorial.el b/lisp/tutorial.el
index 2c787ae5595..0afe565c80b 100644
--- a/lisp/tutorial.el
+++ b/lisp/tutorial.el
@@ -1,6 +1,6 @@
 ;;; tutorial.el --- tutorial for Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: help, internal
diff --git a/lisp/type-break.el b/lisp/type-break.el
index bb6382cfe9e..1aa2b9d2997 100644
--- a/lisp/type-break.el
+++ b/lisp/type-break.el
@@ -1,6 +1,6 @@
 ;;; type-break.el --- encourage rests from typing at appropriate intervals  
-*- lexical-binding: t -*-
 
-;; Copyright (C) 1994-1995, 1997, 2000-2022 Free Software Foundation,
+;; Copyright (C) 1994-1995, 1997, 2000-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Noah Friedman <friedman@splode.com>
diff --git a/lisp/uniquify.el b/lisp/uniquify.el
index 74655e299a8..dee9ecba2ea 100644
--- a/lisp/uniquify.el
+++ b/lisp/uniquify.el
@@ -1,6 +1,6 @@
 ;;; uniquify.el --- unique buffer names dependent on file name -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1989, 1995-1997, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1989, 1995-1997, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Dick King <king@reasoning.com>
diff --git a/lisp/url/ChangeLog.1 b/lisp/url/ChangeLog.1
index 1b5ddc1e768..4cd0a151446 100644
--- a/lisp/url/ChangeLog.1
+++ b/lisp/url/ChangeLog.1
@@ -3068,7 +3068,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1999, 2001-2002, 2004-2022 Free Software Foundation,
+  Copyright (C) 1999, 2001-2002, 2004-2023 Free Software Foundation,
   Inc.
 
   This file is part of GNU Emacs.
diff --git a/lisp/url/url-auth.el b/lisp/url/url-auth.el
index 53cefb46e4b..e9ee72029f3 100644
--- a/lisp/url/url-auth.el
+++ b/lisp/url/url-auth.el
@@ -1,6 +1,6 @@
 ;;; url-auth.el --- Uniform Resource Locator authorization modules -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-cache.el b/lisp/url/url-cache.el
index db8c121cf00..51c52d701e9 100644
--- a/lisp/url/url-cache.el
+++ b/lisp/url/url-cache.el
@@ -1,6 +1,6 @@
 ;;; url-cache.el --- Uniform Resource Locator retrieval tool  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-cid.el b/lisp/url/url-cid.el
index c580a47d480..a716b37abbe 100644
--- a/lisp/url/url-cid.el
+++ b/lisp/url/url-cid.el
@@ -1,6 +1,6 @@
 ;;; url-cid.el --- Content-ID URL loader  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1998-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-cookie.el b/lisp/url/url-cookie.el
index 0709cdd3fa1..22b36980c9e 100644
--- a/lisp/url/url-cookie.el
+++ b/lisp/url/url-cookie.el
@@ -1,6 +1,6 @@
 ;;; url-cookie.el --- URL cookie support  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-dav.el b/lisp/url/url-dav.el
index f1086395005..7e7cd863f46 100644
--- a/lisp/url/url-dav.el
+++ b/lisp/url/url-dav.el
@@ -1,6 +1,6 @@
 ;;; url-dav.el --- WebDAV support  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Bill Perry <wmperry@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/url/url-domsuf.el b/lisp/url/url-domsuf.el
index 10de3683174..74d46f1c037 100644
--- a/lisp/url/url-domsuf.el
+++ b/lisp/url/url-domsuf.el
@@ -1,6 +1,6 @@
 ;;; url-domsuf.el --- Say what domain names can have cookies set.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 
diff --git a/lisp/url/url-expand.el b/lisp/url/url-expand.el
index 710986fd9ac..b3f29a7063d 100644
--- a/lisp/url/url-expand.el
+++ b/lisp/url/url-expand.el
@@ -1,6 +1,6 @@
 ;;; url-expand.el --- expand-file-name for URLs -*- lexical-binding: t -*-
 
-;; Copyright (C) 1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-file.el b/lisp/url/url-file.el
index 6258e999c1d..f63fce3e000 100644
--- a/lisp/url/url-file.el
+++ b/lisp/url/url-file.el
@@ -1,6 +1,6 @@
 ;;; url-file.el --- File retrieval code  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-ftp.el b/lisp/url/url-ftp.el
index 92445cac3f2..c3ea4dce714 100644
--- a/lisp/url/url-ftp.el
+++ b/lisp/url/url-ftp.el
@@ -1,6 +1,6 @@
 ;;; url-ftp.el --- FTP wrapper  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-future.el b/lisp/url/url-future.el
index 737eea32c6a..9b528835a7b 100644
--- a/lisp/url/url-future.el
+++ b/lisp/url/url-future.el
@@ -1,6 +1,6 @@
 ;;; url-future.el --- general futures facility for url.el -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <tzz@lifelogs.com>
 ;; Keywords: data
diff --git a/lisp/url/url-gw.el b/lisp/url/url-gw.el
index e4d1ca72a0d..b20e5073f74 100644
--- a/lisp/url/url-gw.el
+++ b/lisp/url/url-gw.el
@@ -1,6 +1,6 @@
 ;;; url-gw.el --- Gateway munging for URL loading  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997-1998, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Bill Perry <wmperry@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/url/url-handlers.el b/lisp/url/url-handlers.el
index cb115fceb23..cb4c811185c 100644
--- a/lisp/url/url-handlers.el
+++ b/lisp/url/url-handlers.el
@@ -1,6 +1,6 @@
 ;;; url-handlers.el --- file-name-handler stuff for URL loading  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-history.el b/lisp/url/url-history.el
index 058e601301b..0264f16366d 100644
--- a/lisp/url/url-history.el
+++ b/lisp/url/url-history.el
@@ -1,6 +1,6 @@
 ;;; url-history.el --- Global history tracking for URL package  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el
index 94ef156108c..ada6341ee73 100644
--- a/lisp/url/url-http.el
+++ b/lisp/url/url-http.el
@@ -1,6 +1,6 @@
 ;;; url-http.el --- HTTP retrieval routines  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999, 2001, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001, 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Bill Perry <wmperry@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/url/url-imap.el b/lisp/url/url-imap.el
index 2bc8b2026d8..6fa34e6c791 100644
--- a/lisp/url/url-imap.el
+++ b/lisp/url/url-imap.el
@@ -1,6 +1,6 @@
 ;;; url-imap.el --- IMAP retrieval routines  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <jas@pdc.kth.se>
 ;; Keywords: comm, data, processes
diff --git a/lisp/url/url-irc.el b/lisp/url/url-irc.el
index f97b6de6fe7..1463335d40f 100644
--- a/lisp/url/url-irc.el
+++ b/lisp/url/url-irc.el
@@ -1,6 +1,6 @@
 ;;; url-irc.el --- IRC URL interface  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-ldap.el b/lisp/url/url-ldap.el
index fabac30249b..f06ba1cd8de 100644
--- a/lisp/url/url-ldap.el
+++ b/lisp/url/url-ldap.el
@@ -1,6 +1,6 @@
 ;;; url-ldap.el --- LDAP Uniform Resource Locator retrieval code  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1998-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-mailto.el b/lisp/url/url-mailto.el
index 4f75ce36208..24e64e99c9f 100644
--- a/lisp/url/url-mailto.el
+++ b/lisp/url/url-mailto.el
@@ -1,6 +1,6 @@
 ;;; url-mailto.el --- Mail Uniform Resource Locator retrieval code  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-methods.el b/lisp/url/url-methods.el
index 70c4fbb986a..9643e992044 100644
--- a/lisp/url/url-methods.el
+++ b/lisp/url/url-methods.el
@@ -1,6 +1,6 @@
 ;;; url-methods.el --- Load URL schemes as needed  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-misc.el b/lisp/url/url-misc.el
index 0c1f79a0c59..3caaf49f58e 100644
--- a/lisp/url/url-misc.el
+++ b/lisp/url/url-misc.el
@@ -1,6 +1,6 @@
 ;;; url-misc.el --- Misc Uniform Resource Locator retrieval code  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-1999, 2002, 2004-2022 Free Software Foundation,
+;; Copyright (C) 1996-1999, 2002, 2004-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Keywords: comm, data, processes
diff --git a/lisp/url/url-news.el b/lisp/url/url-news.el
index 519f23df31c..592f34213ee 100644
--- a/lisp/url/url-news.el
+++ b/lisp/url/url-news.el
@@ -1,6 +1,6 @@
 ;;; url-news.el --- News Uniform Resource Locator retrieval code  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-nfs.el b/lisp/url/url-nfs.el
index 409b9d87bef..76f9b04076c 100644
--- a/lisp/url/url-nfs.el
+++ b/lisp/url/url-nfs.el
@@ -1,6 +1,6 @@
 ;;; url-nfs.el --- NFS URL interface  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-parse.el b/lisp/url/url-parse.el
index 91f47d0325d..cd0e155e954 100644
--- a/lisp/url/url-parse.el
+++ b/lisp/url/url-parse.el
@@ -1,6 +1,6 @@
 ;;; url-parse.el --- Uniform Resource Locator parser -*- lexical-binding: t -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-privacy.el b/lisp/url/url-privacy.el
index 36ccbe2adc1..2be77b33035 100644
--- a/lisp/url/url-privacy.el
+++ b/lisp/url/url-privacy.el
@@ -1,6 +1,6 @@
 ;;; url-privacy.el --- Global history tracking for URL package  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-proxy.el b/lisp/url/url-proxy.el
index c72e459a4ec..0c330069789 100644
--- a/lisp/url/url-proxy.el
+++ b/lisp/url/url-proxy.el
@@ -1,6 +1,6 @@
 ;;; url-proxy.el --- Proxy server support  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2004-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-queue.el b/lisp/url/url-queue.el
index cf45a7f681a..f89f38bf965 100644
--- a/lisp/url/url-queue.el
+++ b/lisp/url/url-queue.el
@@ -1,6 +1,6 @@
 ;;; url-queue.el --- Fetching web pages in parallel   -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: comm
diff --git a/lisp/url/url-tramp.el b/lisp/url/url-tramp.el
index c414a025a14..172e0de6ab0 100644
--- a/lisp/url/url-tramp.el
+++ b/lisp/url/url-tramp.el
@@ -1,6 +1,6 @@
 ;;; url-tramp.el --- file-name-handler magic invoking Tramp for some protocols 
 -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, data, processes, hypermedia
diff --git a/lisp/url/url-util.el b/lisp/url/url-util.el
index 95c0fe14f3b..a7cb8364b5f 100644
--- a/lisp/url/url-util.el
+++ b/lisp/url/url-util.el
@@ -1,6 +1,6 @@
 ;;; url-util.el --- Miscellaneous helper routines for URL library -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Bill Perry <wmperry@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/url/url-vars.el b/lisp/url/url-vars.el
index 4cdca055543..7e2290217d0 100644
--- a/lisp/url/url-vars.el
+++ b/lisp/url/url-vars.el
@@ -1,6 +1,6 @@
 ;;; url-vars.el --- Variables for Uniform Resource Locator tool  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url.el b/lisp/url/url.el
index 92057742ca7..09e555a7b15 100644
--- a/lisp/url/url.el
+++ b/lisp/url/url.el
@@ -1,6 +1,6 @@
 ;;; url.el --- Uniform Resource Locator retrieval tool  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1996-1999, 2001, 2004-2022 Free Software Foundation,
+;; Copyright (C) 1996-1999, 2001, 2004-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Perry <wmperry@gnu.org>
diff --git a/lisp/use-package/bind-key.el b/lisp/use-package/bind-key.el
index c3890c4d0aa..b216c668d83 100644
--- a/lisp/use-package/bind-key.el
+++ b/lisp/use-package/bind-key.el
@@ -1,6 +1,6 @@
 ;;; bind-key.el --- A simple way to manage personal keybindings  -*- 
lexical-binding: t; -*-
 
-;; Copyright (c) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (c) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@newartisans.com>
 ;; Maintainer: John Wiegley <johnw@newartisans.com>
diff --git a/lisp/use-package/use-package-bind-key.el 
b/lisp/use-package/use-package-bind-key.el
index 4ebf54825c6..47eb066eba0 100644
--- a/lisp/use-package/use-package-bind-key.el
+++ b/lisp/use-package/use-package-bind-key.el
@@ -1,6 +1,6 @@
 ;;; use-package-bind-key.el --- Support for the :bind/:bind-keymap keywords  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@newartisans.com>
 ;; Maintainer: John Wiegley <johnw@newartisans.com>
diff --git a/lisp/use-package/use-package-core.el 
b/lisp/use-package/use-package-core.el
index 1dee08e55b2..379e119b60f 100644
--- a/lisp/use-package/use-package-core.el
+++ b/lisp/use-package/use-package-core.el
@@ -1,6 +1,6 @@
 ;;; use-package-core.el --- A configuration macro for simplifying your .emacs  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@newartisans.com>
 ;; Maintainer: John Wiegley <johnw@newartisans.com>
diff --git a/lisp/use-package/use-package-delight.el 
b/lisp/use-package/use-package-delight.el
index 41978b94f49..4f571cd3990 100644
--- a/lisp/use-package/use-package-delight.el
+++ b/lisp/use-package/use-package-delight.el
@@ -1,6 +1,6 @@
 ;;; use-package-delight.el --- Support for the :delight keyword  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@newartisans.com>
 ;; Maintainer: John Wiegley <johnw@newartisans.com>
diff --git a/lisp/use-package/use-package-diminish.el 
b/lisp/use-package/use-package-diminish.el
index 7fff93b0e9b..f683694dbd8 100644
--- a/lisp/use-package/use-package-diminish.el
+++ b/lisp/use-package/use-package-diminish.el
@@ -1,6 +1,6 @@
 ;;; use-package-diminish.el --- Support for the :diminish keyword  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@newartisans.com>
 ;; Maintainer: John Wiegley <johnw@newartisans.com>
diff --git a/lisp/use-package/use-package-ensure-system-package.el 
b/lisp/use-package/use-package-ensure-system-package.el
index 6681e5afb72..ef4afac1a0b 100644
--- a/lisp/use-package/use-package-ensure-system-package.el
+++ b/lisp/use-package/use-package-ensure-system-package.el
@@ -1,6 +1,6 @@
 ;;; use-package-ensure-system-package.el --- auto install system packages  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Justin Talbott <justin@waymondo.com>
 ;; Keywords: convenience, tools, extensions
diff --git a/lisp/use-package/use-package-ensure.el 
b/lisp/use-package/use-package-ensure.el
index dae0312dbad..e0ea982594e 100644
--- a/lisp/use-package/use-package-ensure.el
+++ b/lisp/use-package/use-package-ensure.el
@@ -1,6 +1,6 @@
 ;;; use-package-ensure.el --- Support for the :ensure and :pin keywords  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@newartisans.com>
 ;; Maintainer: John Wiegley <johnw@newartisans.com>
diff --git a/lisp/use-package/use-package-jump.el 
b/lisp/use-package/use-package-jump.el
index 6fc52afd286..4fc5c3f0a8e 100644
--- a/lisp/use-package/use-package-jump.el
+++ b/lisp/use-package/use-package-jump.el
@@ -1,6 +1,6 @@
 ;;; use-package-jump.el --- Attempt to jump to a use-package declaration  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@newartisans.com>
 ;; Maintainer: John Wiegley <johnw@newartisans.com>
diff --git a/lisp/use-package/use-package-lint.el 
b/lisp/use-package/use-package-lint.el
index 498213a76bf..9239d01148a 100644
--- a/lisp/use-package/use-package-lint.el
+++ b/lisp/use-package/use-package-lint.el
@@ -1,6 +1,6 @@
 ;;; use-package-lint.el --- Attempt to find errors in use-package declarations 
 -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@newartisans.com>
 ;; Maintainer: John Wiegley <johnw@newartisans.com>
diff --git a/lisp/use-package/use-package.el b/lisp/use-package/use-package.el
index 0929696466b..7682468522d 100644
--- a/lisp/use-package/use-package.el
+++ b/lisp/use-package/use-package.el
@@ -1,6 +1,6 @@
 ;;; use-package.el --- A configuration macro for simplifying your .emacs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@newartisans.com>
 ;; Maintainer: John Wiegley <johnw@newartisans.com>
diff --git a/lisp/userlock.el b/lisp/userlock.el
index a8e699385c7..61f061d3e54 100644
--- a/lisp/userlock.el
+++ b/lisp/userlock.el
@@ -1,6 +1,6 @@
 ;;; userlock.el --- handle file access contention between multiple users  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Richard King
 ;; (according to authors.el)
diff --git a/lisp/vc/add-log.el b/lisp/vc/add-log.el
index a1d6152ee21..22ae6db72ab 100644
--- a/lisp/vc/add-log.el
+++ b/lisp/vc/add-log.el
@@ -1,6 +1,6 @@
 ;;; add-log.el --- change log maintenance commands for Emacs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1985-1986, 1988, 1993-1994, 1997-1998, 2000-2022 Free
+;; Copyright (C) 1985-1986, 1988, 1993-1994, 1997-1998, 2000-2023 Free
 ;; Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/vc/compare-w.el b/lisp/vc/compare-w.el
index 64d5d1081a3..728198eb361 100644
--- a/lisp/vc/compare-w.el
+++ b/lisp/vc/compare-w.el
@@ -1,6 +1,6 @@
 ;;; compare-w.el --- compare text between windows for Emacs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1986-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1986-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: convenience files vc
diff --git a/lisp/vc/cvs-status.el b/lisp/vc/cvs-status.el
index 7f921a73398..7982cd89efc 100644
--- a/lisp/vc/cvs-status.el
+++ b/lisp/vc/cvs-status.el
@@ -1,6 +1,6 @@
 ;;; cvs-status.el --- major mode for browsing `cvs status' output -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: pcl-cvs cvs status tree vc tools
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index 357ce001b3c..acfd2c30f0c 100644
--- a/lisp/vc/diff-mode.el
+++ b/lisp/vc/diff-mode.el
@@ -1,6 +1,6 @@
 ;;; diff-mode.el --- a mode for viewing/editing context diffs -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: convenience patch diff vc
@@ -272,8 +272,7 @@ and hunk-based syntax highlighting otherwise as a fallback."
 
 (defcustom diff-minor-mode-prefix "\C-c="
   "Prefix key for `diff-minor-mode' commands."
-  :type '(choice (string "ESC")
-                 (string "\C-c=") string))
+  :type '(choice (string "\e") (string "\C-c=") string))
 
 (defvar-keymap diff-minor-mode-map
   :doc "Keymap for `diff-minor-mode'.  See also `diff-mode-shared-map'."
diff --git a/lisp/vc/diff.el b/lisp/vc/diff.el
index 3e35a3329b1..90c43d111f5 100644
--- a/lisp/vc/diff.el
+++ b/lisp/vc/diff.el
@@ -1,6 +1,6 @@
 ;;; diff.el --- run `diff'  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1992, 1994, 1996, 2001-2022 Free Software Foundation,
+;; Copyright (C) 1992, 1994, 1996, 2001-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Frank Bresz
diff --git a/lisp/vc/ediff-diff.el b/lisp/vc/ediff-diff.el
index 24647de576d..832e3933df9 100644
--- a/lisp/vc/ediff-diff.el
+++ b/lisp/vc/ediff-diff.el
@@ -1,6 +1,6 @@
 ;;; ediff-diff.el --- diff-related utilities  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-help.el b/lisp/vc/ediff-help.el
index e2d93d2b31b..e8d4b3d4f5d 100644
--- a/lisp/vc/ediff-help.el
+++ b/lisp/vc/ediff-help.el
@@ -1,6 +1,6 @@
 ;;; ediff-help.el --- Code related to the contents of Ediff help buffers  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-hook.el b/lisp/vc/ediff-hook.el
index d1eff0151a8..2f860d2ae73 100644
--- a/lisp/vc/ediff-hook.el
+++ b/lisp/vc/ediff-hook.el
@@ -1,6 +1,6 @@
 ;;; ediff-hook.el --- setup for Ediff's menus and autoloads  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-init.el b/lisp/vc/ediff-init.el
index c956cdd2ee6..d78f9ad9f36 100644
--- a/lisp/vc/ediff-init.el
+++ b/lisp/vc/ediff-init.el
@@ -1,6 +1,6 @@
 ;;; ediff-init.el --- Macros, variables, and defsubsts used by Ediff  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-merg.el b/lisp/vc/ediff-merg.el
index aae6ad549ea..b1cc9fd8c28 100644
--- a/lisp/vc/ediff-merg.el
+++ b/lisp/vc/ediff-merg.el
@@ -1,6 +1,6 @@
 ;;; ediff-merg.el --- merging utilities  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-mult.el b/lisp/vc/ediff-mult.el
index 52e356d8e9b..3fda8c7f2f1 100644
--- a/lisp/vc/ediff-mult.el
+++ b/lisp/vc/ediff-mult.el
@@ -1,6 +1,6 @@
 ;;; ediff-mult.el --- support for multi-file/multi-buffer processing in Ediff  
-*- lexical-binding:t -*-
 
-;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-ptch.el b/lisp/vc/ediff-ptch.el
index 4d471e21b4c..e62434360aa 100644
--- a/lisp/vc/ediff-ptch.el
+++ b/lisp/vc/ediff-ptch.el
@@ -1,6 +1,6 @@
 ;;; ediff-ptch.el --- Ediff's  patch support  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-util.el b/lisp/vc/ediff-util.el
index f4068832215..8011d7ce2e0 100644
--- a/lisp/vc/ediff-util.el
+++ b/lisp/vc/ediff-util.el
@@ -1,6 +1,6 @@
 ;;; ediff-util.el --- the core commands and utilities of ediff  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-vers.el b/lisp/vc/ediff-vers.el
index 2fdbe64147e..ed85764682f 100644
--- a/lisp/vc/ediff-vers.el
+++ b/lisp/vc/ediff-vers.el
@@ -1,6 +1,6 @@
 ;;; ediff-vers.el --- version control interface to Ediff  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1995-1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1997, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: ediff
diff --git a/lisp/vc/ediff-wind.el b/lisp/vc/ediff-wind.el
index bd2e9f19773..eb903f093f9 100644
--- a/lisp/vc/ediff-wind.el
+++ b/lisp/vc/ediff-wind.el
@@ -1,6 +1,6 @@
 ;;; ediff-wind.el --- window manipulation utilities  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: ediff
diff --git a/lisp/vc/ediff.el b/lisp/vc/ediff.el
index 40473a2c03f..24836e1b1c1 100644
--- a/lisp/vc/ediff.el
+++ b/lisp/vc/ediff.el
@@ -1,6 +1,6 @@
 ;;; ediff.el --- a comprehensive visual interface to diff & patch  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Created: February 2, 1994
diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el
index 4624ada4179..1e249c637a6 100644
--- a/lisp/vc/log-edit.el
+++ b/lisp/vc/log-edit.el
@@ -1,6 +1,6 @@
 ;;; log-edit.el --- Major mode for editing CVS commit messages -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: pcl-cvs cvs commit log vc
diff --git a/lisp/vc/log-view.el b/lisp/vc/log-view.el
index 7a710386fee..e6eb6a5b973 100644
--- a/lisp/vc/log-view.el
+++ b/lisp/vc/log-view.el
@@ -1,6 +1,6 @@
 ;;; log-view.el --- Major mode for browsing revision log histories -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: tools, vc
diff --git a/lisp/vc/pcvs-defs.el b/lisp/vc/pcvs-defs.el
index 2f11716bde9..3bbf2355b81 100644
--- a/lisp/vc/pcvs-defs.el
+++ b/lisp/vc/pcvs-defs.el
@@ -1,6 +1,6 @@
 ;;; pcvs-defs.el --- variable definitions for PCL-CVS  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1991-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: pcl-cvs
diff --git a/lisp/vc/pcvs-info.el b/lisp/vc/pcvs-info.el
index b48a4a1cbf1..86655ef6fde 100644
--- a/lisp/vc/pcvs-info.el
+++ b/lisp/vc/pcvs-info.el
@@ -1,6 +1,6 @@
 ;;; pcvs-info.el --- internal representation of a fileinfo entry  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1991-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: pcl-cvs
diff --git a/lisp/vc/pcvs-parse.el b/lisp/vc/pcvs-parse.el
index 77c5469a175..df10efab41e 100644
--- a/lisp/vc/pcvs-parse.el
+++ b/lisp/vc/pcvs-parse.el
@@ -1,6 +1,6 @@
 ;;; pcvs-parse.el --- the CVS output parser  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1991-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: pcl-cvs
@@ -435,7 +435,7 @@ The remaining KEYS are passed directly to 
`cvs-create-fileinfo'."
        ;; Conflict
        (and
         (cvs-match (concat "C \\(.*" qfile "\\)$") (path 1) (type 'CONFLICT))
-        ;; C might be followed by a "spurious" U for non-mergable files
+        ;; C might be followed by a "spurious" U for non-mergeable files
         (cvs-or (cvs-match (concat "U \\(.*" qfile "\\)$")) t))
        ;; Successful merge
        (cvs-match (concat "M \\(.*" qfile "\\)$") (path 1))
diff --git a/lisp/vc/pcvs-util.el b/lisp/vc/pcvs-util.el
index ddc3ea6e810..5ff94405d11 100644
--- a/lisp/vc/pcvs-util.el
+++ b/lisp/vc/pcvs-util.el
@@ -1,6 +1,6 @@
 ;;; pcvs-util.el --- utility functions for PCL-CVS  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1991-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: pcl-cvs
diff --git a/lisp/vc/pcvs.el b/lisp/vc/pcvs.el
index c19fe9bd2ad..c90b9f6bdf1 100644
--- a/lisp/vc/pcvs.el
+++ b/lisp/vc/pcvs.el
@@ -1,6 +1,6 @@
 ;;; pcvs.el --- a front-end to CVS  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1991-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2023 Free Software Foundation, Inc.
 
 ;; Author: The PCL-CVS Trust <pcl-cvs@cyclic.com>
 ;;     Per Cederqvist <ceder@lysator.liu.se>
diff --git a/lisp/vc/smerge-mode.el b/lisp/vc/smerge-mode.el
index e13894d6b53..c39a9cc2f22 100644
--- a/lisp/vc/smerge-mode.el
+++ b/lisp/vc/smerge-mode.el
@@ -1,6 +1,6 @@
 ;;; smerge-mode.el --- Minor mode to resolve diff3 conflicts -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: vc, tools, revision control, merge, diff3, cvs, conflict
diff --git a/lisp/vc/vc-annotate.el b/lisp/vc/vc-annotate.el
index a15cf417de3..70057a6aac7 100644
--- a/lisp/vc/vc-annotate.el
+++ b/lisp/vc/vc-annotate.el
@@ -1,6 +1,6 @@
 ;;; vc-annotate.el --- VC Annotate Support  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1997-1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Martin Lorentzson <emwson@emw.ericsson.se>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el
index 8f00441e816..6443f6d57aa 100644
--- a/lisp/vc/vc-bzr.el
+++ b/lisp/vc/vc-bzr.el
@@ -1,6 +1,6 @@
 ;;; vc-bzr.el --- VC backend for the bzr revision control system  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;;        Riccardo Murri <riccardo.murri@gmail.com>
diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el
index 2dd3d416ac7..6e0246ea762 100644
--- a/lisp/vc/vc-cvs.el
+++ b/lisp/vc/vc-cvs.el
@@ -1,6 +1,6 @@
 ;;; vc-cvs.el --- non-resident support for CVS version-control  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1995, 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: FSF (see vc.el for full credits)
 ;; Package: vc
diff --git a/lisp/vc/vc-dav.el b/lisp/vc/vc-dav.el
index 1cd91c9f543..a0e3866cca2 100644
--- a/lisp/vc/vc-dav.el
+++ b/lisp/vc/vc-dav.el
@@ -1,6 +1,6 @@
 ;;; vc-dav.el --- vc.el support for WebDAV  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001, 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Bill Perry <wmperry@gnu.org>
 ;; Keywords: url, vc
diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el
index 037de415e62..312556f644a 100644
--- a/lisp/vc/vc-dir.el
+++ b/lisp/vc/vc-dir.el
@@ -1,6 +1,6 @@
 ;;; vc-dir.el --- Directory status display under VC  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 ;; Author: Dan Nicolaescu <dann@ics.uci.edu>
 ;; Keywords: vc tools
diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el
index dc3ed526506..e1a3eff448d 100644
--- a/lisp/vc/vc-dispatcher.el
+++ b/lisp/vc/vc-dispatcher.el
@@ -1,6 +1,6 @@
 ;;; vc-dispatcher.el --- generic command-dispatcher facility.  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: FSF (see below for full credits)
 ;; Keywords: vc tools
diff --git a/lisp/vc/vc-filewise.el b/lisp/vc/vc-filewise.el
index 252e6edd6e7..99df438e294 100644
--- a/lisp/vc/vc-filewise.el
+++ b/lisp/vc/vc-filewise.el
@@ -1,6 +1,6 @@
 ;;; vc-filewise.el --- common functions for file-oriented back ends.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1992-1996, 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1996, 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: FSF (see vc.el for full credits)
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index 9f27f759d35..7689d5f879f 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -1,6 +1,6 @@
 ;;; vc-git.el --- VC backend for the git version control system -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Alexandre Julliard <julliard@winehq.org>
 ;; Keywords: vc tools
@@ -315,6 +315,23 @@ Good example of file name that needs this: 
\"test[56].xx\".")
                   (string-trim-right (match-string 1 version-string) "\\.")
                 "0")))))
 
+(defun vc-git--git-path (&optional path)
+  "Resolve .git/PATH for the current working tree.
+In particular, handle the case where this is a linked working
+tree, such that .git is a plain file.
+
+See the --git-dir and --git-path options to git-rev-parse(1)."
+  (if (and path (not (string-empty-p path)))
+      ;; Canonicalize in this branch because --git-dir always returns
+      ;; an absolute file name.
+      (expand-file-name
+       (string-trim-right
+        (vc-git--run-command-string nil "rev-parse"
+                                    "--git-path" path)))
+    (concat (string-trim-right
+             (vc-git--run-command-string nil "rev-parse" "--git-dir"))
+            "/")))
+
 (defun vc-git--git-status-to-vc-state (code-list)
   "Convert CODE-LIST to a VC status.
 
@@ -759,12 +776,32 @@ or an empty string if none."
                  :help "Show the contents of the current stash"))
     map))
 
+(defun vc-git--cmds-in-progress ()
+  "Return a list of Git commands in progress in this worktree."
+  (let ((gitdir (vc-git--git-path))
+        cmds)
+    ;; See contrib/completion/git-prompt.sh in git.git.
+    (when (or (file-directory-p
+              (expand-file-name "rebase-merge" gitdir))
+             (file-exists-p
+              (expand-file-name "rebase-apply/rebasing" gitdir)))
+      (push 'rebase cmds))
+    (when (file-exists-p
+          (expand-file-name "rebase-apply/applying" gitdir))
+      (push 'am cmds))
+    (when (file-exists-p (expand-file-name "MERGE_HEAD" gitdir))
+      (push 'merge cmds))
+    (when (file-exists-p (expand-file-name "BISECT_START" gitdir))
+      (push 'bisect cmds))
+    cmds))
+
 (defun vc-git-dir-extra-headers (dir)
   (let ((str (with-output-to-string
                (with-current-buffer standard-output
                  (vc-git--out-ok "symbolic-ref" "HEAD"))))
        (stash-list (vc-git-stash-list))
         (default-directory dir)
+        (in-progress (vc-git--cmds-in-progress))
 
        branch remote remote-url stash-button stash-string)
     (if (string-match "^\\(refs/heads/\\)?\\(.+\\)$" str)
@@ -839,9 +876,9 @@ or an empty string if none."
        (propertize remote-url
                    'face 'vc-dir-header-value)))
      ;; For now just a heading, key bindings can be added later for various 
bisect actions
-     (when (file-exists-p (expand-file-name ".git/BISECT_START" (vc-git-root 
dir)))
+     (when (memq 'bisect in-progress)
        (propertize  "\nBisect     : in progress" 'face 'vc-dir-status-warning))
-     (when (file-exists-p (expand-file-name ".git/rebase-apply" (vc-git-root 
dir)))
+     (when (memq 'rebase in-progress)
        (propertize  "\nRebase     : in progress" 'face 'vc-dir-status-warning))
      (if stash-list
          (concat
@@ -999,6 +1036,8 @@ It is based on `log-edit-mode', and has Git-specific 
extensions."
   (let ((vc-git-patch-string patch-string))
     (vc-git-checkin nil comment)))
 
+(autoload 'vc-switches "vc")
+
 (defun vc-git-checkin (files comment &optional _rev)
   (let* ((file1 (or (car files) default-directory))
          (root (vc-git-root file1))
@@ -1020,40 +1059,74 @@ It is based on `log-edit-mode', and has Git-specific 
extensions."
           ;; message.  Handle also remote files.
           (if (eq system-type 'windows-nt)
               (let ((default-directory (file-name-directory file1)))
-                (make-nearby-temp-file "git-msg")))))
+                (make-nearby-temp-file "git-msg"))))
+         to-stash)
     (when vc-git-patch-string
       (unless (zerop (vc-git-command nil t nil "diff" "--cached" "--quiet"))
-        ;; Check that all staged changes also exist in the patch.
-        ;; This is needed to allow adding/removing files that are
-        ;; currently staged to the index.  So remove the whole file diff
-        ;; from the patch because commit will take it from the index.
+        ;; Check that what's already staged is compatible with what
+        ;; we want to commit (bug#60126).
+        ;;
+        ;; 1. If the changes to a file in the index are identical to
+        ;;    the changes to that file we want to commit, remove the
+        ;;    changes from our patch, and let the commit take them
+        ;;    from the index.  This is necessary for adding and
+        ;;    removing files to work.
+        ;;
+        ;; 2. If the changes to a file in the index are different to
+        ;;    changes to that file we want to commit, then we have to
+        ;;    unstage the changes or abort.
+        ;;
+        ;; 3. If there are changes to a file in the index but we don't
+        ;;    want to commit any changes to that file, we need to
+        ;;    stash those changes before committing.
         (with-temp-buffer
-          (vc-git-command (current-buffer) t nil "diff" "--cached")
+          ;; If the user has switches like -D, -M etc. in their
+          ;; `vc-git-diff-switches', we must pass them here too, or
+          ;; our string matches will fail.
+          (if vc-git-diff-switches
+              (apply #'vc-git-command (current-buffer) t nil
+                     "diff" "--cached" (vc-switches 'git 'diff))
+            ;; Following code doesn't understand plain diff(1) output.
+            (user-error "Cannot commit patch with nil `vc-git-diff-switches'"))
           (goto-char (point-min))
-          (let ((pos (point)) file-diff file-beg)
+          (let ((pos (point)) file-name file-header file-diff file-beg)
             (while (not (eobp))
+              (when (and (looking-at "^diff --git a/\\(.+\\) b/\\(.+\\)")
+                         (string= (match-string 1) (match-string 2)))
+                (setq file-name (match-string 1)))
               (forward-line 1) ; skip current "diff --git" line
+              (setq file-header (buffer-substring pos (point)))
               (search-forward "diff --git" nil 'move)
               (move-beginning-of-line 1)
               (setq file-diff (buffer-substring pos (point)))
-              (if (and (setq file-beg (string-search
-                                       file-diff vc-git-patch-string))
-                       ;; Check that file diff ends with an empty string
-                       ;; or the beginning of the next file diff.
-                       (string-match-p "\\`\\'\\|\\`diff --git"
-                                       (substring
-                                        vc-git-patch-string
-                                        (+ file-beg (length file-diff)))))
-                  (setq vc-git-patch-string
-                        (string-replace file-diff "" vc-git-patch-string))
-                (user-error "Index not empty"))
+              (cond ((and (setq file-beg (string-search
+                                          file-diff vc-git-patch-string))
+                          ;; Check that file diff ends with an empty string
+                          ;; or the beginning of the next file diff.
+                          (string-match-p "\\`\\'\\|\\`diff --git"
+                                          (substring
+                                           vc-git-patch-string
+                                           (+ file-beg (length file-diff)))))
+                     (setq vc-git-patch-string
+                           (string-replace file-diff "" vc-git-patch-string)))
+                    ((string-match (format "^%s" (regexp-quote file-header))
+                                   vc-git-patch-string)
+                     (if (and file-name
+                              (yes-or-no-p
+                               (format "Unstage already-staged changes to %s?"
+                                       file-name)))
+                         (vc-git-command nil 0 file-name "reset" "-q" "--")
+                       (user-error "Index not empty")))
+                    (t (push file-name to-stash)))
               (setq pos (point))))))
-      (let ((patch-file (make-nearby-temp-file "git-patch")))
-        (with-temp-file patch-file
-          (insert vc-git-patch-string))
-        (unwind-protect
-            (vc-git-command nil 0 patch-file "apply" "--cached")
-          (delete-file patch-file))))
+      (unless (string-empty-p vc-git-patch-string)
+        (let ((patch-file (make-nearby-temp-file "git-patch")))
+          (with-temp-file patch-file
+            (insert vc-git-patch-string))
+          (unwind-protect
+              (vc-git-command nil 0 patch-file "apply" "--cached")
+            (delete-file patch-file))))
+      (when to-stash (vc-git--stash-staged-changes files)))
     (cl-flet ((boolean-arg-fn
                (argument)
                (lambda (value) (when (equal value "yes") (list argument)))))
@@ -1079,7 +1152,58 @@ It is based on `log-edit-mode', and has Git-specific 
extensions."
                       args)
                     (unless vc-git-patch-string
                       (if only (list "--only" "--") '("-a"))))))
-    (if (and msg-file (file-exists-p msg-file)) (delete-file msg-file))))
+    (if (and msg-file (file-exists-p msg-file)) (delete-file msg-file))
+    (when to-stash
+      (let ((cached (make-nearby-temp-file "git-cached")))
+        (unwind-protect
+            (progn (with-temp-file cached
+                     (vc-git-command t 0 nil "stash" "show" "-p"))
+                   (vc-git-command nil 0 cached "apply" "--cached"))
+          (delete-file cached))
+        (vc-git-command nil 0 nil "stash" "drop")))))
+
+(defun vc-git--stash-staged-changes (files)
+  "Stash only the staged changes to FILES."
+  ;; This is necessary because even if you pass a list of file names
+  ;; to 'git stash push', it will stash any and all staged changes.
+  (unless (zerop
+           (vc-git-command nil t files "diff" "--cached" "--quiet"))
+    (cl-flet
+        ((git-string (&rest args)
+           (string-trim-right
+            (with-output-to-string
+              (apply #'vc-git-command standard-output 0 nil args)))))
+      (let ((cached (make-nearby-temp-file "git-cached"))
+            (message "Previously staged changes")
+            tree)
+        ;; Use a temporary index to create a tree object corresponding
+        ;; to the staged changes to FILES.
+        (unwind-protect
+            (progn
+              (with-temp-file cached
+                (vc-git-command t 0 files "diff" "--cached" "--"))
+              (let* ((index (make-nearby-temp-file "git-index"))
+                     (process-environment
+                      (cons (format "GIT_INDEX_FILE=%s" index)
+                            process-environment)))
+                (unwind-protect
+                    (progn
+                      (vc-git-command nil 0 nil "read-tree" "HEAD")
+                      (vc-git-command nil 0 cached "apply" "--cached")
+                      (setq tree (git-string "write-tree")))
+                  (delete-file index))))
+          (delete-file cached))
+        ;; Prepare stash commit object, which has a special structure.
+        (let* ((tree-commit (git-string "commit-tree" "-m" message
+                                        "-p" "HEAD" tree))
+               (stash-commit (git-string "commit-tree" "-m" message
+                                         "-p" "HEAD" "-p" tree-commit
+                                         tree)))
+          ;; Push the new stash entry.
+          (vc-git-command nil 0 nil "update-ref" "--create-reflog"
+                          "-m" message "refs/stash" stash-commit)
+          ;; Unstage the changes we've now stashed.
+          (vc-git-command nil 0 files "reset" "--"))))))
 
 (defun vc-git-find-revision (file rev buffer)
   (let* (process-file-side-effects
@@ -1208,8 +1332,7 @@ This prompts for a branch to merge from."
          (completing-read "Merge from branch: "
                           (if (or (member "FETCH_HEAD" branches)
                                   (not (file-readable-p
-                                        (expand-file-name ".git/FETCH_HEAD"
-                                                          root))))
+                                         (vc-git--git-path "FETCH_HEAD"))))
                               branches
                             (cons "FETCH_HEAD" branches))
                           nil t)))
@@ -1254,8 +1377,7 @@ This prompts for a branch to merge from."
       (unless (or
                (not (eq vc-git-resolve-conflicts 'unstage-maybe))
                ;; Doing a merge, so bug#20292 doesn't apply.
-               (file-exists-p (expand-file-name ".git/MERGE_HEAD"
-                                                (vc-git-root 
buffer-file-name)))
+               (file-exists-p (vc-git--git-path "MERGE_HEAD"))
                (vc-git-conflicted-files (vc-git-root buffer-file-name)))
         (vc-git-command nil 0 nil "reset"))
       (vc-resynch-buffer buffer-file-name t t)
@@ -1297,8 +1419,6 @@ This prompts for a branch to merge from."
   :type 'boolean
   :version "26.1")
 
-(autoload 'vc-switches "vc")
-
 (defun vc-git-print-log (files buffer &optional shortlog start-revision limit)
   "Print commit log associated with FILES into specified BUFFER.
 If SHORTLOG is non-nil, use a short format based on `vc-git-root-log-format'.
diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index 90903255e02..5bab9aa529e 100644
--- a/lisp/vc/vc-hg.el
+++ b/lisp/vc/vc-hg.el
@@ -1,6 +1,6 @@
 ;;; vc-hg.el --- VC backend for the mercurial version control system  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; Author: Ivan Kanis
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el
index 6ad26cfe674..e242d1e48e2 100644
--- a/lisp/vc/vc-hooks.el
+++ b/lisp/vc/vc-hooks.el
@@ -1,6 +1,6 @@
 ;;; vc-hooks.el --- resident support for version-control  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1992-1996, 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1996, 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: FSF (see vc.el for full credits)
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el
index bf1d847f1a4..c2112b76ad3 100644
--- a/lisp/vc/vc-rcs.el
+++ b/lisp/vc/vc-rcs.el
@@ -1,6 +1,6 @@
 ;;; vc-rcs.el --- support for RCS version-control  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: FSF (see vc.el for full credits)
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el
index 9622bf5e097..03e9d12b76f 100644
--- a/lisp/vc/vc-sccs.el
+++ b/lisp/vc/vc-sccs.el
@@ -1,6 +1,6 @@
 ;;; vc-sccs.el --- support for SCCS version-control  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: FSF (see vc.el for full credits)
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/vc/vc-src.el b/lisp/vc/vc-src.el
index 432448bde58..69903e8e681 100644
--- a/lisp/vc/vc-src.el
+++ b/lisp/vc/vc-src.el
@@ -1,6 +1,6 @@
 ;;; vc-src.el --- support for SRC version-control  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2023 Free Software Foundation, Inc.
 
 ;; Author: FSF (see vc.el for full credits)
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el
index 1b43ca57872..6c93c8b3cab 100644
--- a/lisp/vc/vc-svn.el
+++ b/lisp/vc/vc-svn.el
@@ -1,6 +1,6 @@
 ;;; vc-svn.el --- non-resident support for Subversion version-control  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author:      FSF (see vc.el for full credits)
 ;; Maintainer:  Stefan Monnier <monnier@gnu.org>
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index 130214b840a..13124509c27 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -1,6 +1,6 @@
 ;;; vc.el --- drive a version-control system from within Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1992-1998, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1998, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: FSF (see below for full credits)
 ;; Maintainer: emacs-devel@gnu.org
@@ -3630,7 +3630,7 @@ it indicates a specific revision to check out."
   "Default `last-change' implementation.
 It returns the last revision that changed LINE number in FILE."
   (unless (file-exists-p file)
-    (signal 'file-error "File doesn't exist"))
+    (signal 'file-error '("File doesn't exist")))
   (with-temp-buffer
     (vc-call-backend (vc-backend file) 'annotate-command
                      file (current-buffer))
diff --git a/lisp/vcursor.el b/lisp/vcursor.el
index 896df919835..48fa1160deb 100644
--- a/lisp/vcursor.el
+++ b/lisp/vcursor.el
@@ -1,6 +1,6 @@
 ;;; vcursor.el --- manipulate an alternative ("virtual") cursor  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2023 Free Software Foundation, Inc.
 
 ;; Author: Peter Stephenson <pws@ibmth.df.unipi.it>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/version.el b/lisp/version.el
index 7e360209d85..9cadc59237f 100644
--- a/lisp/version.el
+++ b/lisp/version.el
@@ -1,6 +1,6 @@
 ;;; version.el --- record version number of Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1985, 1992, 1994-1995, 1999-2022 Free Software
+;; Copyright (C) 1985, 1992, 1994-1995, 1999-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/view.el b/lisp/view.el
index d9b1a2d0e7d..8760b91d06c 100644
--- a/lisp/view.el
+++ b/lisp/view.el
@@ -1,6 +1,6 @@
 ;;; view.el --- peruse file or buffer without editing  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/w32-fns.el b/lisp/w32-fns.el
index 85e37ec609a..bb19706129e 100644
--- a/lisp/w32-fns.el
+++ b/lisp/w32-fns.el
@@ -1,6 +1,6 @@
 ;;; w32-fns.el --- Lisp routines for 32-bit Windows  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Geoff Voelker <voelker@cs.washington.edu>
 ;; Keywords: internal
diff --git a/lisp/w32-vars.el b/lisp/w32-vars.el
index 9be34c0dc0b..a3deab9bc3a 100644
--- a/lisp/w32-vars.el
+++ b/lisp/w32-vars.el
@@ -1,6 +1,6 @@
 ;;; w32-vars.el --- MS-Windows specific user options  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; Author: Jason Rumney <jasonr@gnu.org>
 ;; Keywords: internal
diff --git a/lisp/wdired.el b/lisp/wdired.el
index 6904bac4d0e..771458508e6 100644
--- a/lisp/wdired.el
+++ b/lisp/wdired.el
@@ -1,6 +1,6 @@
 ;;; wdired.el --- Rename files editing their names in dired buffers -*- 
coding: utf-8; lexical-binding: t; -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Filename: wdired.el
 ;; Author: Juan León Lahoz García <juanleon1@gmail.com>
diff --git a/lisp/whitespace.el b/lisp/whitespace.el
index 25ea07e9db7..86fc179396e 100644
--- a/lisp/whitespace.el
+++ b/lisp/whitespace.el
@@ -1,6 +1,6 @@
 ;;; whitespace.el --- minor mode to visualize TAB, (HARD) SPACE, NEWLINE -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: data, wp
@@ -1014,34 +1014,11 @@ See also `whitespace-newline' and 
`whitespace-display-mappings'."
 
 
 ;;;###autoload
-(define-minor-mode global-whitespace-mode
-  "Toggle whitespace visualization globally (Global Whitespace mode).
-
-See also `whitespace-style', `whitespace-newline' and
-`whitespace-display-mappings'."
-  :lighter    " WS"
+(define-globalized-minor-mode global-whitespace-mode
+  whitespace-mode
+  whitespace-turn-on-if-enabled
   :init-value nil
-  :global     t
-  :group      'whitespace
-  (cond
-   (noninteractive                     ; running a batch job
-    (setq global-whitespace-mode nil))
-   (global-whitespace-mode             ; global-whitespace-mode on
-    (save-current-buffer
-      (add-hook 'find-file-hook 'whitespace-turn-on-if-enabled)
-      (add-hook 'after-change-major-mode-hook 'whitespace-turn-on-if-enabled)
-      (dolist (buffer (buffer-list))   ; adjust all local mode
-       (set-buffer buffer)
-       (unless whitespace-mode
-         (whitespace-turn-on-if-enabled)))))
-   (t                                  ; global-whitespace-mode off
-    (save-current-buffer
-      (remove-hook 'find-file-hook 'whitespace-turn-on-if-enabled)
-      (remove-hook 'after-change-major-mode-hook 
'whitespace-turn-on-if-enabled)
-      (dolist (buffer (buffer-list))   ; adjust all local mode
-       (set-buffer buffer)
-       (unless whitespace-mode
-         (whitespace-turn-off)))))))
+  :group 'whitespace)
 
 (defvar whitespace-enable-predicate
   (lambda ()
@@ -1067,7 +1044,7 @@ This variable is normally modified via `add-function'.")
 
 (defun whitespace-turn-on-if-enabled ()
   (when (funcall whitespace-enable-predicate)
-    (whitespace-turn-on)))
+    (whitespace-mode)))
 
 ;;;###autoload
 (define-minor-mode global-whitespace-newline-mode
@@ -2093,6 +2070,17 @@ resultant list will be returned."
        t))
 
 
+(defun whitespace--clone ()
+  "Hook function run after `make-indirect-buffer' and `clone-buffer'."
+  (when (whitespace-style-face-p)
+    (setq-local whitespace-bob-marker
+                (copy-marker (marker-position whitespace-bob-marker)
+                             (marker-insertion-type whitespace-bob-marker)))
+    (setq-local whitespace-eob-marker
+                (copy-marker (marker-position whitespace-eob-marker)
+                             (marker-insertion-type whitespace-eob-marker)))))
+
+
 (defun whitespace-color-on ()
   "Turn on color visualization."
   (when (whitespace-style-face-p)
@@ -2111,6 +2099,8 @@ resultant list will be returned."
               ;; The -1 ensures that it runs before any
               ;; `font-lock-mode' hook functions.
               -1 t)
+    (add-hook 'clone-buffer-hook #'whitespace--clone nil t)
+    (add-hook 'clone-indirect-buffer-hook #'whitespace--clone nil t)
     ;; Add whitespace-mode color into font lock.
     (setq
      whitespace-font-lock-keywords
@@ -2204,6 +2194,8 @@ resultant list will be returned."
     (remove-hook 'before-change-functions #'whitespace-buffer-changed t)
     (remove-hook 'after-change-functions #'whitespace--update-bob-eob
                  t)
+    (remove-hook 'clone-buffer-hook #'whitespace--clone t)
+    (remove-hook 'clone-indirect-buffer-hook #'whitespace--clone t)
     (font-lock-remove-keywords nil whitespace-font-lock-keywords)
     (font-lock-flush)))
 
@@ -2268,10 +2260,11 @@ Highlighting those lines can be distracting.)"
                 (save-excursion (goto-char whitespace-point)
                                 (line-beginning-position)))))
     (when (= p 1)
-      ;; See the comment in `whitespace--update-bob-eob' for why this
-      ;; text property is added here.
-      (put-text-property 1 whitespace-bob-marker
-                         'font-lock-multiline t))
+      (with-silent-modifications
+        ;; See the comment in `whitespace--update-bob-eob' for why
+        ;; this text property is added here.
+        (put-text-property 1 whitespace-bob-marker
+                           'font-lock-multiline t)))
     (when (< p e)
       (set-match-data (list p e))
       (goto-char e))))
@@ -2292,10 +2285,11 @@ about to start typing, and if they do, that line and 
previous
 empty lines will no longer be EoB empty lines.  Highlighting
 those lines can be distracting.)"
   (when (= limit (1+ (buffer-size)))
-    ;; See the comment in `whitespace--update-bob-eob' for why this
-    ;; text property is added here.
-    (put-text-property whitespace-eob-marker limit
-                       'font-lock-multiline t))
+    (with-silent-modifications
+      ;; See the comment in `whitespace--update-bob-eob' for why this
+      ;; text property is added here.
+      (put-text-property whitespace-eob-marker limit
+                         'font-lock-multiline t)))
   (let ((b (max (point) whitespace-eob-marker
                 whitespace-bob-marker ; See comment in the bob func.
                 (save-excursion (goto-char whitespace-point)
@@ -2437,8 +2431,9 @@ purposes)."
             (save-match-data
               (when (looking-at whitespace-empty-at-bob-regexp)
                 (set-marker whitespace-bob-marker (match-end 1))
-                (put-text-property (match-beginning 1) (match-end 1)
-                                   'font-lock-multiline t))))
+                (with-silent-modifications
+                  (put-text-property (match-beginning 1) (match-end 1)
+                                     'font-lock-multiline t)))))
           (when (or (null end)
                     (>= end (save-excursion
                               (goto-char whitespace-eob-marker)
@@ -2451,8 +2446,9 @@ purposes)."
               (when (whitespace--looking-back
                      whitespace-empty-at-eob-regexp)
                 (set-marker whitespace-eob-marker (match-beginning 1))
-                (put-text-property (match-beginning 1) (match-end 1)
-                                   'font-lock-multiline t)))))))))
+                (with-silent-modifications
+                  (put-text-property (match-beginning 1) (match-end 1)
+                                     'font-lock-multiline t))))))))))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -2492,7 +2488,7 @@ purposes)."
        (setq whitespace-display-table-was-local t)
         ;; Save the old table so we can restore it when
         ;; `whitespace-mode' is switched off again.
-        (when (or whitespace-mode global-whitespace-mode)
+        (when whitespace-mode
          (setq whitespace-display-table
                (copy-sequence buffer-display-table)))
        ;; Assure `buffer-display-table' is unique
diff --git a/lisp/wid-browse.el b/lisp/wid-browse.el
index a90f7bc160b..9578531fcc3 100644
--- a/lisp/wid-browse.el
+++ b/lisp/wid-browse.el
@@ -1,6 +1,6 @@
 ;;; wid-browse.el --- functions for browsing widgets  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2023 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: extensions
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index cc7926c3c50..798db9f9dd2 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -1,6 +1,6 @@
 ;;; wid-edit.el --- Functions for creating and using widgets -*- 
lexical-binding:t -*-
 ;;
-;; Copyright (C) 1996-1997, 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 1999-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/widget.el b/lisp/widget.el
index e6a856b2927..0d4396ad1c1 100644
--- a/lisp/widget.el
+++ b/lisp/widget.el
@@ -1,6 +1,6 @@
 ;;; widget.el --- a library of user interface components  -*- lexical-binding: 
t; -*-
 ;;
-;; Copyright (C) 1996-1997, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2023 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, extensions, faces, hypermedia
diff --git a/lisp/windmove.el b/lisp/windmove.el
index 4311f082de6..06ce16c0d42 100644
--- a/lisp/windmove.el
+++ b/lisp/windmove.el
@@ -1,6 +1,6 @@
 ;;; windmove.el --- directional window-selection routines  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
 ;; Author: Hovav Shacham <hovav@cs.stanford.edu>
 ;; Created: 17 October 1998
diff --git a/lisp/window.el b/lisp/window.el
index a4a84218818..4099b707009 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -1,6 +1,6 @@
 ;;; window.el --- GNU Emacs window commands aside from those written in C  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1985-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
@@ -10561,26 +10561,23 @@ displaying that processes's buffer."
 (defvar-keymap other-window-repeat-map
   :doc "Keymap to repeat `other-window' key sequences.
 Used in `repeat-mode'."
+  :repeat t
   "o" #'other-window
   "O" (lambda ()
         (interactive)
         (setq repeat-map 'other-window-repeat-map)
         (other-window -1)))
-(put 'other-window 'repeat-map 'other-window-repeat-map)
 
 (defvar-keymap resize-window-repeat-map
   :doc "Keymap to repeat window resizing commands.
 Used in `repeat-mode'."
+  :repeat t
   ;; Standard keys:
   "^" #'enlarge-window
   "}" #'enlarge-window-horizontally
   "{" #'shrink-window-horizontally
   ;; Additional keys:
   "v" #'shrink-window)
-(put 'enlarge-window 'repeat-map 'resize-window-repeat-map)
-(put 'enlarge-window-horizontally 'repeat-map 'resize-window-repeat-map)
-(put 'shrink-window-horizontally 'repeat-map 'resize-window-repeat-map)
-(put 'shrink-window 'repeat-map 'resize-window-repeat-map)
 
 (defvar-keymap window-prefix-map
   :doc "Keymap for subcommands of \\`C-x w'."
diff --git a/lisp/winner.el b/lisp/winner.el
index c8354b18bec..84a7b0ce903 100644
--- a/lisp/winner.el
+++ b/lisp/winner.el
@@ -1,6 +1,6 @@
 ;;; winner.el --- Restore old window configurations  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2023 Free Software Foundation, Inc.
 
 ;; Author: Ivar Rummelhoff <ivarru@math.uio.no>
 ;; Created: 27 Feb 1997
@@ -330,12 +330,10 @@ You may want to include buffer names such as *Help*, 
*Apropos*,
 
 (defvar-keymap winner-repeat-map
   :doc "Keymap to repeat winner key sequences.  Used in `repeat-mode'."
+  :repeat t
   "<left>"  #'winner-undo
   "<right>" #'winner-redo)
 
-(put #'winner-undo 'repeat-map 'winner-repeat-map)
-(put #'winner-redo 'repeat-map 'winner-repeat-map)
-
 
 ;;;###autoload
 (define-minor-mode winner-mode
diff --git a/lisp/woman.el b/lisp/woman.el
index 2b456fed3cb..dfb5e69778f 100644
--- a/lisp/woman.el
+++ b/lisp/woman.el
@@ -1,6 +1,6 @@
 ;;; woman.el --- browse UN*X manual pages `wo (without) man'  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Francis J. Wright <F.J.Wright@qmul.ac.uk>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/x-dnd.el b/lisp/x-dnd.el
index b3465e757a9..b213b155249 100644
--- a/lisp/x-dnd.el
+++ b/lisp/x-dnd.el
@@ -1,6 +1,6 @@
 ;;; x-dnd.el --- drag and drop support for X  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 ;; Author: Jan Djärv <jan.h.d@swipnet.se>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/xdg.el b/lisp/xdg.el
index 82f1f07df54..43b29578976 100644
--- a/lisp/xdg.el
+++ b/lisp/xdg.el
@@ -1,6 +1,6 @@
 ;;; xdg.el --- XDG specification and standard support -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Mark Oteiza <mvoteiza@udel.edu>
 ;; Created: 27 January 2017
diff --git a/lisp/xml.el b/lisp/xml.el
index 9c9f1d9b172..58d17a4b340 100644
--- a/lisp/xml.el
+++ b/lisp/xml.el
@@ -1,6 +1,6 @@
 ;;; xml.el --- XML parser -*- lexical-binding: t -*-
 
-;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Emmanuel Briot <briot@gnat.com>
 ;; Maintainer: Mark A. Hershberger <mah@everybody.org>
diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el
index 313665f6bf3..adfa480bc0f 100644
--- a/lisp/xt-mouse.el
+++ b/lisp/xt-mouse.el
@@ -1,6 +1,6 @@
 ;;; xt-mouse.el --- support the mouse when emacs run in an xterm -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1994, 2000-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2000-2023 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: mouse, terminals
diff --git a/lisp/xwidget.el b/lisp/xwidget.el
index 7195ba9d894..abbda29081e 100644
--- a/lisp/xwidget.el
+++ b/lisp/xwidget.el
@@ -1,6 +1,6 @@
 ;;; xwidget.el --- api functions for xwidgets  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Joakim Verona <joakim@verona.se>
 
diff --git a/lisp/yank-media.el b/lisp/yank-media.el
index 5cd75eb3186..3e33c1f9994 100644
--- a/lisp/yank-media.el
+++ b/lisp/yank-media.el
@@ -1,6 +1,6 @@
 ;;; yank-media.el --- Yanking images and HTML  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: utility
diff --git a/lwlib/ChangeLog.1 b/lwlib/ChangeLog.1
index 4dac7763b92..460e73f4dcc 100644
--- a/lwlib/ChangeLog.1
+++ b/lwlib/ChangeLog.1
@@ -1964,7 +1964,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1995-1999, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1995-1999, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lwlib/Makefile.in b/lwlib/Makefile.in
index d58c7bf6ac5..903461a2f4a 100644
--- a/lwlib/Makefile.in
+++ b/lwlib/Makefile.in
@@ -1,7 +1,7 @@
 ### @configure_input@
 
 # Copyright (C) 1992, 1993 Lucid, Inc.
-# Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 #
 # This file is part of the Lucid Widget Library.
 #
diff --git a/lwlib/deps.mk b/lwlib/deps.mk
index 6a7eb1e0cab..d55374d3023 100644
--- a/lwlib/deps.mk
+++ b/lwlib/deps.mk
@@ -1,7 +1,7 @@
 ### deps.mk --- lwlib/Makefile fragment for GNU Emacs
 
 # Copyright (C) 1992, 1993 Lucid, Inc.
-# Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 #
 # This file is part of the Lucid Widget Library.
 #
diff --git a/lwlib/lwlib-Xaw.c b/lwlib/lwlib-Xaw.c
index b09795ec38c..f23576162c6 100644
--- a/lwlib/lwlib-Xaw.c
+++ b/lwlib/lwlib-Xaw.c
@@ -1,7 +1,7 @@
 /* The lwlib interface to Athena widgets.
 
 Copyright (C) 1993 Chuck Thompson <cthomp@cs.uiuc.edu>
-Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/lwlib-Xlw.c b/lwlib/lwlib-Xlw.c
index e3b596369eb..03f5809ca37 100644
--- a/lwlib/lwlib-Xlw.c
+++ b/lwlib/lwlib-Xlw.c
@@ -1,7 +1,7 @@
 /* The lwlib interface to "xlwmenu" menus.
 
 Copyright (C) 1992 Lucid, Inc.
-Copyright (C) 1994, 2000-2022 Free Software Foundation, Inc.
+Copyright (C) 1994, 2000-2023 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/lwlib-Xm.c b/lwlib/lwlib-Xm.c
index 52ea304f717..451b9a38746 100644
--- a/lwlib/lwlib-Xm.c
+++ b/lwlib/lwlib-Xm.c
@@ -1,6 +1,6 @@
 /* The lwlib interface to Motif widgets.
 
-Copyright (C) 1994-1997, 1999-2022 Free Software Foundation, Inc.
+Copyright (C) 1994-1997, 1999-2023 Free Software Foundation, Inc.
 Copyright (C) 1992 Lucid, Inc.
 
 This file is part of the Lucid Widget Library.
diff --git a/lwlib/lwlib-int.h b/lwlib/lwlib-int.h
index 100e2ece698..09f674f75a8 100644
--- a/lwlib/lwlib-int.h
+++ b/lwlib/lwlib-int.h
@@ -1,6 +1,6 @@
 /*
 Copyright (C) 1992 Lucid, Inc.
-Copyright (C) 2000-2022 Free Software Foundation, Inc.
+Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/lwlib-utils.c b/lwlib/lwlib-utils.c
index ff86886c955..f7606fa0361 100644
--- a/lwlib/lwlib-utils.c
+++ b/lwlib/lwlib-utils.c
@@ -1,7 +1,7 @@
 /* Defines some widget utility functions.
 
 Copyright (C) 1992 Lucid, Inc.
-Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/lwlib-widget.h b/lwlib/lwlib-widget.h
index 5226db5f63f..7c8af4286c1 100644
--- a/lwlib/lwlib-widget.h
+++ b/lwlib/lwlib-widget.h
@@ -1,6 +1,6 @@
 /*
 Copyright (C) 1992, 1993 Lucid, Inc.
-Copyright (C) 1994, 1999-2022 Free Software Foundation, Inc.
+Copyright (C) 1994, 1999-2023 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/lwlib.c b/lwlib/lwlib.c
index 863f65c915f..cf519de8968 100644
--- a/lwlib/lwlib.c
+++ b/lwlib/lwlib.c
@@ -1,7 +1,7 @@
 /* A general interface to the widgets of different toolkits.
 
 Copyright (C) 1992, 1993 Lucid, Inc.
-Copyright (C) 1994-1996, 1999-2022 Free Software Foundation, Inc.
+Copyright (C) 1994-1996, 1999-2023 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/lwlib.h b/lwlib/lwlib.h
index 86b1c60a5de..341d0a75428 100644
--- a/lwlib/lwlib.h
+++ b/lwlib/lwlib.h
@@ -1,6 +1,6 @@
 /*
 Copyright (C) 1992, 1993 Lucid, Inc.
-Copyright (C) 1994, 1999-2022 Free Software Foundation, Inc.
+Copyright (C) 1994, 1999-2023 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/xlwmenu.c b/lwlib/xlwmenu.c
index deea50c8107..84d41bd8e01 100644
--- a/lwlib/xlwmenu.c
+++ b/lwlib/xlwmenu.c
@@ -1,7 +1,7 @@
 /* Implements a lightweight menubar widget.
 
 Copyright (C) 1992 Lucid, Inc.
-Copyright (C) 1994-1995, 1997, 1999-2022 Free Software Foundation, Inc.
+Copyright (C) 1994-1995, 1997, 1999-2023 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/xlwmenu.h b/lwlib/xlwmenu.h
index 4e36bde3fb9..6b59b945ce3 100644
--- a/lwlib/xlwmenu.h
+++ b/lwlib/xlwmenu.h
@@ -1,6 +1,6 @@
 /* Interface of a lightweight menubar widget.
 
-Copyright (C) 2002-2022 Free Software Foundation, Inc.
+Copyright (C) 2002-2023 Free Software Foundation, Inc.
 Copyright (C) 1992 Lucid, Inc.
 
 This file is part of the Lucid Widget Library.
diff --git a/lwlib/xlwmenuP.h b/lwlib/xlwmenuP.h
index c314eb3e910..a05d202fb7f 100644
--- a/lwlib/xlwmenuP.h
+++ b/lwlib/xlwmenuP.h
@@ -1,6 +1,6 @@
 /* Internals of a lightweight menubar widget.
 
-Copyright (C) 2002-2022 Free Software Foundation, Inc.
+Copyright (C) 2002-2023 Free Software Foundation, Inc.
 Copyright (C) 1992 Lucid, Inc.
 
 This file is part of the Lucid Widget Library.
diff --git a/m4/00gnulib.m4 b/m4/00gnulib.m4
index dea34e8341d..7fe03e0b9c0 100644
--- a/m4/00gnulib.m4
+++ b/m4/00gnulib.m4
@@ -1,5 +1,5 @@
 # 00gnulib.m4 serial 8
-dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/__inline.m4 b/m4/__inline.m4
index fbe2098e86a..acf8668bc58 100644
--- a/m4/__inline.m4
+++ b/m4/__inline.m4
@@ -1,5 +1,5 @@
 # Test for __inline keyword
-dnl Copyright 2017-2022 Free Software Foundation, Inc.
+dnl Copyright 2017-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/absolute-header.m4 b/m4/absolute-header.m4
index 67d6507c3e6..e7947648881 100644
--- a/m4/absolute-header.m4
+++ b/m4/absolute-header.m4
@@ -1,5 +1,5 @@
 # absolute-header.m4 serial 17
-dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/acl.m4 b/m4/acl.m4
index 8909442d7f0..98362858ce5 100644
--- a/m4/acl.m4
+++ b/m4/acl.m4
@@ -1,7 +1,7 @@
 # acl.m4 - check for access control list (ACL) primitives
 # serial 24
 
-# Copyright (C) 2002, 2004-2022 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2004-2023 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/alloca.m4 b/m4/alloca.m4
index dc6f47e3306..75851875910 100644
--- a/m4/alloca.m4
+++ b/m4/alloca.m4
@@ -1,6 +1,6 @@
 # alloca.m4 serial 21
-dnl Copyright (C) 2002-2004, 2006-2007, 2009-2022 Free Software Foundation,
-dnl Inc.
+dnl Copyright (C) 2002-2004, 2006-2007, 2009-2023 Free Software
+dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/assert_h.m4 b/m4/assert_h.m4
index e892ea2f01b..6275f633a69 100644
--- a/m4/assert_h.m4
+++ b/m4/assert_h.m4
@@ -1,5 +1,5 @@
 # assert-h.m4
-dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/builtin-expect.m4 b/m4/builtin-expect.m4
index b1fb12a3fbd..531ed48af7f 100644
--- a/m4/builtin-expect.m4
+++ b/m4/builtin-expect.m4
@@ -1,6 +1,6 @@
 dnl Check for __builtin_expect.
 
-dnl Copyright 2016-2022 Free Software Foundation, Inc.
+dnl Copyright 2016-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/byteswap.m4 b/m4/byteswap.m4
index 99aeb687276..8058d178bce 100644
--- a/m4/byteswap.m4
+++ b/m4/byteswap.m4
@@ -1,5 +1,5 @@
 # byteswap.m4 serial 5
-dnl Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/c-bool.m4 b/m4/c-bool.m4
index bb109b77968..f614371bb28 100644
--- a/m4/c-bool.m4
+++ b/m4/c-bool.m4
@@ -1,6 +1,6 @@
 # Check for bool that conforms to C2023.
 
-dnl Copyright 2022 Free Software Foundation, Inc.
+dnl Copyright 2022-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/canonicalize.m4 b/m4/canonicalize.m4
index b55d5c06e26..03cb0aec93f 100644
--- a/m4/canonicalize.m4
+++ b/m4/canonicalize.m4
@@ -1,6 +1,6 @@
 # canonicalize.m4 serial 37
 
-dnl Copyright (C) 2003-2007, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2007, 2009-2023 Free Software Foundation, Inc.
 
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
diff --git a/m4/clock_time.m4 b/m4/clock_time.m4
index 22535533135..411e0710e7f 100644
--- a/m4/clock_time.m4
+++ b/m4/clock_time.m4
@@ -1,5 +1,5 @@
 # clock_time.m4 serial 11
-dnl Copyright (C) 2002-2006, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/copy-file-range.m4 b/m4/copy-file-range.m4
index 1b8b9d88589..d41f2c48313 100644
--- a/m4/copy-file-range.m4
+++ b/m4/copy-file-range.m4
@@ -1,5 +1,5 @@
 # copy-file-range.m4
-dnl Copyright 2019-2022 Free Software Foundation, Inc.
+dnl Copyright 2019-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/d-type.m4 b/m4/d-type.m4
index b8858b19180..05eb8ac0cfa 100644
--- a/m4/d-type.m4
+++ b/m4/d-type.m4
@@ -5,7 +5,8 @@ dnl
 dnl Check whether struct dirent has a member named d_type.
 dnl
 
-# Copyright (C) 1997, 1999-2004, 2006, 2009-2022 Free Software Foundation, Inc.
+# Copyright (C) 1997, 1999-2004, 2006, 2009-2023 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/dirent_h.m4 b/m4/dirent_h.m4
index ddaca1680de..2a232a7622e 100644
--- a/m4/dirent_h.m4
+++ b/m4/dirent_h.m4
@@ -1,5 +1,5 @@
 # dirent_h.m4 serial 19
-dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/dirfd.m4 b/m4/dirfd.m4
index 92001700ef1..2135535042b 100644
--- a/m4/dirfd.m4
+++ b/m4/dirfd.m4
@@ -2,7 +2,7 @@
 
 dnl Find out how to get the file descriptor associated with an open DIR*.
 
-# Copyright (C) 2001-2006, 2008-2022 Free Software Foundation, Inc.
+# Copyright (C) 2001-2006, 2008-2023 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/double-slash-root.m4 b/m4/double-slash-root.m4
index 09ff5f0d17a..1776e5eb75d 100644
--- a/m4/double-slash-root.m4
+++ b/m4/double-slash-root.m4
@@ -1,5 +1,5 @@
 # double-slash-root.m4 serial 4   -*- Autoconf -*-
-dnl Copyright (C) 2006, 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2006, 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/dup2.m4 b/m4/dup2.m4
index 7e777cdee6a..8a040d4c369 100644
--- a/m4/dup2.m4
+++ b/m4/dup2.m4
@@ -1,5 +1,6 @@
 #serial 27
-dnl Copyright (C) 2002, 2005, 2007, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005, 2007, 2009-2023 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/eealloc.m4 b/m4/eealloc.m4
index a6aa2f88d0c..cb3e08fe53a 100644
--- a/m4/eealloc.m4
+++ b/m4/eealloc.m4
@@ -1,5 +1,5 @@
 # eealloc.m4 serial 3
-dnl Copyright (C) 2003, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/environ.m4 b/m4/environ.m4
index 583dac39326..741dfc56a1e 100644
--- a/m4/environ.m4
+++ b/m4/environ.m4
@@ -1,5 +1,5 @@
 # environ.m4 serial 8
-dnl Copyright (C) 2001-2004, 2006-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2004, 2006-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/errno_h.m4 b/m4/errno_h.m4
index 4be9780a7e4..4c70d225289 100644
--- a/m4/errno_h.m4
+++ b/m4/errno_h.m4
@@ -1,5 +1,5 @@
 # errno_h.m4 serial 14
-dnl Copyright (C) 2004, 2006, 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2004, 2006, 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/euidaccess.m4 b/m4/euidaccess.m4
index 04f66f9d5db..0dc757820ee 100644
--- a/m4/euidaccess.m4
+++ b/m4/euidaccess.m4
@@ -1,5 +1,5 @@
 # euidaccess.m4 serial 15
-dnl Copyright (C) 2002-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/execinfo.m4 b/m4/execinfo.m4
index b370e4dfdf8..269e697a45a 100644
--- a/m4/execinfo.m4
+++ b/m4/execinfo.m4
@@ -1,6 +1,6 @@
 # Check for GNU-style execinfo.h.
 
-dnl Copyright 2012-2022 Free Software Foundation, Inc.
+dnl Copyright 2012-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/explicit_bzero.m4 b/m4/explicit_bzero.m4
new file mode 100644
index 00000000000..aa74bea3d26
--- /dev/null
+++ b/m4/explicit_bzero.m4
@@ -0,0 +1,23 @@
+dnl Copyright 2017-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_EXPLICIT_BZERO],
+[
+  AC_REQUIRE([gl_STRING_H_DEFAULTS])
+
+  dnl Persuade glibc <string.h> to declare explicit_bzero.
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  AC_CHECK_FUNCS_ONCE([explicit_bzero])
+  if test $ac_cv_func_explicit_bzero = no; then
+    HAVE_EXPLICIT_BZERO=0
+  fi
+])
+
+AC_DEFUN([gl_PREREQ_EXPLICIT_BZERO],
+[
+  AC_CHECK_FUNCS([explicit_memset])
+  AC_CHECK_FUNCS_ONCE([memset_s])
+])
diff --git a/m4/extensions.m4 b/m4/extensions.m4
index 0b3e4b5af7e..6596e7efc06 100644
--- a/m4/extensions.m4
+++ b/m4/extensions.m4
@@ -1,7 +1,7 @@
 # serial 22  -*- Autoconf -*-
 # Enable extensions on systems that normally disable them.
 
-# Copyright (C) 2003, 2006-2022 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2006-2023 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/extern-inline.m4 b/m4/extern-inline.m4
index 8a12bddd571..c001b1cff7d 100644
--- a/m4/extern-inline.m4
+++ b/m4/extern-inline.m4
@@ -1,6 +1,6 @@
 dnl 'extern inline' a la ISO C99.
 
-dnl Copyright 2012-2022 Free Software Foundation, Inc.
+dnl Copyright 2012-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/faccessat.m4 b/m4/faccessat.m4
index 0ba5b3b687b..934c1f41546 100644
--- a/m4/faccessat.m4
+++ b/m4/faccessat.m4
@@ -1,7 +1,7 @@
 # serial 10
 # See if we need to provide faccessat replacement.
 
-dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/fchmodat.m4 b/m4/fchmodat.m4
index f743ce1b025..7a3ee863e3c 100644
--- a/m4/fchmodat.m4
+++ b/m4/fchmodat.m4
@@ -1,5 +1,5 @@
 # fchmodat.m4 serial 7
-dnl Copyright (C) 2004-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/fcntl.m4 b/m4/fcntl.m4
index 428e5709d30..524a99af80a 100644
--- a/m4/fcntl.m4
+++ b/m4/fcntl.m4
@@ -1,5 +1,5 @@
 # fcntl.m4 serial 11
-dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/fcntl_h.m4 b/m4/fcntl_h.m4
index 267f98bf52d..68f4e648021 100644
--- a/m4/fcntl_h.m4
+++ b/m4/fcntl_h.m4
@@ -1,6 +1,6 @@
 # serial 20
 # Configure fcntl.h.
-dnl Copyright (C) 2006-2007, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/fdopendir.m4 b/m4/fdopendir.m4
index 30016084082..2c975397118 100644
--- a/m4/fdopendir.m4
+++ b/m4/fdopendir.m4
@@ -1,7 +1,7 @@
 # serial 14
 # See if we need to provide fdopendir.
 
-dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/filemode.m4 b/m4/filemode.m4
index 902c35e3594..2fcc69d119b 100644
--- a/m4/filemode.m4
+++ b/m4/filemode.m4
@@ -1,5 +1,6 @@
 # filemode.m4 serial 9
-dnl Copyright (C) 2002, 2005-2006, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2006, 2009-2023 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/flexmember.m4 b/m4/flexmember.m4
index 3b4237e9f79..13f7e870d31 100644
--- a/m4/flexmember.m4
+++ b/m4/flexmember.m4
@@ -1,7 +1,7 @@
 # serial 5
 # Check for flexible array member support.
 
-# Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2009-2023 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/fpending.m4 b/m4/fpending.m4
index de4eb7f9b32..6991f81066d 100644
--- a/m4/fpending.m4
+++ b/m4/fpending.m4
@@ -1,6 +1,6 @@
 # serial 23
 
-# Copyright (C) 2000-2001, 2004-2022 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2004-2023 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/fpieee.m4 b/m4/fpieee.m4
index c0c23e95650..706b33141d3 100644
--- a/m4/fpieee.m4
+++ b/m4/fpieee.m4
@@ -1,5 +1,5 @@
 # fpieee.m4 serial 2  -*- coding: utf-8 -*-
-dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/free.m4 b/m4/free.m4
index dfeecd2bf14..0389dea3f49 100644
--- a/m4/free.m4
+++ b/m4/free.m4
@@ -1,5 +1,5 @@
 # free.m4 serial 6
-# Copyright (C) 2003-2005, 2009-2022 Free Software Foundation, Inc.
+# Copyright (C) 2003-2005, 2009-2023 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/fstatat.m4 b/m4/fstatat.m4
index e8604a6ad3a..083076911ff 100644
--- a/m4/fstatat.m4
+++ b/m4/fstatat.m4
@@ -1,5 +1,5 @@
 # fstatat.m4 serial 4
-dnl Copyright (C) 2004-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/fsusage.m4 b/m4/fsusage.m4
index 06e608866bd..aeb3467a272 100644
--- a/m4/fsusage.m4
+++ b/m4/fsusage.m4
@@ -1,7 +1,8 @@
 # serial 35
 # Obtaining file system usage information.
 
-# Copyright (C) 1997-1998, 2000-2001, 2003-2022 Free Software Foundation, Inc.
+# Copyright (C) 1997-1998, 2000-2001, 2003-2023 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/fsync.m4 b/m4/fsync.m4
index cbf35fe310a..857e495506f 100644
--- a/m4/fsync.m4
+++ b/m4/fsync.m4
@@ -1,5 +1,5 @@
 # fsync.m4 serial 2
-dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/futimens.m4 b/m4/futimens.m4
index e3caa7d898a..3aaa10a0b52 100644
--- a/m4/futimens.m4
+++ b/m4/futimens.m4
@@ -1,7 +1,7 @@
 # serial 9
 # See if we need to provide futimens replacement.
 
-dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/getdtablesize.m4 b/m4/getdtablesize.m4
index 6134eaace01..8bcda9053b6 100644
--- a/m4/getdtablesize.m4
+++ b/m4/getdtablesize.m4
@@ -1,5 +1,5 @@
 # getdtablesize.m4 serial 8
-dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/getgroups.m4 b/m4/getgroups.m4
index d7a71f5ca6f..d5a18ea88b0 100644
--- a/m4/getgroups.m4
+++ b/m4/getgroups.m4
@@ -3,7 +3,8 @@
 dnl From Jim Meyering.
 dnl A wrapper around AC_FUNC_GETGROUPS.
 
-# Copyright (C) 1996-1997, 1999-2004, 2008-2022 Free Software Foundation, Inc.
+# Copyright (C) 1996-1997, 1999-2004, 2008-2023 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/getloadavg.m4 b/m4/getloadavg.m4
index 7bb8890bd56..7097e5dd512 100644
--- a/m4/getloadavg.m4
+++ b/m4/getloadavg.m4
@@ -1,7 +1,7 @@
 # Check for getloadavg.
 
-# Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2022 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2023 Free
+# Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/getopt.m4 b/m4/getopt.m4
index ff78ed535d8..7981a09552b 100644
--- a/m4/getopt.m4
+++ b/m4/getopt.m4
@@ -1,5 +1,5 @@
 # getopt.m4 serial 48
-dnl Copyright (C) 2002-2006, 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/getrandom.m4 b/m4/getrandom.m4
index 6ca715005db..95111567d79 100644
--- a/m4/getrandom.m4
+++ b/m4/getrandom.m4
@@ -1,5 +1,5 @@
 # getrandom.m4 serial 8
-dnl Copyright 2020-2022 Free Software Foundation, Inc.
+dnl Copyright 2020-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/gettime.m4 b/m4/gettime.m4
index c3e0713b575..39067be6fa8 100644
--- a/m4/gettime.m4
+++ b/m4/gettime.m4
@@ -1,5 +1,6 @@
 # gettime.m4 serial 12
-dnl Copyright (C) 2002, 2004-2006, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004-2006, 2009-2023 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/gettimeofday.m4 b/m4/gettimeofday.m4
index f729601b1d4..66231e0174f 100644
--- a/m4/gettimeofday.m4
+++ b/m4/gettimeofday.m4
@@ -1,6 +1,7 @@
 # serial 29
 
-# Copyright (C) 2001-2003, 2005, 2007, 2009-2022 Free Software Foundation, Inc.
+# Copyright (C) 2001-2003, 2005, 2007, 2009-2023 Free Software
+# Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/gnulib-common.m4 b/m4/gnulib-common.m4
index d17cbec58cb..138f498451d 100644
--- a/m4/gnulib-common.m4
+++ b/m4/gnulib-common.m4
@@ -1,5 +1,5 @@
 # gnulib-common.m4 serial 74
-dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -105,14 +105,10 @@ AC_DEFUN([gl_COMMON_BODY], [
 # define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4)
 #endif
 
-#ifdef __has_c_attribute
-# if ((defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) <= 201710 \
-      && _GL_GNUC_PREREQ (4, 6))
-#  pragma GCC diagnostic ignored "-Wpedantic"
-# endif
-# define _GL_HAS_C_ATTRIBUTE(attr) __has_c_attribute (__##attr##__)
-#else
-# define _GL_HAS_C_ATTRIBUTE(attr) 0
+/* Disable GCC -Wpedantic if using __has_c_attribute and this is not C23+.  */
+#if (defined __has_c_attribute && _GL_GNUC_PREREQ (4, 6) \
+     && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) <= 201710)
+# pragma GCC diagnostic ignored "-Wpedantic"
 #endif
 
 ]dnl There is no _GL_ATTRIBUTE_ALIGNED; use stdalign's alignas instead.
@@ -202,11 +198,15 @@ AC_DEFUN([gl_COMMON_BODY], [
      - enumeration, enumeration item,
      - typedef,
    in C++ also: namespace, class, template specialization.  */
-#if _GL_HAS_C_ATTRIBUTE (deprecated)
-# define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]]
-#elif _GL_HAS_ATTRIBUTE (deprecated)
+#ifdef __has_c_attribute
+# if __has_c_attribute (__deprecated__)
+#  define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]]
+# endif
+#endif
+#if !defined _GL_ATTRIBUTE_DEPRECATED && _GL_HAS_ATTRIBUTE (deprecated)
 # define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__))
-#else
+#endif
+#ifndef _GL_ATTRIBUTE_DEPRECATED
 # define _GL_ATTRIBUTE_DEPRECATED
 #endif
 
@@ -240,11 +240,15 @@ AC_DEFUN([gl_COMMON_BODY], [
    'default' label.  The compiler should not warn in this case.  */
 /* Applies to: Empty statement (;), inside a 'switch' statement.  */
 /* Always expands to something.  */
-#if _GL_HAS_C_ATTRIBUTE (fallthrough)
-# define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]]
-#elif _GL_HAS_ATTRIBUTE (fallthrough)
+#ifdef __has_c_attribute
+# if __has_c_attribute (__fallthrough__)
+#  define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]]
+# endif
+#endif
+#if !defined _GL_ATTRIBUTE_FALLTHROUGH && _GL_HAS_ATTRIBUTE (fallthrough)
 # define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__))
-#else
+#endif
+#ifndef _GL_ATTRIBUTE_FALLTHROUGH
 # define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0)
 #endif
 
@@ -308,9 +312,12 @@ AC_DEFUN([gl_COMMON_BODY], [
 /* In C++ and C2x, this is spelled [[__maybe_unused__]].
    GCC's syntax is __attribute__ ((__unused__)).
    clang supports both syntaxes.  */
-#if _GL_HAS_C_ATTRIBUTE (maybe_unused)
-# define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]]
-#else
+#ifdef __has_c_attribute
+# if __has_c_attribute (__maybe_unused__)
+#  define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]]
+# endif
+#endif
+#ifndef _GL_ATTRIBUTE_MAYBE_UNUSED
 # define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED
 #endif
 /* Alternative spelling of this macro, for convenience and for
@@ -323,11 +330,15 @@ AC_DEFUN([gl_COMMON_BODY], [
    discard the return value.  The compiler may warn if the caller does not use
    the return value, unless the caller uses something like ignore_value.  */
 /* Applies to: function, enumeration, class.  */
-#if _GL_HAS_C_ATTRIBUTE (nodiscard)
-# define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]]
-#elif _GL_HAS_ATTRIBUTE (warn_unused_result)
+#ifdef __has_c_attribute
+# if __has_c_attribute (__nodiscard__)
+#  define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]]
+# endif
+#endif
+#if !defined _GL_ATTRIBUTE_NODISCARD && _GL_HAS_ATTRIBUTE (warn_unused_result)
 # define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__))
-#else
+#endif
+#ifndef _GL_ATTRIBUTE_NODISCARD
 # define _GL_ATTRIBUTE_NODISCARD
 #endif
 
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4
index 9ba977711fa..6435bcd149c 100644
--- a/m4/gnulib-comp.m4
+++ b/m4/gnulib-comp.m4
@@ -1,5 +1,5 @@
 # DO NOT EDIT! GENERATED AUTOMATICALLY!
-# Copyright (C) 2002-2022 Free Software Foundation, Inc.
+# Copyright (C) 2002-2023 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/m4/group-member.m4 b/m4/group-member.m4
index f9bc38b629e..6e860c6189d 100644
--- a/m4/group-member.m4
+++ b/m4/group-member.m4
@@ -1,6 +1,7 @@
 # serial 14
 
-# Copyright (C) 1999-2001, 2003-2007, 2009-2022 Free Software Foundation, Inc.
+# Copyright (C) 1999-2001, 2003-2007, 2009-2023 Free Software
+# Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/ieee754-h.m4 b/m4/ieee754-h.m4
index aff4f2c2df3..73a8f8350b6 100644
--- a/m4/ieee754-h.m4
+++ b/m4/ieee754-h.m4
@@ -1,6 +1,6 @@
 # Configure ieee754-h module
 
-dnl Copyright 2018-2022 Free Software Foundation, Inc.
+dnl Copyright 2018-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/include_next.m4 b/m4/include_next.m4
index a9247f6f114..9f19215ef05 100644
--- a/m4/include_next.m4
+++ b/m4/include_next.m4
@@ -1,5 +1,5 @@
 # include_next.m4 serial 26
-dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/inttypes.m4 b/m4/inttypes.m4
index df25a21eb9b..bf2eab2ba31 100644
--- a/m4/inttypes.m4
+++ b/m4/inttypes.m4
@@ -1,5 +1,5 @@
 # inttypes.m4 serial 36
-dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/largefile.m4 b/m4/largefile.m4
index ec9677c46d2..bc8a2b93534 100644
--- a/m4/largefile.m4
+++ b/m4/largefile.m4
@@ -1,7 +1,7 @@
 # Enable large files on systems where this is not the default.
 # Enable support for files on Linux file systems with 64-bit inode numbers.
 
-# Copyright 1992-1996, 1998-2022 Free Software Foundation, Inc.
+# Copyright 1992-1996, 1998-2023 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/lchmod.m4 b/m4/lchmod.m4
index cd43beed851..a1370e163fb 100644
--- a/m4/lchmod.m4
+++ b/m4/lchmod.m4
@@ -1,6 +1,6 @@
 #serial 10
 
-dnl Copyright (C) 2005-2006, 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2006, 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/libgmp.m4 b/m4/libgmp.m4
index d69dcc7237a..58576c4d0c5 100644
--- a/m4/libgmp.m4
+++ b/m4/libgmp.m4
@@ -1,6 +1,6 @@
 # libgmp.m4 serial 7
 # Configure the GMP library or a replacement.
-dnl Copyright 2020-2022 Free Software Foundation, Inc.
+dnl Copyright 2020-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/limits-h.m4 b/m4/limits-h.m4
index 5d5a5bf584d..5088fa16fd3 100644
--- a/m4/limits-h.m4
+++ b/m4/limits-h.m4
@@ -1,6 +1,6 @@
 dnl Check whether limits.h has needed features.
 
-dnl Copyright 2016-2022 Free Software Foundation, Inc.
+dnl Copyright 2016-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/lstat.m4 b/m4/lstat.m4
index d987060bd14..7e667fb187a 100644
--- a/m4/lstat.m4
+++ b/m4/lstat.m4
@@ -1,6 +1,6 @@
 # serial 33
 
-# Copyright (C) 1997-2001, 2003-2022 Free Software Foundation, Inc.
+# Copyright (C) 1997-2001, 2003-2023 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/malloc.m4 b/m4/malloc.m4
index 6b76c1e64dd..554029243d1 100644
--- a/m4/malloc.m4
+++ b/m4/malloc.m4
@@ -1,5 +1,5 @@
 # malloc.m4 serial 28
-dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4
index f4b5853f020..2fac86e20be 100644
--- a/m4/manywarnings.m4
+++ b/m4/manywarnings.m4
@@ -1,5 +1,5 @@
 # manywarnings.m4 serial 23
-dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/mbstate_t.m4 b/m4/mbstate_t.m4
index a6eba1bc121..dcd66b96131 100644
--- a/m4/mbstate_t.m4
+++ b/m4/mbstate_t.m4
@@ -1,5 +1,5 @@
 # mbstate_t.m4 serial 14
-dnl Copyright (C) 2000-2002, 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2000-2002, 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/md5.m4 b/m4/md5.m4
index cefb9cfe8e1..678489e5c5b 100644
--- a/m4/md5.m4
+++ b/m4/md5.m4
@@ -1,5 +1,5 @@
 # md5.m4 serial 14
-dnl Copyright (C) 2002-2006, 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/memmem.m4 b/m4/memmem.m4
index e01aa5c713b..3cf46bc2e9c 100644
--- a/m4/memmem.m4
+++ b/m4/memmem.m4
@@ -1,5 +1,5 @@
 # memmem.m4 serial 29
-dnl Copyright (C) 2002-2004, 2007-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2004, 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/mempcpy.m4 b/m4/mempcpy.m4
index 1107eb4a468..3ac8a305bde 100644
--- a/m4/mempcpy.m4
+++ b/m4/mempcpy.m4
@@ -1,6 +1,6 @@
 # mempcpy.m4 serial 12
-dnl Copyright (C) 2003-2004, 2006-2007, 2009-2022 Free Software Foundation,
-dnl Inc.
+dnl Copyright (C) 2003-2004, 2006-2007, 2009-2023 Free Software
+dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/memrchr.m4 b/m4/memrchr.m4
index ec5e2083bcf..ed750b7bdf1 100644
--- a/m4/memrchr.m4
+++ b/m4/memrchr.m4
@@ -1,6 +1,6 @@
 # memrchr.m4 serial 11
-dnl Copyright (C) 2002-2003, 2005-2007, 2009-2022 Free Software Foundation,
-dnl Inc.
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2023 Free Software
+dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/minmax.m4 b/m4/minmax.m4
index b9767397942..fd09846ffb3 100644
--- a/m4/minmax.m4
+++ b/m4/minmax.m4
@@ -1,5 +1,5 @@
 # minmax.m4 serial 4
-dnl Copyright (C) 2005, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/mkostemp.m4 b/m4/mkostemp.m4
index 2176f372967..a7cfac4cb87 100644
--- a/m4/mkostemp.m4
+++ b/m4/mkostemp.m4
@@ -1,5 +1,5 @@
 # mkostemp.m4 serial 2
-dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/mktime.m4 b/m4/mktime.m4
index 431b17dcb0d..604dd766f5d 100644
--- a/m4/mktime.m4
+++ b/m4/mktime.m4
@@ -1,6 +1,6 @@
 # serial 37
-dnl Copyright (C) 2002-2003, 2005-2007, 2009-2022 Free Software Foundation,
-dnl Inc.
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2023 Free Software
+dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/mode_t.m4 b/m4/mode_t.m4
index e08d27a749e..82197c0214a 100644
--- a/m4/mode_t.m4
+++ b/m4/mode_t.m4
@@ -1,5 +1,5 @@
 # mode_t.m4 serial 2
-dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/multiarch.m4 b/m4/multiarch.m4
index 5d942765d40..3ba5b0f76c6 100644
--- a/m4/multiarch.m4
+++ b/m4/multiarch.m4
@@ -1,5 +1,5 @@
 # multiarch.m4 serial 9
-dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/nanosleep.m4 b/m4/nanosleep.m4
index dfe21f56d5c..21ee5a21daf 100644
--- a/m4/nanosleep.m4
+++ b/m4/nanosleep.m4
@@ -5,7 +5,7 @@ dnl Check for the nanosleep function.
 dnl If not found, use the supplied replacement.
 dnl
 
-# Copyright (C) 1999-2001, 2003-2022 Free Software Foundation, Inc.
+# Copyright (C) 1999-2001, 2003-2023 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/nocrash.m4 b/m4/nocrash.m4
index 91f00c1bc91..6a766387618 100644
--- a/m4/nocrash.m4
+++ b/m4/nocrash.m4
@@ -1,5 +1,5 @@
 # nocrash.m4 serial 5
-dnl Copyright (C) 2005, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/nproc.m4 b/m4/nproc.m4
index 5c220ae2c4e..3065b7b9bff 100644
--- a/m4/nproc.m4
+++ b/m4/nproc.m4
@@ -1,5 +1,5 @@
 # nproc.m4 serial 5
-dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/nstrftime.m4 b/m4/nstrftime.m4
index 0f613048e3b..45b89f752a5 100644
--- a/m4/nstrftime.m4
+++ b/m4/nstrftime.m4
@@ -1,6 +1,7 @@
 # serial 37
 
-# Copyright (C) 1996-1997, 1999-2007, 2009-2022 Free Software Foundation, Inc.
+# Copyright (C) 1996-1997, 1999-2007, 2009-2023 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/off_t.m4 b/m4/off_t.m4
index 0890adafc35..880f347250a 100644
--- a/m4/off_t.m4
+++ b/m4/off_t.m4
@@ -1,5 +1,5 @@
 # off_t.m4 serial 1
-dnl Copyright (C) 2012-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2012-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/open-cloexec.m4 b/m4/open-cloexec.m4
index 16cd5ec4cba..fd572fcd1de 100644
--- a/m4/open-cloexec.m4
+++ b/m4/open-cloexec.m4
@@ -1,6 +1,6 @@
 # Test whether O_CLOEXEC is defined.
 
-dnl Copyright 2017-2022 Free Software Foundation, Inc.
+dnl Copyright 2017-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/open-slash.m4 b/m4/open-slash.m4
index 4fbf491a75f..1f731f8ad80 100644
--- a/m4/open-slash.m4
+++ b/m4/open-slash.m4
@@ -1,5 +1,5 @@
 # open-slash.m4 serial 2
-dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/open.m4 b/m4/open.m4
index f82fd6cac1e..94fa2bb7530 100644
--- a/m4/open.m4
+++ b/m4/open.m4
@@ -1,5 +1,5 @@
 # open.m4 serial 15
-dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/pathmax.m4 b/m4/pathmax.m4
index 44add9905e8..5b7fa4242bc 100644
--- a/m4/pathmax.m4
+++ b/m4/pathmax.m4
@@ -1,6 +1,6 @@
 # pathmax.m4 serial 11
-dnl Copyright (C) 2002-2003, 2005-2006, 2009-2022 Free Software Foundation,
-dnl Inc.
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2023 Free Software
+dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/pid_t.m4 b/m4/pid_t.m4
index cb26f3612ef..0fd7d0a1810 100644
--- a/m4/pid_t.m4
+++ b/m4/pid_t.m4
@@ -1,5 +1,5 @@
 # pid_t.m4 serial 4
-dnl Copyright (C) 2020-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2020-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/pipe2.m4 b/m4/pipe2.m4
index b7522478259..501f3a4303d 100644
--- a/m4/pipe2.m4
+++ b/m4/pipe2.m4
@@ -1,5 +1,5 @@
 # pipe2.m4 serial 2
-dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/pselect.m4 b/m4/pselect.m4
index 86114416cbb..9f2b282cee0 100644
--- a/m4/pselect.m4
+++ b/m4/pselect.m4
@@ -1,5 +1,5 @@
 # pselect.m4 serial 10
-dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/pthread_sigmask.m4 b/m4/pthread_sigmask.m4
index 8282a371e4c..5110668155e 100644
--- a/m4/pthread_sigmask.m4
+++ b/m4/pthread_sigmask.m4
@@ -1,5 +1,5 @@
 # pthread_sigmask.m4 serial 21
-dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/rawmemchr.m4 b/m4/rawmemchr.m4
index dae419355a9..a48d829526f 100644
--- a/m4/rawmemchr.m4
+++ b/m4/rawmemchr.m4
@@ -1,5 +1,5 @@
 # rawmemchr.m4 serial 3
-dnl Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/readlink.m4 b/m4/readlink.m4
index d1dd5212259..078b93aa9dc 100644
--- a/m4/readlink.m4
+++ b/m4/readlink.m4
@@ -1,5 +1,5 @@
 # readlink.m4 serial 16
-dnl Copyright (C) 2003, 2007, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/readlinkat.m4 b/m4/readlinkat.m4
index 63c5205e119..ffd0b8e9bc1 100644
--- a/m4/readlinkat.m4
+++ b/m4/readlinkat.m4
@@ -1,7 +1,7 @@
 # serial 6
 # See if we need to provide readlinkat replacement.
 
-dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/realloc.m4 b/m4/realloc.m4
index 86e57c259f3..d22138fc7ac 100644
--- a/m4/realloc.m4
+++ b/m4/realloc.m4
@@ -1,5 +1,5 @@
 # realloc.m4 serial 26
-dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/regex.m4 b/m4/regex.m4
index 47342986d27..c89a1432a7b 100644
--- a/m4/regex.m4
+++ b/m4/regex.m4
@@ -1,6 +1,6 @@
 # serial 73
 
-# Copyright (C) 1996-2001, 2003-2022 Free Software Foundation, Inc.
+# Copyright (C) 1996-2001, 2003-2023 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/sha1.m4 b/m4/sha1.m4
index 0d7abc7245f..16b79c0868b 100644
--- a/m4/sha1.m4
+++ b/m4/sha1.m4
@@ -1,5 +1,5 @@
 # sha1.m4 serial 12
-dnl Copyright (C) 2002-2006, 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sha256.m4 b/m4/sha256.m4
index b3d8f92e9f3..4d1d1dda158 100644
--- a/m4/sha256.m4
+++ b/m4/sha256.m4
@@ -1,5 +1,5 @@
 # sha256.m4 serial 8
-dnl Copyright (C) 2005, 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sha512.m4 b/m4/sha512.m4
index 31710575f78..b66dc726d80 100644
--- a/m4/sha512.m4
+++ b/m4/sha512.m4
@@ -1,5 +1,5 @@
 # sha512.m4 serial 9
-dnl Copyright (C) 2005-2006, 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2006, 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sig2str.m4 b/m4/sig2str.m4
index 65316060928..7aad94a9616 100644
--- a/m4/sig2str.m4
+++ b/m4/sig2str.m4
@@ -1,5 +1,6 @@
 # serial 7
-dnl Copyright (C) 2002, 2005-2006, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2006, 2009-2023 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sigdescr_np.m4 b/m4/sigdescr_np.m4
index 4ce3b015898..da44b432c00 100644
--- a/m4/sigdescr_np.m4
+++ b/m4/sigdescr_np.m4
@@ -1,5 +1,5 @@
 # sigdescr_np.m4 serial 2
-dnl Copyright (C) 2020-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2020-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/signal_h.m4 b/m4/signal_h.m4
index 4c05c6274f3..cdd6812f97c 100644
--- a/m4/signal_h.m4
+++ b/m4/signal_h.m4
@@ -1,5 +1,5 @@
 # signal_h.m4 serial 22
-dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/socklen.m4 b/m4/socklen.m4
index 1390ac41bda..1c63a85363e 100644
--- a/m4/socklen.m4
+++ b/m4/socklen.m4
@@ -1,5 +1,5 @@
 # socklen.m4 serial 11
-dnl Copyright (C) 2005-2007, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/ssize_t.m4 b/m4/ssize_t.m4
index 03b2b895b9b..1b45e9557cc 100644
--- a/m4/ssize_t.m4
+++ b/m4/ssize_t.m4
@@ -1,5 +1,6 @@
 # ssize_t.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2001-2003, 2006, 2010-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2003, 2006, 2010-2023 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/st_dm_mode.m4 b/m4/st_dm_mode.m4
index 347954990bc..819dd5677fc 100644
--- a/m4/st_dm_mode.m4
+++ b/m4/st_dm_mode.m4
@@ -1,6 +1,6 @@
 # serial 6
 
-# Copyright (C) 1998-1999, 2001, 2009-2022 Free Software Foundation,
+# Copyright (C) 1998-1999, 2001, 2009-2023 Free Software Foundation,
 # Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/stat-time.m4 b/m4/stat-time.m4
index 342857d39e9..5b6b8101098 100644
--- a/m4/stat-time.m4
+++ b/m4/stat-time.m4
@@ -1,7 +1,7 @@
 # Checks for stat-related time functions.
 
-# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2022 Free Software
-# Foundation, Inc.
+# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2023 Free
+# Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/std-gnu11.m4 b/m4/std-gnu11.m4
index 5ca18607fe4..4179470ec94 100644
--- a/m4/std-gnu11.m4
+++ b/m4/std-gnu11.m4
@@ -9,7 +9,7 @@
 m4_version_prereq([2.70], [], [
 
 
-# Copyright (C) 2001-2022 Free Software Foundation, Inc.
+# Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/m4/stdalign.m4 b/m4/stdalign.m4
index 324e91dae2e..b1438eeaced 100644
--- a/m4/stdalign.m4
+++ b/m4/stdalign.m4
@@ -1,6 +1,6 @@
 # Check for alignas and alignof that conform to C23.
 
-dnl Copyright 2011-2022 Free Software Foundation, Inc.
+dnl Copyright 2011-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/stddef_h.m4 b/m4/stddef_h.m4
index abfd2030387..c0553d6f2ff 100644
--- a/m4/stddef_h.m4
+++ b/m4/stddef_h.m4
@@ -1,5 +1,5 @@
 # stddef_h.m4 serial 12
-dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/stdint.m4 b/m4/stdint.m4
index c3f0894277b..d6961b0993e 100644
--- a/m4/stdint.m4
+++ b/m4/stdint.m4
@@ -1,5 +1,5 @@
 # stdint.m4 serial 61
-dnl Copyright (C) 2001-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/stdio_h.m4 b/m4/stdio_h.m4
index 42e96071f8b..94271e11e78 100644
--- a/m4/stdio_h.m4
+++ b/m4/stdio_h.m4
@@ -1,5 +1,5 @@
 # stdio_h.m4 serial 59
-dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/stdlib_h.m4 b/m4/stdlib_h.m4
index 9e2096976f3..e96be22f583 100644
--- a/m4/stdlib_h.m4
+++ b/m4/stdlib_h.m4
@@ -1,5 +1,5 @@
 # stdlib_h.m4 serial 66
-dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/stpcpy.m4 b/m4/stpcpy.m4
index 241e68c8c5b..e8a76bc34f3 100644
--- a/m4/stpcpy.m4
+++ b/m4/stpcpy.m4
@@ -1,5 +1,5 @@
 # stpcpy.m4 serial 9
-dnl Copyright (C) 2002, 2007, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/string_h.m4 b/m4/string_h.m4
index 6069d4a7523..5da3cc25291 100644
--- a/m4/string_h.m4
+++ b/m4/string_h.m4
@@ -1,6 +1,6 @@
 # Configure a GNU-like replacement for <string.h>.
 
-# Copyright (C) 2007-2022 Free Software Foundation, Inc.
+# Copyright (C) 2007-2023 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/strnlen.m4 b/m4/strnlen.m4
index 0934274de71..60e8d81bf3b 100644
--- a/m4/strnlen.m4
+++ b/m4/strnlen.m4
@@ -1,6 +1,6 @@
 # strnlen.m4 serial 14
-dnl Copyright (C) 2002-2003, 2005-2007, 2009-2022 Free Software Foundation,
-dnl Inc.
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2023 Free Software
+dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/strtoimax.m4 b/m4/strtoimax.m4
index 08598936b36..1c6ddd386a5 100644
--- a/m4/strtoimax.m4
+++ b/m4/strtoimax.m4
@@ -1,5 +1,6 @@
 # strtoimax.m4 serial 16
-dnl Copyright (C) 2002-2004, 2006, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2004, 2006, 2009-2023 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/strtoll.m4 b/m4/strtoll.m4
index dc37d9984de..1e042175b18 100644
--- a/m4/strtoll.m4
+++ b/m4/strtoll.m4
@@ -1,5 +1,6 @@
 # strtoll.m4 serial 9
-dnl Copyright (C) 2002, 2004, 2006, 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004, 2006, 2008-2023 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/symlink.m4 b/m4/symlink.m4
index 5be2babbcbb..7796ec8bbc0 100644
--- a/m4/symlink.m4
+++ b/m4/symlink.m4
@@ -1,7 +1,7 @@
 # serial 9
 # See if we need to provide symlink replacement.
 
-dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sys_random_h.m4 b/m4/sys_random_h.m4
index a5ba85c67c6..01d5feebb31 100644
--- a/m4/sys_random_h.m4
+++ b/m4/sys_random_h.m4
@@ -1,5 +1,5 @@
 # sys_random_h.m4 serial 8
-dnl Copyright (C) 2020-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2020-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sys_select_h.m4 b/m4/sys_select_h.m4
index 2743cd17953..4ec5ed7a09f 100644
--- a/m4/sys_select_h.m4
+++ b/m4/sys_select_h.m4
@@ -1,5 +1,5 @@
 # sys_select_h.m4 serial 23
-dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sys_socket_h.m4 b/m4/sys_socket_h.m4
index ba3ae68e61d..98a10416cae 100644
--- a/m4/sys_socket_h.m4
+++ b/m4/sys_socket_h.m4
@@ -1,5 +1,5 @@
 # sys_socket_h.m4 serial 29
-dnl Copyright (C) 2005-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sys_stat_h.m4 b/m4/sys_stat_h.m4
index 2adbfdeef4e..ca57398aebd 100644
--- a/m4/sys_stat_h.m4
+++ b/m4/sys_stat_h.m4
@@ -1,5 +1,5 @@
 # sys_stat_h.m4 serial 42   -*- Autoconf -*-
-dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/sys_time_h.m4 b/m4/sys_time_h.m4
index bc5e2b1364c..45a1f8b0240 100644
--- a/m4/sys_time_h.m4
+++ b/m4/sys_time_h.m4
@@ -1,7 +1,7 @@
 # Configure a replacement for <sys/time.h>.
 # serial 12
 
-# Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/sys_types_h.m4 b/m4/sys_types_h.m4
index a5bef220c2c..627671fbdf7 100644
--- a/m4/sys_types_h.m4
+++ b/m4/sys_types_h.m4
@@ -1,5 +1,5 @@
 # sys_types_h.m4 serial 13
-dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/tempname.m4 b/m4/tempname.m4
index 22ccec1f8d9..abed7991dab 100644
--- a/m4/tempname.m4
+++ b/m4/tempname.m4
@@ -1,6 +1,6 @@
 #serial 5
 
-# Copyright (C) 2006-2007, 2009-2022 Free Software Foundation, Inc.
+# Copyright (C) 2006-2007, 2009-2023 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/time_h.m4 b/m4/time_h.m4
index 4ac8fd00752..fd4a469d192 100644
--- a/m4/time_h.m4
+++ b/m4/time_h.m4
@@ -1,6 +1,7 @@
 # Configure a more-standard replacement for <time.h>.
 
-# Copyright (C) 2000-2001, 2003-2007, 2009-2022 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2003-2007, 2009-2023 Free Software
+# Foundation, Inc.
 
 # serial 20
 
diff --git a/m4/time_r.m4 b/m4/time_r.m4
index 8a1ad9dadf2..adce438abf1 100644
--- a/m4/time_r.m4
+++ b/m4/time_r.m4
@@ -1,6 +1,6 @@
 dnl Reentrant time functions: localtime_r, gmtime_r.
 
-dnl Copyright (C) 2003, 2006-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2006-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/time_rz.m4 b/m4/time_rz.m4
index 4cb6a06485a..d13bc06b7a0 100644
--- a/m4/time_rz.m4
+++ b/m4/time_rz.m4
@@ -1,6 +1,6 @@
 dnl Time zone functions: tzalloc, localtime_rz, etc.
 
-dnl Copyright (C) 2015-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2015-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/timegm.m4 b/m4/timegm.m4
index f1893941f8a..6079f1a39c8 100644
--- a/m4/timegm.m4
+++ b/m4/timegm.m4
@@ -1,5 +1,5 @@
 # timegm.m4 serial 13
-dnl Copyright (C) 2003, 2007, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/timer_time.m4 b/m4/timer_time.m4
index 8d41f945c53..4c2608b58e8 100644
--- a/m4/timer_time.m4
+++ b/m4/timer_time.m4
@@ -1,5 +1,5 @@
 # timer_time.m4 serial 5
-dnl Copyright (C) 2011-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/timespec.m4 b/m4/timespec.m4
index 6a1afef0403..354530319fe 100644
--- a/m4/timespec.m4
+++ b/m4/timespec.m4
@@ -1,6 +1,7 @@
 #serial 15
 
-# Copyright (C) 2000-2001, 2003-2007, 2009-2022 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2003-2007, 2009-2023 Free Software
+# Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/tm_gmtoff.m4 b/m4/tm_gmtoff.m4
index 9275bed673d..bc41de361cc 100644
--- a/m4/tm_gmtoff.m4
+++ b/m4/tm_gmtoff.m4
@@ -1,5 +1,5 @@
 # tm_gmtoff.m4 serial 3
-dnl Copyright (C) 2002, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/unistd_h.m4 b/m4/unistd_h.m4
index 4c66ccc0a40..f4384027e37 100644
--- a/m4/unistd_h.m4
+++ b/m4/unistd_h.m4
@@ -1,5 +1,5 @@
 # unistd_h.m4 serial 90
-dnl Copyright (C) 2006-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/unlocked-io.m4 b/m4/unlocked-io.m4
index d42c95cedb1..407c0bac832 100644
--- a/m4/unlocked-io.m4
+++ b/m4/unlocked-io.m4
@@ -1,6 +1,6 @@
 # unlocked-io.m4 serial 16
 
-# Copyright (C) 1998-2006, 2009-2022 Free Software Foundation, Inc.
+# Copyright (C) 1998-2006, 2009-2023 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/utimens.m4 b/m4/utimens.m4
index 62aec78a63c..ae35ef789b8 100644
--- a/m4/utimens.m4
+++ b/m4/utimens.m4
@@ -1,4 +1,4 @@
-dnl Copyright (C) 2003-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/utimensat.m4 b/m4/utimensat.m4
index 3abdb865110..dd210fc989a 100644
--- a/m4/utimensat.m4
+++ b/m4/utimensat.m4
@@ -1,7 +1,7 @@
 # serial 9
 # See if we need to provide utimensat replacement.
 
-dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/utimes.m4 b/m4/utimes.m4
index bf221614064..73b9a2da34e 100644
--- a/m4/utimes.m4
+++ b/m4/utimes.m4
@@ -1,7 +1,7 @@
 # Detect some bugs in glibc's implementation of utimes.
 # serial 8
 
-dnl Copyright (C) 2003-2005, 2009-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2005, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/vararrays.m4 b/m4/vararrays.m4
index 28e22a49df6..fd6230c2968 100644
--- a/m4/vararrays.m4
+++ b/m4/vararrays.m4
@@ -4,7 +4,7 @@
 
 # From Paul Eggert
 
-# Copyright (C) 2001, 2009-2022 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2009-2023 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/m4/warnings.m4 b/m4/warnings.m4
index 60088f93ede..063bc5ca64a 100644
--- a/m4/warnings.m4
+++ b/m4/warnings.m4
@@ -1,5 +1,5 @@
 # warnings.m4 serial 16
-dnl Copyright (C) 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/wchar_t.m4 b/m4/wchar_t.m4
index 268e3e51595..50bde08aecb 100644
--- a/m4/wchar_t.m4
+++ b/m4/wchar_t.m4
@@ -1,5 +1,5 @@
 # wchar_t.m4 serial 4 (gettext-0.18.2)
-dnl Copyright (C) 2002-2003, 2008-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/year2038.m4 b/m4/year2038.m4
index 2e4427e6fac..78b267a088e 100644
--- a/m4/year2038.m4
+++ b/m4/year2038.m4
@@ -1,5 +1,5 @@
 # year2038.m4 serial 8
-dnl Copyright (C) 2017-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2017-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/zzgnulib.m4 b/m4/zzgnulib.m4
index fd73a201fd7..362102b6069 100644
--- a/m4/zzgnulib.m4
+++ b/m4/zzgnulib.m4
@@ -1,5 +1,5 @@
 # zzgnulib.m4 serial 1
-dnl Copyright (C) 2020-2022 Free Software Foundation, Inc.
+dnl Copyright (C) 2020-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/make-dist b/make-dist
index 4646a2809bf..80c672dbf3a 100755
--- a/make-dist
+++ b/make-dist
@@ -1,7 +1,7 @@
 #!/bin/sh
 ### make-dist: create an Emacs distribution tar file from current srcdir
 
-## Copyright (C) 1995, 1997-1998, 2000-2022 Free Software Foundation,
+## Copyright (C) 1995, 1997-1998, 2000-2023 Free Software Foundation,
 ## Inc.
 
 ## This file is part of GNU Emacs.
diff --git a/modules/modhelp.py b/modules/modhelp.py
index d8b4dceb789..3ed75dbf628 100755
--- a/modules/modhelp.py
+++ b/modules/modhelp.py
@@ -2,7 +2,7 @@
 
 # Module helper script.
 
-# Copyright 2015-2022 Free Software Foundation, Inc.
+# Copyright 2015-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/msdos/ChangeLog.1 b/msdos/ChangeLog.1
index aef002c459f..c58ff771084 100644
--- a/msdos/ChangeLog.1
+++ b/msdos/ChangeLog.1
@@ -1550,7 +1550,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1994-1999, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1994-1999, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/msdos/INSTALL b/msdos/INSTALL
index 453bfa434a6..4baf2b15ab1 100644
--- a/msdos/INSTALL
+++ b/msdos/INSTALL
@@ -1,6 +1,6 @@
 GNU Emacs Installation Guide for the DJGPP (a.k.a. MS-DOS) port
 
-Copyright (C) 1992, 1994, 1996-1997, 2000-2022 Free Software Foundation,
+Copyright (C) 1992, 1994, 1996-1997, 2000-2023 Free Software Foundation,
 Inc.
 See the end of the file for license conditions.
 
diff --git a/msdos/README b/msdos/README
index cdda15f00dd..fb321273083 100644
--- a/msdos/README
+++ b/msdos/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/msdos/autogen/Makefile.in b/msdos/autogen/Makefile.in
index cd7c97b2959..7f44c9867fe 100644
--- a/msdos/autogen/Makefile.in
+++ b/msdos/autogen/Makefile.in
@@ -1,7 +1,7 @@
 # Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2009, 2013-2022 Free Software Foundation, Inc.
+# Copyright (C) 1994-2009, 2013-2023 Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
diff --git a/msdos/autogen/config.in b/msdos/autogen/config.in
index 4b1cfb96e86..88728cb309c 100644
--- a/msdos/autogen/config.in
+++ b/msdos/autogen/config.in
@@ -2,7 +2,7 @@
 
 /* GNU Emacs site configuration template file.
 
-Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2022 Free Software
+Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/msdos/depfiles.bat b/msdos/depfiles.bat
index 8c36fbcdef1..269a5d07181 100644
--- a/msdos/depfiles.bat
+++ b/msdos/depfiles.bat
@@ -1,7 +1,7 @@
 @echo off
 rem   ----------------------------------------------------------------------
 rem   Auxiliary script for MSDOS, run by ../config.bat
-rem   Copyright (C) 2011-2022 Free Software Foundation, Inc.
+rem   Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 rem   This file is part of GNU Emacs.
 
diff --git a/msdos/inttypes.h b/msdos/inttypes.h
index daaa80bfa5d..ef646eef415 100644
--- a/msdos/inttypes.h
+++ b/msdos/inttypes.h
@@ -1,6 +1,6 @@
 /* Replacement inttypes.h file for building GNU Emacs on MS-DOS with DJGPP.
 
-Copyright (C) 2011-2022 Free Software Foundation, Inc.
+Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/msdos/langinfo.h b/msdos/langinfo.h
index 02137ba36c3..018497af437 100644
--- a/msdos/langinfo.h
+++ b/msdos/langinfo.h
@@ -1,6 +1,6 @@
 /* Replacement langinfo.h file for building GNU Emacs on MS-DOS with DJGPP.
 
-Copyright (C) 2021-2022 Free Software Foundation, Inc.
+Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/msdos/mainmake.v2 b/msdos/mainmake.v2
index 2e7d242f0b1..4a1e10b336f 100644
--- a/msdos/mainmake.v2
+++ b/msdos/mainmake.v2
@@ -1,6 +1,6 @@
 # Top-level Makefile for Emacs under MS-DOS/DJGPP v2.0 or higher. 
-*-makefile-*-
 
-# Copyright (C) 1996-2022 Free Software Foundation, Inc.
+# Copyright (C) 1996-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/msdos/sed1v2.inp b/msdos/sed1v2.inp
index 9c9d1eded19..4d4c80a6b1a 100644
--- a/msdos/sed1v2.inp
+++ b/msdos/sed1v2.inp
@@ -2,7 +2,7 @@
 # Configuration script for src/Makefile under DJGPP v2.x
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1996-1997, 1999-2022 Free Software Foundation, Inc.
+# Copyright (C) 1996-1997, 1999-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed1x.inp b/msdos/sed1x.inp
index 858f565f416..1a8e362f951 100644
--- a/msdos/sed1x.inp
+++ b/msdos/sed1x.inp
@@ -2,7 +2,7 @@
 # Extra configuration script for src/makefile for DesqView/X
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1994-1997, 1999-2022 Free Software Foundation, Inc.
+# Copyright (C) 1994-1997, 1999-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp
index 9e178ac1435..58c1663dda0 100644
--- a/msdos/sed2v2.inp
+++ b/msdos/sed2v2.inp
@@ -2,7 +2,7 @@
 # Configuration script for src/config.h under DJGPP v2.x
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1993-1997, 1999-2000, 2002-2022 Free Software
+# Copyright (C) 1993-1997, 1999-2000, 2002-2023 Free Software
 # Foundation, Inc.
 #
 # This file is part of GNU Emacs.
@@ -27,7 +27,7 @@
 #ifndef MSDOS\
 #define MSDOS\
 #endif
-/^#undef COPYRIGHT *$/s/^.*$/#define COPYRIGHT "Copyright (C) 2022 Free 
Software Foundation, Inc."/
+/^#undef COPYRIGHT *$/s/^.*$/#define COPYRIGHT "Copyright (C) 2023 Free 
Software Foundation, Inc."/
 /^#undef DIRECTORY_SEP *$/s!^.*$!#define DIRECTORY_SEP '/'!
 /^#undef DOS_NT *$/s/^.*$/#define DOS_NT/
 /^#undef FLOAT_CHECK_DOMAIN *$/s/^.*$/#define FLOAT_CHECK_DOMAIN/
diff --git a/msdos/sed2x.inp b/msdos/sed2x.inp
index c147d62193d..4c38952b11c 100644
--- a/msdos/sed2x.inp
+++ b/msdos/sed2x.inp
@@ -2,7 +2,7 @@
 # Extra configuration script for src/config.h for DesqView/X
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed3v2.inp b/msdos/sed3v2.inp
index 5b5d321607f..dc9eaff27c8 100644
--- a/msdos/sed3v2.inp
+++ b/msdos/sed3v2.inp
@@ -2,7 +2,7 @@
 # Configuration script for lib-src/makefile under DJGPP v2
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1996, 1998, 2000-2022 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1998, 2000-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed4.inp b/msdos/sed4.inp
index f1c6662bf5a..1a579b78773 100644
--- a/msdos/sed4.inp
+++ b/msdos/sed4.inp
@@ -2,7 +2,7 @@
 # Configuration script for src/paths.h
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed5x.inp b/msdos/sed5x.inp
index 57895ed1c36..250ac9b4adb 100644
--- a/msdos/sed5x.inp
+++ b/msdos/sed5x.inp
@@ -2,7 +2,7 @@
 # Configuration script for oldxmenu/makefile for DesqView/X
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed6.inp b/msdos/sed6.inp
index 41cd41993b0..ec04b8f0af7 100644
--- a/msdos/sed6.inp
+++ b/msdos/sed6.inp
@@ -3,7 +3,7 @@
 # doc/lispintro/Makefile, and doc/misc/Makefile under DJGPP v2.x
 # ---------------------------------------------------------------------------
 #
-# Copyright (C) 1997, 2000-2022 Free Software Foundation, Inc.
+# Copyright (C) 1997, 2000-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedadmin.inp b/msdos/sedadmin.inp
index 79a18144f3a..a2d652ac8a3 100644
--- a/msdos/sedadmin.inp
+++ b/msdos/sedadmin.inp
@@ -2,7 +2,7 @@
 # Configuration script for admin/unidata/Makefile under DJGPP v2.x
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 2014-2022 Free Software Foundation, Inc.
+# Copyright (C) 2014-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedalloc.inp b/msdos/sedalloc.inp
index 0341148608f..716bc6c0e8e 100644
--- a/msdos/sedalloc.inp
+++ b/msdos/sedalloc.inp
@@ -2,7 +2,7 @@
 # Configuration script for SYSTEM_MALLOC/REL_ALLOC in src/config.h
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 2008-2022 Free Software Foundation, Inc.
+# Copyright (C) 2008-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedleim.inp b/msdos/sedleim.inp
index 612cfb92359..d759fc40714 100644
--- a/msdos/sedleim.inp
+++ b/msdos/sedleim.inp
@@ -2,7 +2,7 @@
 # Configuration script for leim/Makefile under DJGPP v2.x
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1999-2022 Free Software Foundation, Inc.
+# Copyright (C) 1999-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedlibcf.inp b/msdos/sedlibcf.inp
index 741192c973c..931ceb8f044 100644
--- a/msdos/sedlibcf.inp
+++ b/msdos/sedlibcf.inp
@@ -5,7 +5,7 @@
 # files whose names are invalid on DOS 8+3 filesystems.
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 2011-2022 Free Software Foundation, Inc.
+# Copyright (C) 2011-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedlibmk.inp b/msdos/sedlibmk.inp
index 3af0db6e0a5..497aedb2096 100644
--- a/msdos/sedlibmk.inp
+++ b/msdos/sedlibmk.inp
@@ -2,7 +2,7 @@
 # Configuration script for lib/Makefile under DJGPP v2.x
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 2011-2022 Free Software Foundation, Inc.
+# Copyright (C) 2011-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedlisp.inp b/msdos/sedlisp.inp
index 731bf0bb8ee..89d11fb44e3 100644
--- a/msdos/sedlisp.inp
+++ b/msdos/sedlisp.inp
@@ -2,7 +2,7 @@
 # Configuration script for lisp/Makefile under DJGPP v2.x
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 2000-2022 Free Software Foundation, Inc.
+# Copyright (C) 2000-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/nextstep/ChangeLog.1 b/nextstep/ChangeLog.1
index 86583d227e0..26def2266fe 100644
--- a/nextstep/ChangeLog.1
+++ b/nextstep/ChangeLog.1
@@ -312,7 +312,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2008-2022 Free Software Foundation, Inc.
+  Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/nextstep/INSTALL b/nextstep/INSTALL
index 945d67faa47..cce19a41ed8 100644
--- a/nextstep/INSTALL
+++ b/nextstep/INSTALL
@@ -1,4 +1,4 @@
-Copyright (C) 2008-2022 Free Software Foundation, Inc.
+Copyright (C) 2008-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/nextstep/Makefile.in b/nextstep/Makefile.in
index c1200f73fbd..5e3465315af 100644
--- a/nextstep/Makefile.in
+++ b/nextstep/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-## Copyright (C) 2012-2022 Free Software Foundation, Inc.
+## Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
diff --git a/nextstep/README b/nextstep/README
index 3ee437949c2..3fe1b9421f7 100644
--- a/nextstep/README
+++ b/nextstep/README
@@ -105,7 +105,7 @@ future development.
 
 
 ----------------------------------------------------------------------
-Copyright 2008-2022 Free Software Foundation, Inc.
+Copyright 2008-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nextstep/templates/Info.plist.in b/nextstep/templates/Info.plist.in
index 170db67c118..0f95bcebb24 100644
--- a/nextstep/templates/Info.plist.in
+++ b/nextstep/templates/Info.plist.in
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-Copyright (C) 2008-2022 Free Software Foundation, Inc.
+Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/ChangeLog.1 b/nt/ChangeLog.1
index 632dc642cda..1e54afd7a1d 100644
--- a/nt/ChangeLog.1
+++ b/nt/ChangeLog.1
@@ -3548,7 +3548,7 @@
 ;; add-log-time-zone-rule: t
 ;; End:
 
-  Copyright (C) 1995-1999, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1995-1999, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/nt/INSTALL b/nt/INSTALL
index 81d4c6293c5..3b465ba494c 100644
--- a/nt/INSTALL
+++ b/nt/INSTALL
@@ -1,13 +1,13 @@
                    Building and Installing Emacs on MS-Windows
                           using the MSYS and MinGW tools
 
-  Copyright (C) 2013-2022 Free Software Foundation, Inc.
+  Copyright (C) 2013-2023 Free Software Foundation, Inc.
   See the end of the file for license conditions.
 
 The MSYS/MinGW build described here is supported on versions of
 Windows starting with Windows XP and newer.  Building on Windows 2000
 and Windows 9X is not supported (but the Emacs binary produced by this
-build will run on Windows 9X and newer systems).
+build should run on Windows 9X and newer systems).
 
   Do not use this recipe with Cygwin.  For building on Cygwin, use the
   normal installation instructions, ../INSTALL.
@@ -87,7 +87,7 @@ build will run on Windows 9X and newer systems).
 
   Git for Windows is available from this download page:
 
-    https://github.com/git-for-windows/git/releases
+    https://gitforwindows.org/
 
   That page offers both 32-bit and 64-bit installations; pick the one
   suitable for your OS.  In general, we recommend to install a 64-bit
@@ -139,7 +139,7 @@ build will run on Windows 9X and newer systems).
   like to mess with manual installations.  You can download it from
   here:
 
-    https://sourceforge.net/projects/mingw/files/Installer/mingw-get/
+    https://osdn.net/projects/mingw/releases
 
   (This installer only supports packages downloaded from the MinGW
   site; for the rest you will still need the manual method.)
@@ -203,13 +203,13 @@ build will run on Windows 9X and newer systems).
   MinGW runtime and Windows API distributions, to compile Emacs.  You
   can find these on the MinGW download/Base page:
 
-    https://sourceforge.net/projects/mingw/files/MinGW/Base/
+    https://osdn.net/projects/mingw/releases
 
   In general, install the latest stable versions of the following
   MinGW packages from that page: gcc, binutils, mingw-rt, w32api.  You
   only need the 'bin' and the 'dll' tarballs of each of the above.
 
-  MinGW packages are distributed as .tar.lzma compressed archives.  To
+  MinGW packages are distributed as .tar.xz compressed archives.  To
   install the packages manually, we recommend to use the Windows port
   of the 'bsdtar' program to unpack the tarballs.  'bsdtar' is
   available as part of the 'libarchive' package from here:
@@ -598,8 +598,7 @@ build will run on Windows 9X and newer systems).
 * Optional image library support
 
   In addition to its "native" image formats (pbm and xbm), Emacs can
-  handle other image types: xpm, tiff, gif, png, jpeg, webp and
-  experimental support for svg.
+  handle other image types: xpm, tiff, gif, png, jpeg, webp and svg.
 
   To build Emacs with support for them, the corresponding headers must
   be in the include path and libraries should be where the linker
@@ -846,6 +845,20 @@ build will run on Windows 9X and newer systems).
   from the MSYS2 project.  If HarfBuzz is not available, Emacs will
   use the Uniscribe shaping engine that is part of MS-Windows.
 
+* Optional support for accessing SQLite databases
+
+  Emacs can support built-in access to SQLite databases, if compiled
+  with the sqlite3 library.  Prebuilt 32-bit binaries of that library
+  are available from the ezwinports site.
+
+* Optional support for tree-sitter
+
+  Emacs can be built with the tree-sitter incremental parsing library,
+  which enables editing of program sources written in various
+  programming languages based on the tree-sitter parsers.  Prebuilt
+  32-bit binaries of the tree-sitter library DLL and of several
+  language grammar libraries are available from the ezwinports site.
+
 
 This file is part of GNU Emacs.
 
diff --git a/nt/INSTALL.W64 b/nt/INSTALL.W64
index 9261c82db1b..fa576fb4d7f 100644
--- a/nt/INSTALL.W64
+++ b/nt/INSTALL.W64
@@ -1,12 +1,12 @@
          Building and Installing Emacs on 64-bit MS-Windows
                      using MSYS2 and MinGW-w64
 
-  Copyright (c) 2015-2022 Free Software Foundation, Inc.
+  Copyright (c) 2015-2023 Free Software Foundation, Inc.
   See the end of the file for license conditions.
 
 This document describes how to compile a 64-bit GNU Emacs using MSYS2
 and MinGW-w64.  For instructions for building a 32-bit Emacs using
-MSYS and MinGW, see the file INSTALL in this directory.
+MSYS and mingw.org's MinGW, see the file INSTALL in this directory.
 
 Do not use this recipe with Cygwin. For building on Cygwin, use the normal
 installation instructions in ../INSTALL.
@@ -16,29 +16,29 @@ installation instructions in ../INSTALL.
 The total space required is 3GB: 1.8GB for MSYS2 / MinGW-w64 and 1.2GB for
 Emacs with the full repository, or less if you're using a release tarball.
 
+As of December 2022, the minimum supported system, both for building
+Emacs with the MSYS2/MinGW-w64 toolchain and for running the produced
+binary, is Windows 8.1.  The computer hardware should also match the
+Microsoft requirements for Windows 8.1.
+
 * Set up the MinGW-w64 / MSYS2 build environment
 
 MinGW-w64 provides a complete runtime for projects built with GCC for 64-bit
 Windows -- it's located at https://mingw-w64.org/.
 
 MSYS2 is a Cygwin-derived software distribution for Windows which provides
-build tools for MinGW-w64 -- see https://msys2.github.io/.
+build tools for MinGW-w64 -- see https://msys2.org/.
 
 ** Download and install MinGW-w64 and MSYS2
 
-You can download the x86_64 version of MSYS2 (i.e. msys2-x86_64-<date>.exe)
-from
-
-  https://sourceforge.net/projects/msys2/files/Base/x86_64
-
-Run this file to install MSYS2 in your preferred directory, e.g. the default
-C:\msys64 -- this will install MinGW-w64 also.  Note that directory names
-containing spaces may cause problems.
+Go to https://msys2.org and follow the Installation instructions, up
+to where they say to use 'pacman -S' to install packages.  Instead,
+install the necessary packages as instructed in the next section.
 
 ** Download and install the necessary packages
 
-Run c:/msys64/msys2.exe in your MSYS2 directory and you will see a BASH window
-opened.
+Run mingw64.exe in your MSYS2 directory and you will see a BASH window
+open.
 
 In the BASH prompt, use the following command to install the necessary
 packages (you can copy and paste it into the shell with Shift + Insert):
@@ -46,6 +46,8 @@ packages (you can copy and paste it into the shell with Shift 
+ Insert):
   pacman -S --needed base-devel \
   mingw-w64-x86_64-toolchain \
   mingw-w64-x86_64-xpm-nox \
+  mingw-w64-x86_64-gmp \
+  mingw-w64-x86_64-gnutls \
   mingw-w64-x86_64-libtiff \
   mingw-w64-x86_64-giflib \
   mingw-w64-x86_64-libpng \
@@ -55,25 +57,30 @@ packages (you can copy and paste it into the shell with 
Shift + Insert):
   mingw-w64-x86_64-lcms2 \
   mingw-w64-x86_64-jansson \
   mingw-w64-x86_64-libxml2 \
-  mingw-w64-x86_64-gnutls \
   mingw-w64-x86_64-zlib \
-  mingw-w64-x86_64-harfbuzz
-
-The packages include the base developer tools (autoconf, grep, make, etc.),
-the compiler toolchain (gcc, gdb, etc.), several image libraries, an XML
-library, the GnuTLS (transport layer security) library, zlib for
-decompressing text, and HarfBuzz for use as the shaping engine.  Only the
-first three packages are required (base-devel,  toolchain, xpm-nox); the
-rest are optional.  You can select only part of the libraries if you don't
+  mingw-w64-x86_64-harfbuzz \
+  mingw-w64-x86_64-libgccjit \
+  mingw-w64-x86_64-sqlite3 \
+  mingw-w64-x86_64-tree-sitter
+
+The packages include the base developer tools (autoconf, grep, make,
+etc.), the compiler toolchain (gcc, gdb, etc.), several image
+libraries, an XML library, the GnuTLS (transport layer security)
+library, zlib for decompressing text, HarfBuzz for use as the shaping
+engine, libgccjit for native-compilation support, SQLite3 for
+accessing SQL databases, and the tree-sitter library used by some
+major modes.  Only the first four packages are required (base-devel,
+toolchain, xpm-nox, GMP), and GnuTLS is highly recommended; the rest
+are optional.  You can select only part of the libraries if you don't
 need them all.
 
 You now have a complete build environment for Emacs.
 
 * Install Git (optional) and disable autocrlf
 
-If you're going to be building the development version of Emacs from the Git
-repository, and you don't already have Git on your system, you can install it
-in your MSYS2 environment with:
+If you're going to be building the development version of Emacs from
+the Git repository (see below), and you don't already have Git on your
+system, you can install it in your MSYS2 environment with:
 
   pacman -S git
 
@@ -96,19 +103,22 @@ Savannah Emacs site, 
https://savannah.gnu.org/projects/emacs.
 The Emacs ftp site is located at https://ftp.gnu.org/gnu/emacs/ - download the
 version you want to build and put the file into a location like C:\emacs\,
 then uncompress it with tar.  This will put the Emacs source into a folder like
-C:\emacs\emacs-24.5:
+C:\emacs\emacs-29.1:
 
   cd /c/emacs
-  tar xJf emacs-24.5.tar.xz
+  tar xJf emacs-29.1.tar.xz
 
 ** From the Git repository
 
-To download the Git repository, do something like the following -- this will
-put the Emacs source into C:\emacs\emacs-26:
+To clone the Git repository, do something like the following -- this will
+put the Emacs source into C:\emacs\emacs-master:
 
   mkdir /c/emacs
   cd /c/emacs
-  git clone git://git.sv.gnu.org/emacs.git emacs-26
+  git clone git://git.sv.gnu.org/emacs.git emacs-master
+
+This will produce the development sources, i.e. the master branch of
+the Emacs Git repository, in the directory C:\emacs\emacs-master.
 
 (We recommend using the command shown on Savannah Emacs project page.)
 
@@ -117,15 +127,12 @@ put the Emacs source into C:\emacs\emacs-26:
 Now you're ready to build and install Emacs with autogen, configure, make,
 and make install.
 
-First we need to switch to the MinGW-w64 environment.  Exit the MSYS2 BASH
-console and run mingw64.exe in the C:\msys64 folder, then cd back to
-your Emacs source directory, e.g.:
-
-  cd /c/emacs/emacs-26
+  cd /c/emacs/emacs-29.1                  (if building a source tarball)
+  cd /c/emacs/emacs-master                (if building from Git)
 
 ** Run autogen
 
-If you are building the development sources, run autogen to generate the
+If you are building from Git, run autogen to generate the
 configure script (note: this step is not necessary if you are using a
 release source tarball, as the configure file is included):
 
@@ -137,15 +144,16 @@ Now you can run configure, which will build the various 
Makefiles -- note
 that the example given here is just a simple one - for more information
 on the options available please see the INSTALL file in this directory.
 
-The '--prefix' option specifies a location for the resulting binary files,
-which 'make install' will use - in this example we set it to C:\emacs\emacs-26.
-If a prefix is not specified the files will be put in the standard Unix
-directories located in your C:\msys64 directory, but this is not recommended.
+The '--prefix' option specifies a location for the resulting binary
+files, which 'make install' will use - in this example we set it to
+C:\programs\emacs.  If a prefix is not specified the files will be put
+in the standard Unix directories located in your C:\msys64 directory,
+but this is not recommended.
 
 Note also that we need to disable D-Bus because Emacs does not yet
 support them on Windows.
 
-  ./configure --prefix=/c/emacs/emacs-26 --without-dbus
+  ./configure --prefix=/c/programs/emacs --without-dbus
 
 ** Run make
 
diff --git a/nt/Makefile.in b/nt/Makefile.in
index c5a9bf4363d..0c3192a63e6 100644
--- a/nt/Makefile.in
+++ b/nt/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2013-2022 Free Software Foundation, Inc.
+# Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/nt/README b/nt/README
index a142994b743..118ead25fce 100644
--- a/nt/README
+++ b/nt/README
@@ -1,6 +1,6 @@
             Emacs for Windows NT/2000 and Windows 95/98/ME
 
-  Copyright (C) 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 2001-2023 Free Software Foundation, Inc.
   See the end of the file for license conditions.
 
   This directory contains support for compiling and running GNU Emacs on
diff --git a/nt/README.W32 b/nt/README.W32
index 30f33ca706f..da1ede1ea4d 100644
--- a/nt/README.W32
+++ b/nt/README.W32
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
                Emacs version 30.0.50 for MS-Windows
diff --git a/nt/addpm.c b/nt/addpm.c
index 22134e482a2..1f137144aac 100644
--- a/nt/addpm.c
+++ b/nt/addpm.c
@@ -1,5 +1,5 @@
 /* Add entries to the GNU Emacs Program Manager folder.
-   Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/cmdproxy.c b/nt/cmdproxy.c
index ad061306a37..d669fa1a391 100644
--- a/nt/cmdproxy.c
+++ b/nt/cmdproxy.c
@@ -1,5 +1,5 @@
 /* Proxy shell designed for use with Emacs on Windows 95 and NT.
-   Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 
    Accepts subset of Unix sh(1) command-line options, for compatibility
    with elisp code written for Unix.  When possible, executes external
diff --git a/nt/configure.bat b/nt/configure.bat
index 60682a7a81d..d63929527f7 100755
--- a/nt/configure.bat
+++ b/nt/configure.bat
@@ -1,7 +1,7 @@
 @echo off
 rem   ----------------------------------------------------------------------
 rem   This was the old configuration script for MS Windows operating systems
-rem   Copyright (C) 1999-2022 Free Software Foundation, Inc.
+rem   Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 rem   This file is part of GNU Emacs.
 
diff --git a/nt/ddeclient.c b/nt/ddeclient.c
index 87f209422cc..1fbd2da4c13 100644
--- a/nt/ddeclient.c
+++ b/nt/ddeclient.c
@@ -1,5 +1,5 @@
 /* Simple client interface to DDE servers.
-   Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/epaths.nt b/nt/epaths.nt
index da17883bf23..6069004cd13 100644
--- a/nt/epaths.nt
+++ b/nt/epaths.nt
@@ -12,7 +12,7 @@
    the host system (e.g., i686-pc-mingw32), and @SRC@ by the root of
    the Emacs source tree used to build Emacs.  */
 /*
-Copyright (C) 1993, 1995, 1997, 1999, 2001-2022 Free Software
+Copyright (C) 1993, 1995, 1997, 1999, 2001-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/nt/gnulib-cfg.mk b/nt/gnulib-cfg.mk
index 69119b135e2..eca3778f203 100644
--- a/nt/gnulib-cfg.mk
+++ b/nt/gnulib-cfg.mk
@@ -1,6 +1,6 @@
 # Configurations for ../lib/gnulib.mk.
 #
-# Copyright 2017-2022 Free Software Foundation, Inc.
+# Copyright 2017-2023 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/nt/icons/README b/nt/icons/README
index f84d4635b35..dbb28fcfee1 100644
--- a/nt/icons/README
+++ b/nt/icons/README
@@ -2,13 +2,13 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 File: emacs.ico
 Author: Kentaro Ohkouchi <nanasess@fsm.ne.jp>
-Copyright (C) 2008-2022 Free Software Foundation, Inc.
+Copyright (C) 2008-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later
 
 
 File: emacs22.ico
 Author: Andrew Zhilin
-Copyright (C) 2005-2022 Free Software Foundation, Inc.
+Copyright (C) 2005-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
 
@@ -17,7 +17,7 @@ Files: gnu2a32.ico gnu2a32t.ico gnu2b48.ico gnu2b48t.ico
        gnu5w32.ico gnu5w32t.ico gnu6w48.ico gnu6w48t.ico
        gnu7.ico    gnu8.ico     gnu9.ico
 Author: Rob Davenport <rgd at bigfoot.com>
-Copyright (C) 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1999, 2001-2023 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
   <http://users.adelphia.net/~rob.davenport/gnuicons.html>
diff --git a/nt/inc/grp.h b/nt/inc/grp.h
index 14866684a97..1a5f0276ca1 100644
--- a/nt/inc/grp.h
+++ b/nt/inc/grp.h
@@ -1,6 +1,6 @@
 /* Replacement grp.h file for building GNU Emacs on Windows.
 
-Copyright (C) 2003-2022 Free Software Foundation, Inc.
+Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/inttypes.h b/nt/inc/inttypes.h
index c41966b14a0..657bd960758 100644
--- a/nt/inc/inttypes.h
+++ b/nt/inc/inttypes.h
@@ -1,6 +1,6 @@
 /* Replacement inttypes.h file for building GNU Emacs on Windows with MSVC.
 
-Copyright (C) 2011-2022 Free Software Foundation, Inc.
+Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/langinfo.h b/nt/inc/langinfo.h
index 9475e6a11ca..86d925bd13f 100644
--- a/nt/inc/langinfo.h
+++ b/nt/inc/langinfo.h
@@ -1,6 +1,6 @@
 /* Replacement langinfo.h file for building GNU Emacs on Windows.
 
-Copyright (C) 2006-2022 Free Software Foundation, Inc.
+Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/ms-w32.h b/nt/inc/ms-w32.h
index 98e31df70c8..58be1199345 100644
--- a/nt/inc/ms-w32.h
+++ b/nt/inc/ms-w32.h
@@ -1,6 +1,6 @@
 /* System description file for Windows NT.
 
-Copyright (C) 1993-1995, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1993-1995, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/nl_types.h b/nt/inc/nl_types.h
index 155a62f4c08..17debcc5b64 100644
--- a/nt/inc/nl_types.h
+++ b/nt/inc/nl_types.h
@@ -1,6 +1,6 @@
 /* Replacement nl_types.h file for building GNU Emacs on Windows.
 
-Copyright (C) 2006-2022 Free Software Foundation, Inc.
+Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/stdint.h b/nt/inc/stdint.h
index 812e54c4027..c9b667f5759 100644
--- a/nt/inc/stdint.h
+++ b/nt/inc/stdint.h
@@ -1,6 +1,6 @@
 /* Replacement stdint.h file for building GNU Emacs on Windows.
 
-Copyright (C) 2011-2022 Free Software Foundation, Inc.
+Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/sys/resource.h b/nt/inc/sys/resource.h
index 87f396b1f2c..72d855e6a82 100644
--- a/nt/inc/sys/resource.h
+++ b/nt/inc/sys/resource.h
@@ -1,6 +1,6 @@
 /* A limited emulation of sys/resource.h.
 
-Copyright (C) 2016-2022 Free Software Foundation, Inc.
+Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/sys/socket.h b/nt/inc/sys/socket.h
index 87123dcc640..43a24797b4c 100644
--- a/nt/inc/sys/socket.h
+++ b/nt/inc/sys/socket.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/sys/stat.h b/nt/inc/sys/stat.h
index 17e5dd62649..0eb178dc0c9 100644
--- a/nt/inc/sys/stat.h
+++ b/nt/inc/sys/stat.h
@@ -1,7 +1,7 @@
 /* sys/stat.h supplied with MSVCRT uses too narrow data types for
    inode and user/group id, so we replace them with our own.
 
-Copyright (C) 2008-2022 Free Software Foundation, Inc.
+Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/sys/wait.h b/nt/inc/sys/wait.h
index 56f690baa15..6f49c055fb7 100644
--- a/nt/inc/sys/wait.h
+++ b/nt/inc/sys/wait.h
@@ -1,6 +1,6 @@
 /* A limited emulation of sys/wait.h on Posix systems.
 
-Copyright (C) 2012-2022 Free Software Foundation, Inc.
+Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/preprep.c b/nt/preprep.c
index a2de049d596..618a260f12f 100644
--- a/nt/preprep.c
+++ b/nt/preprep.c
@@ -1,5 +1,5 @@
 /* Pre-process emacs.exe for profiling by MSVC.
-   Copyright (C) 1999, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/runemacs.c b/nt/runemacs.c
index ea1e420fab0..9226bb50745 100644
--- a/nt/runemacs.c
+++ b/nt/runemacs.c
@@ -1,6 +1,6 @@
 /* runemacs --- Simple program to start Emacs with its console window hidden.
 
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/oldXMenu/Activate.c b/oldXMenu/Activate.c
index 781c05bd026..0bfa70900f0 100644
--- a/oldXMenu/Activate.c
+++ b/oldXMenu/Activate.c
@@ -21,7 +21,7 @@ without express or implied warranty.
 
 
 /*
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
diff --git a/oldXMenu/ChangeLog.1 b/oldXMenu/ChangeLog.1
index b739a231f5d..2de6071a33c 100644
--- a/oldXMenu/ChangeLog.1
+++ b/oldXMenu/ChangeLog.1
@@ -712,7 +712,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/oldXMenu/Create.c b/oldXMenu/Create.c
index 69e52349402..9518b2833a2 100644
--- a/oldXMenu/Create.c
+++ b/oldXMenu/Create.c
@@ -21,7 +21,7 @@ without express or implied warranty.
 
 
 /*
-Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
diff --git a/oldXMenu/FindSel.c b/oldXMenu/FindSel.c
index 2db43df2f94..0153af1b02f 100644
--- a/oldXMenu/FindSel.c
+++ b/oldXMenu/FindSel.c
@@ -21,7 +21,7 @@ without express or implied warranty.
 
 
 /*
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
diff --git a/oldXMenu/Internal.c b/oldXMenu/Internal.c
index 5d1a5d2bbc8..cf4960cd113 100644
--- a/oldXMenu/Internal.c
+++ b/oldXMenu/Internal.c
@@ -21,7 +21,7 @@ without express or implied warranty.
 
 
 /*
-Copyright (C) 1993, 1996, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1993, 1996, 2001-2023 Free Software Foundation, Inc.
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
diff --git a/oldXMenu/Makefile.in b/oldXMenu/Makefile.in
index 5cbc8a48294..602d05fb621 100644
--- a/oldXMenu/Makefile.in
+++ b/oldXMenu/Makefile.in
@@ -15,7 +15,7 @@
 ## without express or implied warranty.
 
 
-## Copyright (C) 2001-2022 Free Software Foundation, Inc.
+## Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ## This program is free software: you can redistribute it and/or modify
 ## it under the terms of the GNU General Public License as published by
diff --git a/oldXMenu/deps.mk b/oldXMenu/deps.mk
index cef392815df..cf85047d971 100644
--- a/oldXMenu/deps.mk
+++ b/oldXMenu/deps.mk
@@ -15,7 +15,7 @@
 ## without express or implied warranty.
 
 
-## Copyright (C) 2001-2022 Free Software Foundation, Inc.
+## Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 ## This program is free software: you can redistribute it and/or modify
 ## it under the terms of the GNU General Public License as published by
diff --git a/oldXMenu/insque.c b/oldXMenu/insque.c
index 75e59f3b338..3d7c3b3086c 100644
--- a/oldXMenu/insque.c
+++ b/oldXMenu/insque.c
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 1993-1998, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1993-1998, 2001-2023 Free Software Foundation, Inc.
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
diff --git a/src/.gdbinit b/src/.gdbinit
index e1918347d48..55f6c58e7b4 100644
--- a/src/.gdbinit
+++ b/src/.gdbinit
@@ -1,4 +1,4 @@
-# Copyright (C) 1992-1998, 2000-2022 Free Software Foundation, Inc.
+# Copyright (C) 1992-1998, 2000-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/src/.lldbinit b/src/.lldbinit
index 5fdac34b786..f5fcdd7b597 100644
--- a/src/.lldbinit
+++ b/src/.lldbinit
@@ -1,5 +1,5 @@
 # -*- mode: shell-script -*-
-# Copyright (C) 2022 Free Software Foundation, Inc.
+# Copyright (C) 2022-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/src/ChangeLog.1 b/src/ChangeLog.1
index 7076a1e13f4..37d6d6bd897 100644
--- a/src/ChangeLog.1
+++ b/src/ChangeLog.1
@@ -3521,7 +3521,7 @@
        * minibuf.c: Don't allow entry to minibuffer
        while minibuffer is selected.
 
-    Copyright (C) 1985-1986, 2001-2022 Free Software Foundation, Inc.
+    Copyright (C) 1985-1986, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.10 b/src/ChangeLog.10
index 1b18ae5ec5d..949e4507f4c 100644
--- a/src/ChangeLog.10
+++ b/src/ChangeLog.10
@@ -27912,7 +27912,7 @@ See ChangeLog.9 for earlier changes.
 ;; add-log-time-zone-rule: t
 ;; End:
 
-    Copyright (C) 2001-2022 Free Software Foundation, Inc.
+    Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.11 b/src/ChangeLog.11
index 77180262aca..b2b776d491f 100644
--- a/src/ChangeLog.11
+++ b/src/ChangeLog.11
@@ -3294,7 +3294,7 @@
 2010-10-09  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnutls.c (syms_of_gnutls): All the bootprops are keywords.
-       (emacs_gnutls_write): Remove the debuggin fsync call.
+       (emacs_gnutls_write): Remove the debugging fsync call.
        (emacs_gnutls_read): Return -1 if we got an error from
        gnutls_read.  This allows us to actually read lots of data from
        the GnuTLS stream.
@@ -31385,7 +31385,7 @@ See ChangeLog.10 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2007-2022 Free Software Foundation, Inc.
+  Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.12 b/src/ChangeLog.12
index f455c4de382..74df9809261 100644
--- a/src/ChangeLog.12
+++ b/src/ChangeLog.12
@@ -22936,7 +22936,7 @@ See ChangeLog.11 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2011-2022 Free Software Foundation, Inc.
+  Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.13 b/src/ChangeLog.13
index 0c4e2909ced..d9736479a04 100644
--- a/src/ChangeLog.13
+++ b/src/ChangeLog.13
@@ -17905,7 +17905,7 @@ See ChangeLog.12 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2011-2022 Free Software Foundation, Inc.
+  Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.2 b/src/ChangeLog.2
index 16425185320..d518c759642 100644
--- a/src/ChangeLog.2
+++ b/src/ChangeLog.2
@@ -4771,7 +4771,7 @@
 
 See ChangeLog.1 for earlier changes.
 
-    Copyright (C) 1986-1988, 2001-2022 Free Software Foundation, Inc.
+    Copyright (C) 1986-1988, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.3 b/src/ChangeLog.3
index d32e894fa53..31fb11b06d7 100644
--- a/src/ChangeLog.3
+++ b/src/ChangeLog.3
@@ -16503,7 +16503,7 @@ See ChangeLog.2 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.4 b/src/ChangeLog.4
index e55967673d5..0c47d979ecc 100644
--- a/src/ChangeLog.4
+++ b/src/ChangeLog.4
@@ -6906,7 +6906,7 @@ See ChangeLog.3 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.5 b/src/ChangeLog.5
index 408a934ce2e..3ea0acafff0 100644
--- a/src/ChangeLog.5
+++ b/src/ChangeLog.5
@@ -7148,7 +7148,7 @@ See ChangeLog.4 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1994-1995, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1994-1995, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.6 b/src/ChangeLog.6
index f5653efd91e..f9ea372c55d 100644
--- a/src/ChangeLog.6
+++ b/src/ChangeLog.6
@@ -5358,7 +5358,7 @@ See ChangeLog.5 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1995-1996, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1995-1996, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.7 b/src/ChangeLog.7
index 9c6fd810d34..dfa41bec8f7 100644
--- a/src/ChangeLog.7
+++ b/src/ChangeLog.7
@@ -11091,7 +11091,7 @@ See ChangeLog.6 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1997-1998, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.8 b/src/ChangeLog.8
index c0e3523c648..1f479a89ed8 100644
--- a/src/ChangeLog.8
+++ b/src/ChangeLog.8
@@ -13979,7 +13979,7 @@
 
 See ChangeLog.7 for earlier changes.
 
-  Copyright (C) 1999, 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 1999, 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.9 b/src/ChangeLog.9
index b6d3f93445b..d005b51604b 100644
--- a/src/ChangeLog.9
+++ b/src/ChangeLog.9
@@ -13294,7 +13294,7 @@ See ChangeLog.8 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2001-2022 Free Software Foundation, Inc.
+  Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/Makefile.in b/src/Makefile.in
index 9027edc9e52..0c1af375efd 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2022 Free Software
+# Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2023 Free Software
 # Foundation, Inc.
 
 # This file is part of GNU Emacs.
diff --git a/src/README b/src/README
index 54d83df57bb..7d4427b8610 100644
--- a/src/README
+++ b/src/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/src/alloc.c b/src/alloc.c
index 12642a02c9d..e5ea28c921d 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -1,6 +1,6 @@
 /* Storage allocation and gc for GNU Emacs Lisp interpreter.
 
-Copyright (C) 1985-2022  Free Software Foundation, Inc.
+Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -7803,7 +7803,7 @@ DEFUN ("memory-info", Fmemory_info, Smemory_info, 0, 0, 0,
 All values are in Kbytes.  If there is no swap space,
 last two values are zero.  If the system is not supported
 or memory information can't be obtained, return nil.
-If `default-directory’ is remote, return memory information of the
+If `default-directory' is remote, return memory information of the
 respective remote host.  */)
   (void)
 {
diff --git a/src/atimer.c b/src/atimer.c
index 18301120ffe..d07cdb82b7a 100644
--- a/src/atimer.c
+++ b/src/atimer.c
@@ -1,5 +1,5 @@
 /* Asynchronous timers.
-   Copyright (C) 2000-2022 Free Software Foundation, Inc.
+   Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/atimer.h b/src/atimer.h
index 7d6d853ffd0..551c186d24e 100644
--- a/src/atimer.h
+++ b/src/atimer.h
@@ -1,5 +1,5 @@
 /* Asynchronous timers.
-   Copyright (C) 2000-2022 Free Software Foundation, Inc.
+   Copyright (C) 2000-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/bidi.c b/src/bidi.c
index c4d04136e9e..e01251263be 100644
--- a/src/bidi.c
+++ b/src/bidi.c
@@ -1,6 +1,6 @@
 /* Low-level bidirectional buffer/string-scanning functions for GNU Emacs.
 
-Copyright (C) 2000-2001, 2004-2005, 2009-2022 Free Software Foundation,
+Copyright (C) 2000-2001, 2004-2005, 2009-2023 Free Software Foundation,
 Inc.
 
 Author: Eli Zaretskii <eliz@gnu.org>
diff --git a/src/bignum.c b/src/bignum.c
index e4e4d45d686..e64653b2873 100644
--- a/src/bignum.c
+++ b/src/bignum.c
@@ -1,6 +1,6 @@
 /* Big numbers for Emacs.
 
-Copyright 2018-2022 Free Software Foundation, Inc.
+Copyright 2018-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/bignum.h b/src/bignum.h
index de9ee17c027..b9957a642d1 100644
--- a/src/bignum.h
+++ b/src/bignum.h
@@ -1,6 +1,6 @@
 /* Big numbers for Emacs.
 
-Copyright 2018-2022 Free Software Foundation, Inc.
+Copyright 2018-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/blockinput.h b/src/blockinput.h
index a98fc69eb90..5fd63c2575c 100644
--- a/src/blockinput.h
+++ b/src/blockinput.h
@@ -1,5 +1,5 @@
 /* blockinput.h - interface to blocking complicated interrupt-driven input.
-   Copyright (C) 1989, 1993, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1989, 1993, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/buffer.c b/src/buffer.c
index 38c3150f2c5..100e42fc1f9 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1,6 +1,6 @@
 /* Buffer manipulation primitives for GNU Emacs.
 
-Copyright (C) 1985-2022  Free Software Foundation, Inc.
+Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/buffer.h b/src/buffer.h
index 7c3d1903140..eb32d602ad6 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -1,6 +1,6 @@
 /* Header file for the buffer manipulation primitives.
 
-Copyright (C) 1985-2022  Free Software Foundation, Inc.
+Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/bytecode.c b/src/bytecode.c
index c765e1be2bc..124348e5b35 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -1,5 +1,5 @@
 /* Execution of byte code produced by bytecomp.el.
-   Copyright (C) 1985-1988, 1993, 2000-2022 Free Software Foundation,
+   Copyright (C) 1985-1988, 1993, 2000-2023 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/callint.c b/src/callint.c
index 8ef0e5240a5..c60a376b958 100644
--- a/src/callint.c
+++ b/src/callint.c
@@ -1,5 +1,5 @@
 /* Call a Lisp function interactively.
-   Copyright (C) 1985-1986, 1993-1995, 1997, 2000-2022 Free Software
+   Copyright (C) 1985-1986, 1993-1995, 1997, 2000-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/callproc.c b/src/callproc.c
index f9f840e5440..5e1e1a8cc0a 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -1,6 +1,6 @@
 /* Synchronous subprocess invocation for GNU Emacs.
 
-Copyright (C) 1985-1988, 1993-1995, 1999-2022 Free Software Foundation,
+Copyright (C) 1985-1988, 1993-1995, 1999-2023 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -259,8 +259,8 @@ input come from an Emacs buffer, use `call-process-region' 
instead.
 Third argument DESTINATION specifies how to handle program's output.
 (\"Output\" here means both standard output and standard error
 output.)
-If DESTINATION is a buffer, or t that stands for the current buffer,
- it means insert output in that buffer before point.
+If DESTINATION is a buffer or the name of a buffer, or t (which stands for
+the current buffer), it means insert output in that buffer before point.
 If DESTINATION is nil, it means discard output; 0 means discard
  and don't wait for the program to terminate.
 If DESTINATION is `(:file FILE)', where FILE is a file name string,
@@ -1055,6 +1055,7 @@ Insert output in BUFFER before point; t means current 
buffer; nil for
  BUFFER means discard it; 0 means discard and don't wait; and `(:file
  FILE)', where FILE is a file name string, means that it should be
  written to that file (if the file already exists it is overwritten).
+BUFFER can be a string which is the name of a buffer.
 BUFFER can also have the form (REAL-BUFFER STDERR-FILE); in that case,
 REAL-BUFFER says what to do with standard output, as above,
 while STDERR-FILE says what to do with standard error in the child.
diff --git a/src/casefiddle.c b/src/casefiddle.c
index d3df3390f3f..1a2b37350ec 100644
--- a/src/casefiddle.c
+++ b/src/casefiddle.c
@@ -1,7 +1,7 @@
 /* -*- coding: utf-8 -*- */
 /* GNU Emacs case conversion functions.
 
-Copyright (C) 1985, 1994, 1997-1999, 2001-2022 Free Software Foundation,
+Copyright (C) 1985, 1994, 1997-1999, 2001-2023 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/casetab.c b/src/casetab.c
index 6ea27318bc2..f844022395a 100644
--- a/src/casetab.c
+++ b/src/casetab.c
@@ -1,5 +1,5 @@
 /* GNU Emacs routines to deal with case tables.
-   Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 Author: Howard Gayle
 
diff --git a/src/category.c b/src/category.c
index bedde0de45e..dac5c78b5af 100644
--- a/src/category.c
+++ b/src/category.c
@@ -1,6 +1,6 @@
 /* GNU Emacs routines to deal with category tables.
 
-Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
   2005, 2006, 2007, 2008, 2009, 2010, 2011
   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/src/ccl.c b/src/ccl.c
index 8f53832f62b..4bd83c3528b 100644
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -1,5 +1,5 @@
 /* CCL (Code Conversion Language) interpreter.
-   Copyright (C) 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001-2023 Free Software Foundation, Inc.
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
      2005, 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/src/character.c b/src/character.c
index 5df49adade9..d0b18367a83 100644
--- a/src/character.c
+++ b/src/character.c
@@ -1,6 +1,6 @@
 /* Basic character support.
 
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 Copyright (C) 1995, 1997, 1998, 2001 Electrotechnical Laboratory, JAPAN.
   Licensed to the Free Software Foundation.
 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
diff --git a/src/charset.c b/src/charset.c
index bb59262fe98..7987ffa0c5e 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -1,6 +1,6 @@
 /* Basic character set support.
 
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
   2005, 2006, 2007, 2008, 2009, 2010, 2011
diff --git a/src/charset.h b/src/charset.h
index 4f4a14f1bda..6d115fa3596 100644
--- a/src/charset.h
+++ b/src/charset.h
@@ -1,5 +1,5 @@
 /* Header for charset handler.
-   Copyright (C) 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001-2023 Free Software Foundation, Inc.
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
      2005, 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/src/cm.c b/src/cm.c
index a175b4a338e..4711085d796 100644
--- a/src/cm.c
+++ b/src/cm.c
@@ -1,5 +1,5 @@
 /* Cursor motion subroutines for GNU Emacs.
-   Copyright (C) 1985, 1995, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1995, 2001-2023 Free Software Foundation, Inc.
     based primarily on public domain code written by Chris Torek
 
 This file is part of GNU Emacs.
diff --git a/src/cm.h b/src/cm.h
index f8034997c6f..70d2c7078fc 100644
--- a/src/cm.h
+++ b/src/cm.h
@@ -1,5 +1,5 @@
 /* Cursor motion calculation definitions for GNU Emacs
-   Copyright (C) 1985, 1989, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1989, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/cmds.c b/src/cmds.c
index 626c9198aab..15caa4a6972 100644
--- a/src/cmds.c
+++ b/src/cmds.c
@@ -1,6 +1,6 @@
 /* Simple built-in editing commands.
 
-Copyright (C) 1985, 1993-1998, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1985, 1993-1998, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/coding.c b/src/coding.c
index ab73bda8440..4e59f2b6a1b 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -1,5 +1,5 @@
 /* Coding system handler (conversion, detection, etc).
-   Copyright (C) 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001-2023 Free Software Foundation, Inc.
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
      2005, 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/src/coding.h b/src/coding.h
index d86c17d18b0..b8d4f5f27e1 100644
--- a/src/coding.h
+++ b/src/coding.h
@@ -1,5 +1,5 @@
 /* Header for coding system handler.
-   Copyright (C) 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001-2023 Free Software Foundation, Inc.
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
      2005, 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/src/commands.h b/src/commands.h
index 6cc3e78de06..ac7cdb60db3 100644
--- a/src/commands.h
+++ b/src/commands.h
@@ -1,5 +1,5 @@
 /* Definitions needed by most editing commands.
-   Copyright (C) 1985, 1994, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1994, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/comp.c b/src/comp.c
index e76e17f9a61..c789530b2f0 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -1,5 +1,5 @@
 /* Compile Emacs Lisp into native code.
-   Copyright (C) 2019-2022 Free Software Foundation, Inc.
+   Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 Author: Andrea Corallo <akrl@sdf.org>
 
diff --git a/src/comp.h b/src/comp.h
index 1212ae8d567..ffa292ae115 100644
--- a/src/comp.h
+++ b/src/comp.h
@@ -1,6 +1,6 @@
 /* Elisp native compiler definitions
 
-Copyright (C) 2019-2022 Free Software Foundation, Inc.
+Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/composite.c b/src/composite.c
index 6b256171ac7..164eeb39598 100644
--- a/src/composite.c
+++ b/src/composite.c
@@ -1,5 +1,5 @@
 /* Composite sequence support.
-   Copyright (C) 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001-2023 Free Software Foundation, Inc.
    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 
2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H14PRO021
diff --git a/src/composite.h b/src/composite.h
index 8a6fd203d09..e81465d90cc 100644
--- a/src/composite.h
+++ b/src/composite.h
@@ -1,5 +1,5 @@
 /* Header for composite sequence handler.
-   Copyright (C) 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001-2023 Free Software Foundation, Inc.
    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 
2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H14PRO021
diff --git a/src/conf_post.h b/src/conf_post.h
index fb8d2e5d96e..0d5f90a6910 100644
--- a/src/conf_post.h
+++ b/src/conf_post.h
@@ -1,6 +1,6 @@
 /* conf_post.h --- configure.ac includes this via AH_BOTTOM
 
-Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2022 Free Software
+Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/cygw32.c b/src/cygw32.c
index 759d9af94de..35cac23504e 100644
--- a/src/cygw32.c
+++ b/src/cygw32.c
@@ -1,5 +1,5 @@
 /* Cygwin support routines.
-   Copyright (C) 2011-2022 Free Software Foundation, Inc.
+   Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/cygw32.h b/src/cygw32.h
index fe1f6da11a0..6f8706e3436 100644
--- a/src/cygw32.h
+++ b/src/cygw32.h
@@ -1,5 +1,5 @@
 /* Header for Cygwin support routines.
-   Copyright (C) 2011-2022 Free Software Foundation, Inc.
+   Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/data.c b/src/data.c
index 7ad06a9faa5..04ac2b09ac3 100644
--- a/src/data.c
+++ b/src/data.c
@@ -1,5 +1,5 @@
 /* Primitive operations on Lisp data types for GNU Emacs Lisp interpreter.
-   Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2022 Free Software
+   Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/dbusbind.c b/src/dbusbind.c
index 440142757ec..d96b735c79a 100644
--- a/src/dbusbind.c
+++ b/src/dbusbind.c
@@ -1,5 +1,5 @@
 /* Elisp bindings for D-Bus.
-   Copyright (C) 2007-2022 Free Software Foundation, Inc.
+   Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/decompress.c b/src/decompress.c
index dbdc9104a37..6ef17db07d6 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -1,5 +1,5 @@
 /* Interface to zlib.
-   Copyright (C) 2013-2022 Free Software Foundation, Inc.
+   Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/deps.mk b/src/deps.mk
index 39edd5c1dd3..a7c8ae11f72 100644
--- a/src/deps.mk
+++ b/src/deps.mk
@@ -1,6 +1,6 @@
 ### deps.mk --- src/Makefile fragment for GNU Emacs
 
-## Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2022 Free Software
+## Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2023 Free Software
 ## Foundation, Inc.
 
 ## This file is part of GNU Emacs.
diff --git a/src/dired.c b/src/dired.c
index ef729df5d2b..3f55c4c3830 100644
--- a/src/dired.c
+++ b/src/dired.c
@@ -1,5 +1,5 @@
 /* Lisp functions for making directory listings.
-   Copyright (C) 1985-1986, 1993-1994, 1999-2022 Free Software
+   Copyright (C) 1985-1986, 1993-1994, 1999-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/dispextern.h b/src/dispextern.h
index df6134e68f0..4dcab113ea2 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -1,6 +1,6 @@
 /* Interface definitions for display code.
 
-Copyright (C) 1985, 1993-1994, 1997-2022 Free Software Foundation, Inc.
+Copyright (C) 1985, 1993-1994, 1997-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -107,7 +107,7 @@ typedef struct
 {
   int width, height;           /* size of image */
   char *data;                  /* pointer to image data */
-  int bytes_per_line;          /* accelarator to next line */
+  int bytes_per_line;          /* accelerator to next line */
   int bits_per_pixel;          /* bits per pixel (ZPixmap) */
 } *Emacs_Pix_Container;
 typedef Emacs_Pix_Container Emacs_Pixmap;
@@ -1712,7 +1712,7 @@ struct face
 
   /* Non-zero means characters in this face have a box of that
      thickness around them. Vertical (left and right) and horizontal
-     (top and bottom) borders size can be set separatedly using an
+     (top and bottom) borders size can be set separately using an
      associated list of two ints in the form
      (vertical_size . horizontal_size). In case one of the value is
      negative, its absolute value indicates the thickness, and the
diff --git a/src/dispnew.c b/src/dispnew.c
index 5a9ba8909e3..8fde522f77d 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -1,6 +1,6 @@
 /* Updating of data structures for redisplay.
 
-Copyright (C) 1985-1988, 1993-1995, 1997-2022 Free Software Foundation,
+Copyright (C) 1985-1988, 1993-1995, 1997-2023 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -3188,7 +3188,7 @@ DEFUN ("redraw-display", Fredraw_display, 
Sredraw_display, 0, 0, "",
   Lisp_Object tail, frame;
 
   FOR_EACH_FRAME (tail, frame)
-    if (FRAME_VISIBLE_P (XFRAME (frame)))
+    if (FRAME_REDISPLAY_P (XFRAME (frame)))
       redraw_frame (XFRAME (frame));
 
   return Qnil;
diff --git a/src/disptab.h b/src/disptab.h
index 49764727f82..0069176fd24 100644
--- a/src/disptab.h
+++ b/src/disptab.h
@@ -1,5 +1,5 @@
 /* Things for GLYPHS and glyph tables.
-   Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/dmpstruct.awk b/src/dmpstruct.awk
index b40d2979d5f..344a22f977a 100644
--- a/src/dmpstruct.awk
+++ b/src/dmpstruct.awk
@@ -1,4 +1,4 @@
-# Copyright (C) 2018-2022 Free Software Foundation, Inc.
+# Copyright (C) 2018-2023 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/src/doc.c b/src/doc.c
index 67a5f845b93..df57f84603e 100644
--- a/src/doc.c
+++ b/src/doc.c
@@ -1,6 +1,6 @@
 /* Record indices of function doc strings stored in a file. -*- coding: utf-8 
-*-
 
-Copyright (C) 1985-1986, 1993-1995, 1997-2022 Free Software Foundation,
+Copyright (C) 1985-1986, 1993-1995, 1997-2023 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/doprnt.c b/src/doprnt.c
index 19f58d08448..3ebb957e9f2 100644
--- a/src/doprnt.c
+++ b/src/doprnt.c
@@ -1,7 +1,7 @@
 /* Output like sprintf to a buffer of specified size.    -*- coding: utf-8 -*-
    Also takes args differently: pass one pointer to the end
    of the format string in addition to the format string itself.
-   Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1985, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/dosfns.c b/src/dosfns.c
index e9792cbb82b..ad885311c80 100644
--- a/src/dosfns.c
+++ b/src/dosfns.c
@@ -1,6 +1,6 @@
 /* MS-DOS specific Lisp utilities.  Coded by Manabu Higashida, 1991.
    Major changes May-July 1993 Morten Welinder (only 10% original code left)
-   Copyright (C) 1991, 1993, 1996-1998, 2001-2022 Free Software
+   Copyright (C) 1991, 1993, 1996-1998, 2001-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/dosfns.h b/src/dosfns.h
index 1115a9c726b..fbfd734023a 100644
--- a/src/dosfns.h
+++ b/src/dosfns.h
@@ -2,7 +2,7 @@
    Coded by Manabu Higashida, 1991.
    Modified by Morten Welinder, 1993-1994.
 
-Copyright (C) 1991, 1994-1995, 1997, 1999, 2001-2022 Free Software
+Copyright (C) 1991, 1994-1995, 1997, 1999, 2001-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/dynlib.c b/src/dynlib.c
index e2c71f14489..abbb0c45917 100644
--- a/src/dynlib.c
+++ b/src/dynlib.c
@@ -1,6 +1,6 @@
 /* Portable API for dynamic loading.
 
-Copyright 2015-2022 Free Software Foundation, Inc.
+Copyright 2015-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/dynlib.h b/src/dynlib.h
index 9a11c128981..9527b758af9 100644
--- a/src/dynlib.h
+++ b/src/dynlib.h
@@ -1,6 +1,6 @@
 /* Portable API for dynamic loading.
 
-Copyright 2015-2022 Free Software Foundation, Inc.
+Copyright 2015-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/editfns.c b/src/editfns.c
index 8d56ef21d90..78d2c73ecbf 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -1,6 +1,6 @@
 /* Lisp functions pertaining to editing.                 -*- coding: utf-8 -*-
 
-Copyright (C) 1985-2022  Free Software Foundation, Inc.
+Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/emacs-icon.h b/src/emacs-icon.h
index 1c7bb7f8844..84ae557be2b 100644
--- a/src/emacs-icon.h
+++ b/src/emacs-icon.h
@@ -1,7 +1,7 @@
 /* XPM */
 /* Emacs icon
 
-Copyright (C) 2008-2022 Free Software Foundation, Inc.
+Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 Author: Kentaro Ohkouchi <nanasess@fsm.ne.jp>
         Nicolas Petton <nicolas@petton.fr>
diff --git a/src/emacs-module.c b/src/emacs-module.c
index 35d6e9e0d7a..d158e243139 100644
--- a/src/emacs-module.c
+++ b/src/emacs-module.c
@@ -1,6 +1,6 @@
 /* emacs-module.c - Module loading and runtime implementation
 
-Copyright (C) 2015-2022 Free Software Foundation, Inc.
+Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/emacs-module.h.in b/src/emacs-module.h.in
index d485de5aa18..a455c41a5f1 100644
--- a/src/emacs-module.h.in
+++ b/src/emacs-module.h.in
@@ -1,6 +1,6 @@
 /* emacs-module.h - GNU Emacs module API.
 
-Copyright (C) 2015-2022 Free Software Foundation, Inc.
+Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -116,7 +116,7 @@ enum emacs_funcall_exit
   /* Function has signaled an error using `signal'.  */
   emacs_funcall_exit_signal = 1,
 
-  /* Function has exit using `throw'.  */
+  /* Function has exited using `throw'.  */
   emacs_funcall_exit_throw = 2
 };
 
diff --git a/src/emacs.c b/src/emacs.c
index d8a2863fd9c..214e2e2a296 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -1,6 +1,6 @@
 /* Fully extensible Emacs, running on Unix, intended for GNU.
 
-Copyright (C) 1985-1987, 1993-1995, 1997-1999, 2001-2022 Free Software
+Copyright (C) 1985-1987, 1993-1995, 1997-1999, 2001-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -2910,6 +2910,7 @@ killed.  */
 
   if (!NILP (restart))
     {
+      turn_on_atimers (false);
 #ifdef WINDOWSNT
       if (w32_reexec_emacs (initial_cmdline, initial_wd) < 0)
 #else
diff --git a/src/emacsgtkfixed.c b/src/emacsgtkfixed.c
index f2c9fa7b7db..2b6ebee65fd 100644
--- a/src/emacsgtkfixed.c
+++ b/src/emacsgtkfixed.c
@@ -1,7 +1,7 @@
 /* A Gtk Widget that inherits GtkFixed, but can be shrunk.
 This file is only use when compiling with Gtk+ 3.
 
-Copyright (C) 2011-2022 Free Software Foundation, Inc.
+Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/emacsgtkfixed.h b/src/emacsgtkfixed.h
index af5e22e6f4d..952dfed5e1e 100644
--- a/src/emacsgtkfixed.h
+++ b/src/emacsgtkfixed.h
@@ -1,7 +1,7 @@
 /* A Gtk Widget that inherits GtkFixed, but can be shrunk.
 This file is only use when compiling with Gtk+ 3.
 
-Copyright (C) 2011-2022 Free Software Foundation, Inc.
+Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/epaths.in b/src/epaths.in
index 2eccd0ac603..b290f0243bc 100644
--- a/src/epaths.in
+++ b/src/epaths.in
@@ -1,6 +1,6 @@
 /* Hey Emacs, this is -*- C -*- code!  */
 /*
-Copyright (C) 1993, 1995, 1997, 1999, 2001-2022 Free Software
+Copyright (C) 1993, 1995, 1997, 1999, 2001-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/eval.c b/src/eval.c
index 99f3650fc9b..d42f7ffe894 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1,6 +1,6 @@
 /* Evaluator for GNU Emacs Lisp interpreter.
 
-Copyright (C) 1985-1987, 1993-1995, 1999-2022 Free Software Foundation,
+Copyright (C) 1985-1987, 1993-1995, 1999-2023 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -1367,7 +1367,7 @@ internal_lisp_condition_case (Lisp_Object var, 
Lisp_Object bodyform,
        error ("Invalid condition handler: %s",
               SDATA (Fprin1_to_string (tem, Qt, Qnil)));
       if (CONSP (tem) && EQ (XCAR (tem), QCsuccess))
-       success_handler = XCDR (tem);
+       success_handler = tem;
       else
        clausenb++;
     }
@@ -1430,7 +1430,7 @@ internal_lisp_condition_case (Lisp_Object var, 
Lisp_Object bodyform,
   if (!NILP (success_handler))
     {
       if (NILP (var))
-       return Fprogn (success_handler);
+       return Fprogn (XCDR (success_handler));
 
       Lisp_Object handler_var = var;
       if (!NILP (Vinternal_interpreter_environment))
@@ -1442,7 +1442,7 @@ internal_lisp_condition_case (Lisp_Object var, 
Lisp_Object bodyform,
 
       specpdl_ref count = SPECPDL_INDEX ();
       specbind (handler_var, result);
-      return unbind_to (count, Fprogn (success_handler));
+      return unbind_to (count, Fprogn (XCDR (success_handler)));
     }
   return result;
 }
diff --git a/src/fileio.c b/src/fileio.c
index e7c2af81421..c672e0f7baf 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -1,6 +1,6 @@
 /* File IO for GNU Emacs.
 
-Copyright (C) 1985-1988, 1993-2022 Free Software Foundation, Inc.
+Copyright (C) 1985-1988, 1993-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -5376,12 +5376,16 @@ write_region (Lisp_Object start, Lisp_Object end, 
Lisp_Object filename,
     {
       /* Transfer data and metadata to disk, retrying if interrupted.
         fsync can report a write failure here, e.g., due to disk full
-        under NFS.  But ignore EINVAL, which means fsync is not
-        supported on this file.  */
+        under NFS.  But ignore EINVAL (and EBADF on Windows), which
+        means fsync is not supported on this file.  */
       while (fsync (desc) != 0)
        if (errno != EINTR)
          {
-           if (errno != EINVAL)
+           if (errno != EINVAL
+#ifdef WINDOWSNT
+               && errno != EBADF
+#endif
+               )
              ok = 0, save_errno = errno;
            break;
          }
@@ -6330,24 +6334,6 @@ init_fileio (void)
   umask (realmask);
 
   valid_timestamp_file_system = 0;
-
-  /* fsync can be a significant performance hit.  Often it doesn't
-     suffice to make the file-save operation survive a crash.  For
-     batch scripts, which are typically part of larger shell commands
-     that don't fsync other files, its effect on performance can be
-     significant so its utility is particularly questionable.
-     Hence, for now by default fsync is used only when interactive.
-
-     For more on why fsync often fails to work on today's hardware, see:
-     Zheng M et al. Understanding the robustness of SSDs under power fault.
-     11th USENIX Conf. on File and Storage Technologies, 2013 (FAST '13), 
271-84
-     https://www.usenix.org/system/files/conference/fast13/fast13-final80.pdf
-
-     For more on why fsync does not suffice even if it works properly, see:
-     Roche X. Necessary step(s) to synchronize filename operations on disk.
-     Austin Group Defect 672, 2013-03-19
-     https://austingroupbugs.net/view.php?id=672  */
-  write_region_inhibit_fsync = noninteractive;
 }
 
 void
@@ -6605,9 +6591,22 @@ file is usually more useful if it contains the deleted 
text.  */);
   DEFVAR_BOOL ("write-region-inhibit-fsync", write_region_inhibit_fsync,
               doc: /* Non-nil means don't call fsync in `write-region'.
 This variable affects calls to `write-region' as well as save commands.
-Setting this to nil may avoid data loss if the system loses power or
-the operating system crashes.  By default, it is non-nil in batch mode.  */);
-  write_region_inhibit_fsync = 0; /* See also `init_fileio' above.  */
+By default, it is non-nil.
+
+Although setting this to nil may avoid data loss if the system loses power,
+it can be a significant performance hit in the usual case, and it doesn't
+necessarily cause file-save operations to actually survive a crash.  */);
+
+  /* For more on why fsync often fails to work on today's hardware, see:
+     Zheng M et al. Understanding the robustness of SSDs under power fault.
+     11th USENIX Conf. on File and Storage Technologies, 2013 (FAST '13), 
271-84
+     https://www.usenix.org/system/files/conference/fast13/fast13-final80.pdf
+
+     For more on why fsync does not suffice even if it works properly, see:
+     Roche X. Necessary step(s) to synchronize filename operations on disk.
+     Austin Group Defect 672, 2013-03-19
+     https://austingroupbugs.net/view.php?id=672  */
+  write_region_inhibit_fsync = true;
 
   DEFVAR_BOOL ("delete-by-moving-to-trash", delete_by_moving_to_trash,
                doc: /* Specifies whether to use the system's trash can.
diff --git a/src/filelock.c b/src/filelock.c
index a657cc4582c..be9f8f488d9 100644
--- a/src/filelock.c
+++ b/src/filelock.c
@@ -1,6 +1,6 @@
 /* Lock files for editing.
 
-Copyright (C) 1985-1987, 1993-1994, 1996, 1998-2022 Free Software
+Copyright (C) 1985-1987, 1993-1994, 1996, 1998-2023 Free Software
 Foundation, Inc.
 
 Author: Richard King
diff --git a/src/firstfile.c b/src/firstfile.c
index 719c29db8bc..0b4881dbbe3 100644
--- a/src/firstfile.c
+++ b/src/firstfile.c
@@ -1,5 +1,5 @@
 /* Mark beginning of data space to dump as pure, for GNU Emacs.
-   Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/floatfns.c b/src/floatfns.c
index 293184c70f1..1d891ef3ce1 100644
--- a/src/floatfns.c
+++ b/src/floatfns.c
@@ -1,6 +1,6 @@
 /* Primitive operations on floating point for GNU Emacs Lisp interpreter.
 
-Copyright (C) 1988, 1993-1994, 1999, 2001-2022 Free Software Foundation,
+Copyright (C) 1988, 1993-1994, 1999, 2001-2023 Free Software Foundation,
 Inc.
 
 Author: Wolfgang Rupprecht (according to ack.texi)
diff --git a/src/fns.c b/src/fns.c
index eeb65cadf3f..0dc31aec373 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -1,6 +1,6 @@
 /* Random utility Lisp functions.
 
-Copyright (C) 1985-2022  Free Software Foundation, Inc.
+Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/font.c b/src/font.c
index 6e720bc2856..de8748dd857 100644
--- a/src/font.c
+++ b/src/font.c
@@ -1,6 +1,6 @@
 /* font.c -- "Font" primitives.
 
-Copyright (C) 2006-2022 Free Software Foundation, Inc.
+Copyright (C) 2006-2023 Free Software Foundation, Inc.
 Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
   National Institute of Advanced Industrial Science and Technology (AIST)
   Registration Number H13PRO009
diff --git a/src/font.h b/src/font.h
index d36c45a53c4..492c2e58b09 100644
--- a/src/font.h
+++ b/src/font.h
@@ -1,5 +1,5 @@
 /* font.h -- Interface definition for font handling.
-   Copyright (C) 2006-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006-2023 Free Software Foundation, Inc.
    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H13PRO009
diff --git a/src/fontset.c b/src/fontset.c
index b82737d005a..f196dee8259 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -1,6 +1,6 @@
 /* Fontset handler.
 
-Copyright (C) 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 2001-2023 Free Software Foundation, Inc.
 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
   2005, 2006, 2007, 2008, 2009, 2010, 2011
   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/src/fontset.h b/src/fontset.h
index 79210eab869..de19138947d 100644
--- a/src/fontset.h
+++ b/src/fontset.h
@@ -1,5 +1,5 @@
 /* Header for fontset handler.
-   Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2001-2023 Free Software Foundation, Inc.
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
      2005, 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/src/frame.c b/src/frame.c
index 7d902dabd4f..983424b0bee 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -1,6 +1,6 @@
 /* Generic frame functions.
 
-Copyright (C) 1993-1995, 1997, 1999-2022 Free Software Foundation, Inc.
+Copyright (C) 1993-1995, 1997, 1999-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/frame.h b/src/frame.h
index dcd32036b86..b95b94c7685 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -1,5 +1,5 @@
 /* Define frame-object for GNU Emacs.
-   Copyright (C) 1993-1994, 1999-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 1999-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -1010,6 +1010,20 @@ default_pixels_per_inch_y (void)
 /* True if frame F is currently visible.  */
 #define FRAME_VISIBLE_P(f) (f)->visible
 
+/* True if frame F should be redisplayed.  This is normally the same
+   as FRAME_VISIBLE_P (f).  Under X, frames can continue to be
+   displayed to the user by the compositing manager even if they are
+   invisible, so this also checks whether or not the frame is reported
+   visible by the X server.  */
+
+#ifndef HAVE_X_WINDOWS
+#define FRAME_REDISPLAY_P(f) (FRAME_VISIBLE_P (f))
+#else
+#define FRAME_REDISPLAY_P(f) (FRAME_VISIBLE_P (f)              \
+                             || (FRAME_X_P (f)                 \
+                                 && FRAME_X_VISIBLE (f)))
+#endif
+
 /* True if frame F is currently visible but hidden.  */
 #define FRAME_OBSCURED_P(f) ((f)->visible > 1)
 
diff --git a/src/fringe.c b/src/fringe.c
index 5d7c8dca998..5fcb1b27272 100644
--- a/src/fringe.c
+++ b/src/fringe.c
@@ -1,5 +1,5 @@
 /* Fringe handling (split from xdisp.c).
-   Copyright (C) 1985-1988, 1993-1995, 1997-2022 Free Software
+   Copyright (C) 1985-1988, 1993-1995, 1997-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/ftcrfont.c b/src/ftcrfont.c
index ede8f1323cd..c9a4de8137b 100644
--- a/src/ftcrfont.c
+++ b/src/ftcrfont.c
@@ -1,5 +1,5 @@
 /* ftcrfont.c -- FreeType font driver on cairo.
-   Copyright (C) 2015-2022 Free Software Foundation, Inc.
+   Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/ftfont.c b/src/ftfont.c
index 301a145b7ac..d3c836c0f2d 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -1,5 +1,5 @@
 /* ftfont.c -- FreeType font driver.
-   Copyright (C) 2006-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006-2023 Free Software Foundation, Inc.
    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H13PRO009
diff --git a/src/getpagesize.h b/src/getpagesize.h
index 446c1e374a0..692c9066fb1 100644
--- a/src/getpagesize.h
+++ b/src/getpagesize.h
@@ -1,5 +1,5 @@
 /* Emulate getpagesize on systems that lack it.
-   Copyright (C) 1986, 1992, 1995, 2001-2022 Free Software Foundation,
+   Copyright (C) 1986, 1992, 1995, 2001-2023 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/gfilenotify.c b/src/gfilenotify.c
index 70c503af542..de09ffe5fd3 100644
--- a/src/gfilenotify.c
+++ b/src/gfilenotify.c
@@ -1,5 +1,5 @@
 /* Filesystem notifications support with glib API.
-   Copyright (C) 2013-2022 Free Software Foundation, Inc.
+   Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/gmalloc.c b/src/gmalloc.c
index f063af60cf1..e655d69f660 100644
--- a/src/gmalloc.c
+++ b/src/gmalloc.c
@@ -1,5 +1,5 @@
 /* Declarations for `malloc' and friends.
-   Copyright (C) 1990-1993, 1995-1996, 1999, 2002-2007, 2013-2022 Free
+   Copyright (C) 1990-1993, 1995-1996, 1999, 2002-2007, 2013-2023 Free
    Software Foundation, Inc.
                  Written May 1989 by Mike Haertel.
 
diff --git a/src/gnutls.c b/src/gnutls.c
index 4093865cae5..8320c928a4e 100644
--- a/src/gnutls.c
+++ b/src/gnutls.c
@@ -1,5 +1,5 @@
 /* GnuTLS glue for GNU Emacs.
-   Copyright (C) 2010-2022 Free Software Foundation, Inc.
+   Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -34,6 +34,7 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 # endif
 
 # if GNUTLS_VERSION_NUMBER >= 0x030200
+#  define HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2
 #  define HAVE_GNUTLS_CIPHER_GET_IV_SIZE
 # endif
 
@@ -121,6 +122,11 @@ DEF_DLL_FN (int, gnutls_certificate_set_x509_crl_file,
 DEF_DLL_FN (int, gnutls_certificate_set_x509_key_file,
            (gnutls_certificate_credentials_t, const char *, const char *,
             gnutls_x509_crt_fmt_t));
+#  ifdef HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2
+DEF_DLL_FN (int, gnutls_certificate_set_x509_key_file2,
+           (gnutls_certificate_credentials_t, const char *, const char *,
+            gnutls_x509_crt_fmt_t, const char *, unsigned int));
+#  endif
 #  ifdef HAVE_GNUTLS_X509_SYSTEM_TRUST
 DEF_DLL_FN (int, gnutls_certificate_set_x509_system_trust,
            (gnutls_certificate_credentials_t));
@@ -314,6 +320,9 @@ init_gnutls_functions (void)
   LOAD_DLL_FN (library, gnutls_certificate_set_verify_flags);
   LOAD_DLL_FN (library, gnutls_certificate_set_x509_crl_file);
   LOAD_DLL_FN (library, gnutls_certificate_set_x509_key_file);
+#  ifdef HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2
+  LOAD_DLL_FN (library, gnutls_certificate_set_x509_key_file2);
+#  endif
 #  ifdef HAVE_GNUTLS_X509_SYSTEM_TRUST
   LOAD_DLL_FN (library, gnutls_certificate_set_x509_system_trust);
 #  endif
@@ -455,6 +464,9 @@ init_gnutls_functions (void)
 #  define gnutls_certificate_set_verify_flags 
fn_gnutls_certificate_set_verify_flags
 #  define gnutls_certificate_set_x509_crl_file 
fn_gnutls_certificate_set_x509_crl_file
 #  define gnutls_certificate_set_x509_key_file 
fn_gnutls_certificate_set_x509_key_file
+#  ifdef HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2
+#   define gnutls_certificate_set_x509_key_file2 
fn_gnutls_certificate_set_x509_key_file2
+#  endif
 #  define gnutls_certificate_set_x509_system_trust 
fn_gnutls_certificate_set_x509_system_trust
 #  define gnutls_certificate_set_x509_trust_file 
fn_gnutls_certificate_set_x509_trust_file
 #  define gnutls_certificate_type_get fn_gnutls_certificate_type_get
@@ -1774,6 +1786,88 @@ gnutls_verify_boot (Lisp_Object proc, Lisp_Object 
proplist)
   return gnutls_make_error (ret);
 }
 
+#ifdef HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2
+
+/* Helper function for gnutls-boot.
+
+   The key :flags receives a list of symbols, each of which
+   corresponds to a GnuTLS C flag, the ORed result is to be passed to
+   the function `gnutls_certificate_set_x509_key_file2' as its last
+   argument.  */
+static unsigned int
+key_file2_aux (Lisp_Object flags)
+{
+  unsigned int rv = 0;
+  Lisp_Object tail = flags;
+  FOR_EACH_TAIL_SAFE (tail)
+    {
+      Lisp_Object flag = XCAR (tail);
+      if (EQ (flag, Qgnutls_pkcs_plain))
+       rv |= GNUTLS_PKCS_PLAIN;
+#ifdef GNUTLS_PKCS_PKCS12_3DES
+      else if (EQ (flag, Qgnutls_pkcs_pkcs12_3des))
+       rv |= GNUTLS_PKCS_PKCS12_3DES;
+#endif
+#ifdef GNUTLS_PKCS_PKCS12_ARCFOUR
+      else if (EQ (flag, Qgnutls_pkcs_pkcs12_arcfour))
+       rv |= GNUTLS_PKCS_PKCS12_ARCFOUR;
+#endif
+#ifdef GNUTLS_PKCS_PKCS12_RC2_40
+      else if (EQ (flag, Qgnutls_pkcs_pkcs12_rc2_40))
+       rv |= GNUTLS_PKCS_PKCS12_RC2_40;
+#endif
+#ifdef GNUTLS_PKCS_PBES2_3DES
+      else if (EQ (flag, Qgnutls_pkcs_pbes2_3des))
+       rv |= GNUTLS_PKCS_PBES2_3DES;
+#endif
+#ifdef GNUTLS_PKCS_PBES2_AES_128
+      else if (EQ (flag, Qgnutls_pkcs_pbes2_aes_128))
+       rv |= GNUTLS_PKCS_PBES2_AES_128;
+#endif
+#ifdef GNUTLS_PKCS_PBES2_AES_192
+      else if (EQ (flag, Qgnutls_pkcs_pbes2_aes_192))
+       rv |= GNUTLS_PKCS_PBES2_AES_192;
+#endif
+#ifdef GNUTLS_PKCS_PBES2_AES_256
+      else if (EQ (flag, Qgnutls_pkcs_pbes2_aes_256))
+       rv |= GNUTLS_PKCS_PBES2_AES_256;
+#endif
+      else if (EQ (flag, Qgnutls_pkcs_null_password))
+       rv |= GNUTLS_PKCS_NULL_PASSWORD;
+#ifdef GNUTLS_PKCS_PBES2_DES
+      else if (EQ (flag, Qgnutls_pkcs_pbes2_des))
+       rv |= GNUTLS_PKCS_PBES2_DES;
+#endif
+#ifdef GNUTLS_PKCS_PBES1_DES_MD5
+      else if (EQ (flag, Qgnutls_pkcs_pbes1_des_md5))
+       rv |= GNUTLS_PKCS_PBES1_DES_MD5;
+#endif
+#ifdef GNUTLS_PKCS_PBES2_GOST_TC26Z
+      else if (EQ (flag, Qgnutls_pkcs_pbes2_gost_tc26z))
+       rv |= GNUTLS_PKCS_PBES2_GOST_TC26Z;
+#endif
+#ifdef GNUTLS_PKCS_PBES2_GOST_CPA
+      else if (EQ (flag, Qgnutls_pkcs_pbes2_gost_cpa))
+       rv |= GNUTLS_PKCS_PBES2_GOST_CPA;
+#endif
+#ifdef GNUTLS_PKCS_PBES2_GOST_CPB
+      else if (EQ (flag, Qgnutls_pkcs_pbes2_gost_cpb))
+       rv |= GNUTLS_PKCS_PBES2_GOST_CPB;
+#endif
+#ifdef GNUTLS_PKCS_PBES2_GOST_CPC
+      else if (EQ (flag, Qgnutls_pkcs_pbes2_gost_cpc))
+       rv |= GNUTLS_PKCS_PBES2_GOST_CPC;
+#endif
+#ifdef GNUTLS_PKCS_PBES2_GOST_CPD
+      else if (EQ (flag, Qgnutls_pkcs_pbes2_gost_cpd))
+       rv |= GNUTLS_PKCS_PBES2_GOST_CPD;
+#endif
+    }
+  return rv;
+}
+
+#endif /* HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2 */
+
 DEFUN ("gnutls-boot", Fgnutls_boot, Sgnutls_boot, 3, 3, 0,
        doc: /* Initialize GnuTLS client for process PROC with TYPE+PROPLIST.
 Currently only client mode is supported.  Return a success/failure
@@ -1813,6 +1907,22 @@ accept in Diffie-Hellman key exchange.
 :complete-negotiation, if non-nil, will make negotiation complete
 before returning even on non-blocking sockets.
 
+:pass, the password of the private key as per GnuTLS'
+gnutls_certificate_set_x509_key_file2.  Specify as nil to have a NULL
+password.
+
+:flags, a list of symbols relating to :pass, each specifying a flag:
+GNUTLS_PKCS_PLAIN, GNUTLS_PKCS_PKCS12_3DES,
+GNUTLS_PKCS_PKCS12_ARCFOUR, GNUTLS_PKCS_PKCS12_RC2_40,
+GNUTLS_PKCS_PBES2_3DES, GNUTLS_PKCS_PBES2_AES_128,
+GNUTLS_PKCS_PBES2_AES_192, GNUTLS_PKCS_PBES2_AES_256,
+GNUTLS_PKCS_NULL_PASSWORD, GNUTLS_PKCS_PBES2_DES,
+GNUTLS_PKCS_PBES2_DES_MD5, GNUTLS_PKCS_PBES2_GOST_TC26Z,
+GNUTLS_PKCS_PBES2_GOST_CPA, GNUTLS_PKCS_PBES2_GOST_CPB,
+GNUTLS_PKCS_PBES2_GOST_CPC, GNUTLS_PKCS_PBES2_GOST_CPD.  If not
+specified, or if nil, the bitflag with value 0 is used.
+Note that some of these are only supported since GnuTLS 3.6.3.
+
 The debug level will be set for this process AND globally for GnuTLS.
 So if you set it higher or lower at any point, it affects global
 debugging.
@@ -1825,6 +1935,9 @@ Processes must be initialized with this function before 
other GnuTLS
 functions are used.  This function allocates resources which can only
 be deallocated by calling `gnutls-deinit' or by calling it again.
 
+The :pass and :flags keys are ignored with old versions of GnuTLS, and
+:flags is ignored if :pass is not specified.
+
 The callbacks alist can have a `verify' key, associated with a
 verification function (UNUSED).
 
@@ -1842,16 +1955,22 @@ one trustfile (usually a CA bundle).  */)
   Lisp_Object global_init;
   char const *priority_string_ptr = "NORMAL"; /* default priority string.  */
   char *c_hostname;
+  const char *c_pass;
 
   /* Placeholders for the property list elements.  */
   Lisp_Object priority_string;
   Lisp_Object trustfiles;
   Lisp_Object crlfiles;
   Lisp_Object keylist;
+  Lisp_Object pass;
+  Lisp_Object flags;
   /* Lisp_Object callbacks; */
   Lisp_Object loglevel;
   Lisp_Object hostname;
   Lisp_Object prime_bits;
+#ifdef HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2
+  unsigned int aux_key_file;
+#endif
   struct Lisp_Process *p = XPROCESS (proc);
 
   CHECK_PROCESS (proc);
@@ -1877,6 +1996,13 @@ one trustfile (usually a CA bundle).  */)
   crlfiles              = plist_get (proplist, QCcrlfiles);
   loglevel              = plist_get (proplist, QCloglevel);
   prime_bits            = plist_get (proplist, QCmin_prime_bits);
+  pass                  = plist_get (proplist, QCpass);
+  flags                 = plist_get (proplist, QCflags);
+
+  if (STRINGP (pass))
+    c_pass = SSDATA (pass);
+  else
+    c_pass = NULL;
 
   if (!STRINGP (hostname))
     {
@@ -2037,6 +2163,20 @@ one trustfile (usually a CA bundle).  */)
 # ifdef WINDOWSNT
              keyfile = ansi_encode_filename (keyfile);
              certfile = ansi_encode_filename (certfile);
+# endif
+# ifdef HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2
+             if (!NILP (plist_member (proplist, QCpass)))
+               {
+                 aux_key_file = key_file2_aux (flags);
+                 ret
+                   = gnutls_certificate_set_x509_key_file2 (x509_cred,
+                                                            SSDATA (certfile),
+                                                            SSDATA (keyfile),
+                                                            file_format,
+                                                            c_pass,
+                                                            aux_key_file);
+               }
+             else
 # endif
              ret = gnutls_certificate_set_x509_key_file
                (x509_cred, SSDATA (certfile), SSDATA (keyfile), file_format);
@@ -2862,8 +3002,26 @@ level in the ones.  For builds without libgnutls, the 
value is -1.  */);
   DEFSYM (QCmin_prime_bits, ":min-prime-bits");
   DEFSYM (QCloglevel, ":loglevel");
   DEFSYM (QCcomplete_negotiation, ":complete-negotiation");
+  DEFSYM (QCpass, ":pass");
+  DEFSYM (QCflags, ":flags");
   DEFSYM (QCverify_flags, ":verify-flags");
   DEFSYM (QCverify_error, ":verify-error");
+  DEFSYM (Qgnutls_pkcs_plain, "GNUTLS_PKCS_PLAIN");
+  DEFSYM (Qgnutls_pkcs_pkcs12_3des, "GNUTLS_PKCS_PKCS12_3DES");
+  DEFSYM (Qgnutls_pkcs_pkcs12_arcfour, "GNUTLS_PKCS_PKCS12_ARCFOUR");
+  DEFSYM (Qgnutls_pkcs_pkcs12_rc2_40, "GNUTLS_PKCS_PKCS12_RC2_40");
+  DEFSYM (Qgnutls_pkcs_pbes2_3des, "GNUTLS_PKCS_PBES2_3DES");
+  DEFSYM (Qgnutls_pkcs_pbes2_aes_128, "GNUTLS_PKCS_PBES2_AES_128");
+  DEFSYM (Qgnutls_pkcs_pbes2_aes_192, "GNUTLS_PKCS_PBES2_AES_192");
+  DEFSYM (Qgnutls_pkcs_pbes2_aes_256, "GNUTLS_PKCS_PBES2_AES_256");
+  DEFSYM (Qgnutls_pkcs_null_password, "GNUTLS_PKCS_NULL_PASSWORD");
+  DEFSYM (Qgnutls_pkcs_pbes2_des, "GNUTLS_PKCS_PBES2_DES");
+  DEFSYM (Qgnutls_pkcs_pbes1_des_md5, "GNUTLS_PKCS_PBES1_DES_MD5");
+  DEFSYM (Qgnutls_pkcs_pbes2_gost_tc26z, "GNUTLS_PKCS_PBES2_GOST_TC26Z");
+  DEFSYM (Qgnutls_pkcs_pbes2_gost_cpa, "GNUTLS_PKCS_PBES2_GOST_CPA");
+  DEFSYM (Qgnutls_pkcs_pbes2_gost_cpb, "GNUTLS_PKCS_PBES2_GOST_CPB");
+  DEFSYM (Qgnutls_pkcs_pbes2_gost_cpc, "GNUTLS_PKCS_PBES2_GOST_CPC");
+  DEFSYM (Qgnutls_pkcs_pbes2_gost_cpd, "GNUTLS_PKCS_PBES2_GOST_CPD");
 
   DEFSYM (QCcipher_id, ":cipher-id");
   DEFSYM (QCcipher_aead_capable, ":cipher-aead-capable");
diff --git a/src/gnutls.h b/src/gnutls.h
index 19d3d3f5bc6..16bfebadee5 100644
--- a/src/gnutls.h
+++ b/src/gnutls.h
@@ -1,5 +1,5 @@
 /* GnuTLS glue for GNU Emacs.
-   Copyright (C) 2010-2022 Free Software Foundation, Inc.
+   Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 592bb497749..4cc0f9f15b4 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -1,6 +1,6 @@
 /* Functions for creating and updating GTK widgets.
 
-Copyright (C) 2003-2022 Free Software Foundation, Inc.
+Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/gtkutil.h b/src/gtkutil.h
index 190d6628314..acd6a3bfc8e 100644
--- a/src/gtkutil.h
+++ b/src/gtkutil.h
@@ -1,6 +1,6 @@
 /* Definitions and headers for GTK widgets.
 
-Copyright (C) 2003-2022 Free Software Foundation, Inc.
+Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haiku.c b/src/haiku.c
index 1c786012555..55c2cf04729 100644
--- a/src/haiku.c
+++ b/src/haiku.c
@@ -1,5 +1,5 @@
 /* Haiku subroutines that are general to the Haiku operating system.
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haiku_draw_support.cc b/src/haiku_draw_support.cc
index 8e911dd1843..b779b773dd5 100644
--- a/src/haiku_draw_support.cc
+++ b/src/haiku_draw_support.cc
@@ -1,5 +1,5 @@
 /* Haiku window system support.  Hey, Emacs, this is -*- C++ -*-
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haiku_font_support.cc b/src/haiku_font_support.cc
index 9a2492c9a13..1403c06a614 100644
--- a/src/haiku_font_support.cc
+++ b/src/haiku_font_support.cc
@@ -1,5 +1,5 @@
 /* Haiku window system support.  Hey, Emacs, this is -*- C++ -*-
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haiku_io.c b/src/haiku_io.c
index 6ef6f2ebd06..4f1b1435b4b 100644
--- a/src/haiku_io.c
+++ b/src/haiku_io.c
@@ -1,5 +1,5 @@
 /* Haiku window system support.
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haiku_select.cc b/src/haiku_select.cc
index 872da1d6c44..fe46075a007 100644
--- a/src/haiku_select.cc
+++ b/src/haiku_select.cc
@@ -1,5 +1,5 @@
 /* Haiku window system selection support. Hey Emacs, this is -*- C++ -*-
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haiku_support.cc b/src/haiku_support.cc
index 3a982856777..28d8fae39b7 100644
--- a/src/haiku_support.cc
+++ b/src/haiku_support.cc
@@ -1,5 +1,5 @@
 /* Haiku window system support.  Hey, Emacs, this is -*- C++ -*-
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haiku_support.h b/src/haiku_support.h
index 2605a75b400..564f61f57c7 100644
--- a/src/haiku_support.h
+++ b/src/haiku_support.h
@@ -1,5 +1,5 @@
 /* Haiku window system support.  Hey Emacs, this is -*- C++ -*-
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haikufns.c b/src/haikufns.c
index 5717d0354f8..b591c143900 100644
--- a/src/haikufns.c
+++ b/src/haikufns.c
@@ -1,5 +1,5 @@
 /* Haiku window system support
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -175,19 +175,17 @@ haiku_change_tool_bar_height (struct frame *f, int height)
 void
 haiku_change_tab_bar_height (struct frame *f, int height)
 {
-  int unit, old_height, lines;
-  Lisp_Object fullscreen;
-
-  unit = FRAME_LINE_HEIGHT (f);
-  old_height = FRAME_TAB_BAR_HEIGHT (f);
-  fullscreen = get_frame_param (f, Qfullscreen);
+  int unit = FRAME_LINE_HEIGHT (f);
+  int old_height = FRAME_TAB_BAR_HEIGHT (f);
 
   /* This differs from the tool bar code in that the tab bar height is
      not rounded up.  Otherwise, if redisplay_tab_bar decides to grow
      the tab bar by even 1 pixel, FRAME_TAB_BAR_LINES will be changed,
      leading to the tab bar height being incorrectly set upon the next
      call to x_set_font.  (bug#59285) */
-  lines = height / unit;
+  int lines = height / unit;
+  if (lines == 0 && height != 0)
+    lines = 1;
 
   /* Make sure we redisplay all windows in this frame.  */
   fset_redisplay (f);
@@ -208,6 +206,8 @@ haiku_change_tab_bar_height (struct frame *f, int height)
 
   if (!f->tab_bar_resized)
     {
+      Lisp_Object fullscreen = get_frame_param (f, Qfullscreen);
+
       /* As long as tab_bar_resized is false, effectively try to change
         F's native height.  */
       if (NILP (fullscreen) || EQ (fullscreen, Qfullwidth))
@@ -3245,7 +3245,7 @@ syms_of_haikufns (void)
 
   DEFVAR_LISP ("haiku-allowed-ui-colors", Vhaiku_allowed_ui_colors,
               doc: /* Vector of UI colors that Emacs can look up from the 
system.
-If this is set up incorrectly, Emacs can crash when encoutering an
+If this is set up incorrectly, Emacs can crash when encountering an
 invalid color.  */);
   Vhaiku_allowed_ui_colors = Qnil;
 
diff --git a/src/haikufont.c b/src/haikufont.c
index 335c312cebe..a025dec58bb 100644
--- a/src/haikufont.c
+++ b/src/haikufont.c
@@ -1,6 +1,6 @@
 /* Font support for Haiku windowing
 
-Copyright (C) 2021-2022 Free Software Foundation, Inc.
+Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -754,7 +754,7 @@ haikufont_encode_char (struct font *font, int c)
 }
 
 static Lisp_Object
-haikufont_open (struct frame *f, Lisp_Object font_entity, int x)
+haikufont_open (struct frame *f, Lisp_Object font_entity, int pixel_size)
 {
   struct haikufont_info *font_info;
   struct haiku_font_pattern ptn;
@@ -765,11 +765,19 @@ haikufont_open (struct frame *f, Lisp_Object font_entity, 
int x)
   int avg_width, height, space_width, ascent;
   int descent, underline_pos, underline_thickness;
 
-  if (x <= 0)
+  if (XFIXNUM (AREF (font_entity, FONT_SIZE_INDEX)) != 0)
+    pixel_size = XFIXNUM (AREF (font_entity, FONT_SIZE_INDEX));
+  else if (pixel_size == 0)
     {
-      /* Get pixel size from frame instead.  */
-      tem = get_frame_param (f, Qfontsize);
-      x = NILP (tem) ? 0 : XFIXNAT (tem);
+      /* Try to resolve a suitable size for the font, if the font size
+        has not already been specified.  First, if FRAME_FONT is set,
+        use its size.  Otherwise, use 12, which is the default on
+        Haiku.  */
+
+      if (FRAME_FONT (f))
+       pixel_size = FRAME_FONT (f)->pixel_size;
+      else
+       pixel_size = 12;
     }
 
   extra = AREF (font_entity, FONT_EXTRA_INDEX);
@@ -788,7 +796,8 @@ haikufont_open (struct frame *f, Lisp_Object font_entity, 
int x)
     {
       block_input ();
       be_font = be_open_font_at_index (XFIXNUM (XCAR (indices)),
-                                      XFIXNUM (XCDR (indices)), x);
+                                      XFIXNUM (XCDR (indices)),
+                                      pixel_size);
       unblock_input ();
 
       if (!be_font)
@@ -799,7 +808,7 @@ haikufont_open (struct frame *f, Lisp_Object font_entity, 
int x)
       block_input ();
       haikufont_spec_or_entity_to_pattern (font_entity, 1, &ptn);
 
-      if (BFont_open_pattern (&ptn, &be_font, x))
+      if (BFont_open_pattern (&ptn, &be_font, pixel_size))
        {
          haikufont_done_with_query_pattern (&ptn);
          unblock_input ();
@@ -813,7 +822,7 @@ haikufont_open (struct frame *f, Lisp_Object font_entity, 
int x)
   block_input ();
 
   font_object = font_make_object (VECSIZE (struct haikufont_info),
-                                 font_entity, x);
+                                 font_entity, pixel_size);
 
   ASET (font_object, FONT_TYPE_INDEX, Qhaiku);
   font_info = (struct haikufont_info *) XFONT_OBJECT (font_object);
diff --git a/src/haikugui.h b/src/haikugui.h
index 0dc127e6b63..8b144cc5e1d 100644
--- a/src/haikugui.h
+++ b/src/haikugui.h
@@ -1,5 +1,5 @@
 /* Haiku window system support
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haikuimage.c b/src/haikuimage.c
index af3021c5cd9..78c6732d94f 100644
--- a/src/haikuimage.c
+++ b/src/haikuimage.c
@@ -1,5 +1,5 @@
 /* Haiku window system support.
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haikumenu.c b/src/haikumenu.c
index 69bb56c124e..fab58946568 100644
--- a/src/haikumenu.c
+++ b/src/haikumenu.c
@@ -1,5 +1,5 @@
 /* Haiku window system support
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haikuselect.c b/src/haikuselect.c
index e8d3b5f0f7f..b57c336c264 100644
--- a/src/haikuselect.c
+++ b/src/haikuselect.c
@@ -1,5 +1,5 @@
 /* Haiku window system selection support.
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haikuselect.h b/src/haikuselect.h
index 42e9c93f7e9..28a1682e587 100644
--- a/src/haikuselect.h
+++ b/src/haikuselect.h
@@ -1,5 +1,5 @@
 /* Haiku window system selection support. Hey Emacs, this is -*- C++ -*-
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haikuterm.c b/src/haikuterm.c
index 496480cbc09..8733b82fb2b 100644
--- a/src/haikuterm.c
+++ b/src/haikuterm.c
@@ -1,5 +1,5 @@
 /* Haiku window system support
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haikuterm.h b/src/haikuterm.h
index 70e8cf948bf..4d8d2678e82 100644
--- a/src/haikuterm.h
+++ b/src/haikuterm.h
@@ -1,5 +1,5 @@
 /* Haiku window system support
-   Copyright (C) 2021-2022 Free Software Foundation, Inc.
+   Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/hbfont.c b/src/hbfont.c
index 476e08020e1..86ba9eea1ac 100644
--- a/src/hbfont.c
+++ b/src/hbfont.c
@@ -1,5 +1,5 @@
 /* hbfont.c -- Platform-independent support for HarfBuzz font driver.
-   Copyright (C) 2019-2022 Free Software Foundation, Inc.
+   Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/image.c b/src/image.c
index b881e43e951..e78c0abb0db 100644
--- a/src/image.c
+++ b/src/image.c
@@ -1,6 +1,6 @@
 /* Functions for image support on window system.
 
-Copyright (C) 1989-2022 Free Software Foundation, Inc.
+Copyright (C) 1989-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/indent.c b/src/indent.c
index a444fcc2091..4cd3206a9c1 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -1,5 +1,5 @@
 /* Indentation functions.
-   Copyright (C) 1985-1988, 1993-1995, 1998, 2000-2022 Free Software
+   Copyright (C) 1985-1988, 1993-1995, 1998, 2000-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -887,6 +887,8 @@ DEFUN ("indent-to", Findent_to, Sindent_to, 1, 2, "NIndent 
to column: ",
 Optional second argument MINIMUM says always do at least MINIMUM spaces
 even if that goes past COLUMN; by default, MINIMUM is zero.
 
+Whether this uses tabs or spaces depends on `indent-tabs-mode'.
+
 The return value is the column where the insertion ends.  */)
   (Lisp_Object column, Lisp_Object minimum)
 {
diff --git a/src/indent.h b/src/indent.h
index cc4365f41f1..7bcecb3fdd5 100644
--- a/src/indent.h
+++ b/src/indent.h
@@ -1,5 +1,5 @@
 /* Definitions for interface to indent.c
-   Copyright (C) 1985-1986, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1985-1986, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/inotify.c b/src/inotify.c
index 16d20e7e925..7562ffb1701 100644
--- a/src/inotify.c
+++ b/src/inotify.c
@@ -1,6 +1,6 @@
 /* Inotify support for Emacs
 
-Copyright (C) 2012-2022 Free Software Foundation, Inc.
+Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/insdel.c b/src/insdel.c
index d483736c039..b51767bf527 100644
--- a/src/insdel.c
+++ b/src/insdel.c
@@ -1,5 +1,5 @@
 /* Buffer insertion/deletion and gap motion for GNU Emacs. -*- coding: utf-8 
-*-
-   Copyright (C) 1985-1986, 1993-1995, 1997-2022 Free Software
+   Copyright (C) 1985-1986, 1993-1995, 1997-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/intervals.c b/src/intervals.c
index 78f4f6b6174..75e37a8c90c 100644
--- a/src/intervals.c
+++ b/src/intervals.c
@@ -1,5 +1,5 @@
 /* Code for doing intervals.
-   Copyright (C) 1993-1995, 1997-1998, 2001-2022 Free Software
+   Copyright (C) 1993-1995, 1997-1998, 2001-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/intervals.h b/src/intervals.h
index 0ce581208e3..8af92223773 100644
--- a/src/intervals.h
+++ b/src/intervals.h
@@ -1,5 +1,5 @@
 /* Definitions and global variables for intervals.
-   Copyright (C) 1993-1994, 2000-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 2000-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/itree.c b/src/itree.c
index 688d5c82476..bd3e62a374a 100644
--- a/src/itree.c
+++ b/src/itree.c
@@ -1,6 +1,6 @@
 /* This file implements an efficient interval data-structure.
 
-Copyright (C) 2017-2022  Free Software Foundation, Inc.
+Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -85,7 +85,7 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
    this narrowing is O(K*log(N)) where K is the size of the result
    set.  If we are interested in finding the node in a range with the
    smallest END, we might have to examine all K nodes in that range.
-   In the case of the *-overlay-channge functions, K may well be equal
+   In the case of the *-overlay-change functions, K may well be equal
    to N.
 
    Ideally, a tree based data structure for overlays would have
diff --git a/src/itree.h b/src/itree.h
index f1e2bf3bfde..79d03d31ce2 100644
--- a/src/itree.h
+++ b/src/itree.h
@@ -1,6 +1,6 @@
 /* This file implements an efficient interval data-structure.
 
-Copyright (C) 2017-2022  Free Software Foundation, Inc.
+Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/json.c b/src/json.c
index cdcc11358e6..f7979fb446e 100644
--- a/src/json.c
+++ b/src/json.c
@@ -1,6 +1,6 @@
 /* JSON parsing and serialization.
 
-Copyright (C) 2017-2022 Free Software Foundation, Inc.
+Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -555,6 +555,40 @@ json_parse_args (ptrdiff_t nargs,
   }
 }
 
+static bool
+json_available_p (void)
+{
+#ifdef WINDOWSNT
+  if (!json_initialized)
+    {
+      Lisp_Object status;
+      json_initialized = init_json_functions ();
+      status = json_initialized ? Qt : Qnil;
+      Vlibrary_cache = Fcons (Fcons (Qjson, status), Vlibrary_cache);
+    }
+  return json_initialized;
+#else  /* !WINDOWSNT */
+  return true;
+#endif
+}
+
+#ifdef WINDOWSNT
+static void
+ensure_json_available (void)
+{
+  if (!json_available_p ())
+    Fsignal (Qjson_unavailable,
+            list1 (build_unibyte_string ("jansson library not found")));
+}
+#endif
+
+DEFUN ("json--available-p", Fjson__available_p, Sjson__available_p, 0, 0, NULL,
+       doc: /* Return non-nil if libjansson is available (internal use only).  
*/)
+  (void)
+{
+  return json_available_p () ? Qt : Qnil;
+}
+
 DEFUN ("json-serialize", Fjson_serialize, Sjson_serialize, 1, MANY,
        NULL,
        doc: /* Return the JSON representation of OBJECT as a string.
@@ -587,16 +621,7 @@ usage: (json-serialize OBJECT &rest ARGS)  */)
   specpdl_ref count = SPECPDL_INDEX ();
 
 #ifdef WINDOWSNT
-  if (!json_initialized)
-    {
-      Lisp_Object status;
-      json_initialized = init_json_functions ();
-      status = json_initialized ? Qt : Qnil;
-      Vlibrary_cache = Fcons (Fcons (Qjson, status), Vlibrary_cache);
-    }
-  if (!json_initialized)
-    Fsignal (Qjson_unavailable,
-            list1 (build_unibyte_string ("jansson library not found")));
+  ensure_json_available ();
 #endif
 
   struct json_configuration conf =
@@ -696,16 +721,7 @@ usage: (json-insert OBJECT &rest ARGS)  */)
   specpdl_ref count = SPECPDL_INDEX ();
 
 #ifdef WINDOWSNT
-  if (!json_initialized)
-    {
-      Lisp_Object status;
-      json_initialized = init_json_functions ();
-      status = json_initialized ? Qt : Qnil;
-      Vlibrary_cache = Fcons (Fcons (Qjson, status), Vlibrary_cache);
-    }
-  if (!json_initialized)
-    Fsignal (Qjson_unavailable,
-            list1 (build_unibyte_string ("jansson library not found")));
+  ensure_json_available ();
 #endif
 
   struct json_configuration conf =
@@ -953,16 +969,7 @@ usage: (json-parse-string STRING &rest ARGS) */)
   specpdl_ref count = SPECPDL_INDEX ();
 
 #ifdef WINDOWSNT
-  if (!json_initialized)
-    {
-      Lisp_Object status;
-      json_initialized = init_json_functions ();
-      status = json_initialized ? Qt : Qnil;
-      Vlibrary_cache = Fcons (Fcons (Qjson, status), Vlibrary_cache);
-    }
-  if (!json_initialized)
-    Fsignal (Qjson_unavailable,
-            list1 (build_unibyte_string ("jansson library not found")));
+  ensure_json_available ();
 #endif
 
   Lisp_Object string = args[0];
@@ -1050,16 +1057,7 @@ usage: (json-parse-buffer &rest args) */)
   specpdl_ref count = SPECPDL_INDEX ();
 
 #ifdef WINDOWSNT
-  if (!json_initialized)
-    {
-      Lisp_Object status;
-      json_initialized = init_json_functions ();
-      status = json_initialized ? Qt : Qnil;
-      Vlibrary_cache = Fcons (Fcons (Qjson, status), Vlibrary_cache);
-    }
-  if (!json_initialized)
-    Fsignal (Qjson_unavailable,
-            list1 (build_unibyte_string ("jansson library not found")));
+  ensure_json_available ();
 #endif
 
   struct json_configuration conf =
@@ -1137,6 +1135,7 @@ syms_of_json (void)
   DEFSYM (Qplist, "plist");
   DEFSYM (Qarray, "array");
 
+  defsubr (&Sjson__available_p);
   defsubr (&Sjson_serialize);
   defsubr (&Sjson_insert);
   defsubr (&Sjson_parse_string);
diff --git a/src/keyboard.c b/src/keyboard.c
index d68b50428a9..0ed28070335 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -1,6 +1,6 @@
 /* Keyboard and mouse input; editor command loop.
 
-Copyright (C) 1985-1989, 1993-1997, 1999-2022 Free Software Foundation,
+Copyright (C) 1985-1989, 1993-1997, 1999-2023 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -503,11 +503,10 @@ echo_add_key (Lisp_Object c)
   if ((NILP (echo_string) || SCHARS (echo_string) == 0)
       && help_char_p (c))
     {
-      AUTO_STRING (str, " (Type ? for further options, q for quick help)");
+      AUTO_STRING (str, " (Type ? for further options, C-q for quick help)");
       AUTO_LIST2 (props, Qface, Qhelp_key_binding);
       Fadd_text_properties (make_fixnum (7), make_fixnum (8), props, str);
-      Fadd_text_properties (make_fixnum (30), make_fixnum (31), props,
-str);
+      Fadd_text_properties (make_fixnum (30), make_fixnum (33), props, str);
       new_string = concat2 (new_string, str);
     }
 
diff --git a/src/keyboard.h b/src/keyboard.h
index 507d80c2975..3f86a8e03ad 100644
--- a/src/keyboard.h
+++ b/src/keyboard.h
@@ -1,5 +1,5 @@
 /* Declarations useful when processing input.
-   Copyright (C) 1985-1987, 1993, 2001-2022 Free Software Foundation,
+   Copyright (C) 1985-1987, 1993, 2001-2023 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/keymap.c b/src/keymap.c
index 506b755e5da..23453eaa9a6 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -1,5 +1,5 @@
 /* Manipulation of keymaps
-   Copyright (C) 1985-1988, 1993-1995, 1998-2022 Free Software
+   Copyright (C) 1985-1988, 1993-1995, 1998-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/keymap.h b/src/keymap.h
index 3c6aede9f1d..65be3addbdb 100644
--- a/src/keymap.h
+++ b/src/keymap.h
@@ -1,5 +1,5 @@
 /* Functions to manipulate keymaps.
-   Copyright (C) 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/kqueue.c b/src/kqueue.c
index 99a9434cc2e..22c279b7ce3 100644
--- a/src/kqueue.c
+++ b/src/kqueue.c
@@ -1,6 +1,6 @@
 /* Filesystem notifications support with kqueue API.
 
-Copyright (C) 2015-2022 Free Software Foundation, Inc.
+Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/lastfile.c b/src/lastfile.c
index 4960131a470..b80cdbc8fa6 100644
--- a/src/lastfile.c
+++ b/src/lastfile.c
@@ -1,5 +1,5 @@
 /* Mark end of data space to dump as pure, for GNU Emacs.
-   Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1985, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/lcms.c b/src/lcms.c
index 78001c9cbc9..e603573043e 100644
--- a/src/lcms.c
+++ b/src/lcms.c
@@ -1,5 +1,5 @@
 /* Interface to Little CMS
-   Copyright (C) 2017-2022 Free Software Foundation, Inc.
+   Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/lisp.h b/src/lisp.h
index a0b42c3a6a3..e33c08958ab 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -1,6 +1,6 @@
 /* Fundamental definitions for GNU Emacs Lisp interpreter. -*- coding: utf-8 
-*-
 
-Copyright (C) 1985-2022  Free Software Foundation, Inc.
+Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -22,7 +22,6 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 
 #include <alloca.h>
 #include <setjmp.h>
-#include <stdalign.h>
 #include <stdarg.h>
 #include <stddef.h>
 #include <string.h>
diff --git a/src/lread.c b/src/lread.c
index d838a18de5a..d0dc85f51c8 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -1,6 +1,6 @@
 /* Lisp parsing and input streams.
 
-Copyright (C) 1985-1989, 1993-1995, 1997-2022 Free Software Foundation,
+Copyright (C) 1985-1989, 1993-1995, 1997-2023 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/macfont.h b/src/macfont.h
index e57d0193fb1..8afba70e711 100644
--- a/src/macfont.h
+++ b/src/macfont.h
@@ -1,5 +1,5 @@
 /* Interface definition for macOS Core text font backend.
-   Copyright (C) 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/macfont.m b/src/macfont.m
index 4de056cb361..d0cdbcd08c7 100644
--- a/src/macfont.m
+++ b/src/macfont.m
@@ -1,5 +1,5 @@
 /* Font driver on macOS Core text.
-   Copyright (C) 2009-2022 Free Software Foundation, Inc.
+   Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/macros.c b/src/macros.c
index 6b6865d9298..0db0af89a71 100644
--- a/src/macros.c
+++ b/src/macros.c
@@ -1,6 +1,6 @@
 /* Keyboard macros.
 
-Copyright (C) 1985-1986, 1993, 2000-2022 Free Software Foundation, Inc.
+Copyright (C) 1985-1986, 1993, 2000-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/macros.h b/src/macros.h
index 10f4207b722..a7c42f753b4 100644
--- a/src/macros.h
+++ b/src/macros.h
@@ -1,5 +1,5 @@
 /* Definitions for keyboard macro interpretation in GNU Emacs.
-   Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1985, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/marker.c b/src/marker.c
index 0ed1e55ddc9..e42c49a5434 100644
--- a/src/marker.c
+++ b/src/marker.c
@@ -1,5 +1,5 @@
 /* Markers: examining, setting and deleting.
-   Copyright (C) 1985, 1997-1998, 2001-2022 Free Software Foundation,
+   Copyright (C) 1985, 1997-1998, 2001-2023 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/menu.c b/src/menu.c
index a8cb942a195..73d4215b94b 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -1,6 +1,6 @@
 /* Platform-independent code for terminal communications.
 
-Copyright (C) 1986, 1988, 1993-1994, 1996, 1999-2022 Free Software
+Copyright (C) 1986, 1988, 1993-1994, 1996, 1999-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/menu.h b/src/menu.h
index 836172b58f2..ff27509da44 100644
--- a/src/menu.h
+++ b/src/menu.h
@@ -1,5 +1,5 @@
 /* Functions to manipulate menus.
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/minibuf.c b/src/minibuf.c
index 3f34b1b0834..d5f95968ae1 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -1,6 +1,6 @@
 /* Minibuffer input and completion.
 
-Copyright (C) 1985-1986, 1993-2022 Free Software Foundation, Inc.
+Copyright (C) 1985-1986, 1993-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/msdos.c b/src/msdos.c
index 1d3fdd528d7..75a39045cee 100644
--- a/src/msdos.c
+++ b/src/msdos.c
@@ -1,6 +1,6 @@
 /* MS-DOS specific C utilities.          -*- coding: cp850 -*-
 
-Copyright (C) 1993-1997, 1999-2022 Free Software Foundation, Inc.
+Copyright (C) 1993-1997, 1999-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/msdos.h b/src/msdos.h
index 1b304cf02b9..94878d25b35 100644
--- a/src/msdos.h
+++ b/src/msdos.h
@@ -1,5 +1,5 @@
 /* MS-DOS specific C utilities, interface.
-   Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/nsfns.m b/src/nsfns.m
index d793bcf13ff..8804a7df7cf 100644
--- a/src/nsfns.m
+++ b/src/nsfns.m
@@ -1,6 +1,6 @@
 /* Functions for the NeXT/Open/GNUstep and macOS window system.
 
-Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2022 Free Software
+Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -632,19 +632,17 @@ ns_set_menu_bar_lines (struct frame *f, Lisp_Object 
value, Lisp_Object oldval)
 void
 ns_change_tab_bar_height (struct frame *f, int height)
 {
-  int unit, old_height, lines;
-  Lisp_Object fullscreen;
-
-  unit = FRAME_LINE_HEIGHT (f);
-  old_height = FRAME_TAB_BAR_HEIGHT (f);
-  fullscreen = get_frame_param (f, Qfullscreen);
+  int unit = FRAME_LINE_HEIGHT (f);
+  int old_height = FRAME_TAB_BAR_HEIGHT (f);
 
   /* This differs from the tool bar code in that the tab bar height is
      not rounded up.  Otherwise, if redisplay_tab_bar decides to grow
      the tab bar by even 1 pixel, FRAME_TAB_BAR_LINES will be changed,
      leading to the tab bar height being incorrectly set upon the next
      call to x_set_font.  (bug#59285) */
-  lines = height / unit;
+  int lines = height / unit;
+  if (lines == 0 && height != 0)
+    lines = 1;
 
   /* Make sure we redisplay all windows in this frame.  */
   fset_redisplay (f);
@@ -665,6 +663,8 @@ ns_change_tab_bar_height (struct frame *f, int height)
 
   if (!f->tab_bar_resized)
     {
+      Lisp_Object fullscreen = get_frame_param (f, Qfullscreen);
+
       /* As long as tab_bar_resized is false, effectively try to change
         F's native height.  */
       if (NILP (fullscreen) || EQ (fullscreen, Qfullwidth))
diff --git a/src/nsfont.m b/src/nsfont.m
index d072b5ce779..eaa5c771457 100644
--- a/src/nsfont.m
+++ b/src/nsfont.m
@@ -1,6 +1,6 @@
 /* Font back-end driver for the GNUstep window system.
    See font.h
-   Copyright (C) 2006-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/nsgui.h b/src/nsgui.h
index 0ba1fce80bd..469aef13070 100644
--- a/src/nsgui.h
+++ b/src/nsgui.h
@@ -1,5 +1,5 @@
 /* Definitions and headers for communication on the NeXT/Open/GNUstep API.
-   Copyright (C) 1995, 2005, 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2005, 2008-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/nsimage.m b/src/nsimage.m
index dd8768664a4..af8eb629989 100644
--- a/src/nsimage.m
+++ b/src/nsimage.m
@@ -1,5 +1,5 @@
 /* Image support for the NeXT/Open/GNUstep and macOS window system.
-   Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2022 Free Software
+   Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/nsmenu.m b/src/nsmenu.m
index b06f737bacf..2c1f575bdf2 100644
--- a/src/nsmenu.m
+++ b/src/nsmenu.m
@@ -1,5 +1,5 @@
 /* NeXT/Open/GNUstep and macOS Cocoa menu and toolbar module.
-   Copyright (C) 2007-2022 Free Software Foundation, Inc.
+   Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/nsselect.m b/src/nsselect.m
index 5b47d746122..120bce75bce 100644
--- a/src/nsselect.m
+++ b/src/nsselect.m
@@ -1,5 +1,5 @@
 /* NeXT/Open/GNUstep / macOS Cocoa selection processing for emacs.
-   Copyright (C) 1993-1994, 2005-2006, 2008-2022 Free Software
+   Copyright (C) 1993-1994, 2005-2006, 2008-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/nsterm.h b/src/nsterm.h
index 2a4c7571a34..b6e5a813a6d 100644
--- a/src/nsterm.h
+++ b/src/nsterm.h
@@ -1,6 +1,6 @@
 /* -*- objc -*- */
 /* Definitions and headers for communication with NeXT/Open/GNUstep API.
-   Copyright (C) 1989, 1993, 2005, 2008-2022 Free Software Foundation,
+   Copyright (C) 1989, 1993, 2005, 2008-2023 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/nsterm.m b/src/nsterm.m
index 507f2a9e7da..0e75cbf3f0f 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -1,6 +1,6 @@
 /* NeXT/Open/GNUstep / macOS communication module.      -*- coding: utf-8 -*-
 
-Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2022 Free Software
+Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/nsxwidget.h b/src/nsxwidget.h
index 666509744a6..8d55fac5326 100644
--- a/src/nsxwidget.h
+++ b/src/nsxwidget.h
@@ -1,6 +1,6 @@
 /* Header for NS Cocoa part of xwidget and webkit widget.
 
-Copyright (C) 2019-2022 Free Software Foundation, Inc.
+Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/nsxwidget.m b/src/nsxwidget.m
index be0eba0bcb1..e1fbd749b62 100644
--- a/src/nsxwidget.m
+++ b/src/nsxwidget.m
@@ -1,6 +1,6 @@
 /* NS Cocoa part implementation of xwidget and webkit widget.
 
-Copyright (C) 2019-2022 Free Software Foundation, Inc.
+Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/pdumper.c b/src/pdumper.c
index 70f90f0d8aa..d228ba97b38 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2018-2022 Free Software Foundation, Inc.
+/* Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/pdumper.h b/src/pdumper.h
index ffc743df423..44985e26b3e 100644
--- a/src/pdumper.h
+++ b/src/pdumper.h
@@ -1,6 +1,6 @@
 /* Header file for the portable dumper.
 
-Copyright (C) 2016, 2018-2022 Free Software Foundation, Inc.
+Copyright (C) 2016, 2018-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/pgtkfns.c b/src/pgtkfns.c
index a32067af818..6b3a0459d36 100644
--- a/src/pgtkfns.c
+++ b/src/pgtkfns.c
@@ -1,7 +1,7 @@
 /* Functions for the pure Gtk+-3.
 
-Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2020, 2022 Free Software
-Foundation, Inc.
+Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2020, 2022-2023 Free
+Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -473,19 +473,17 @@ pgtk_set_tab_bar_lines (struct frame *f, Lisp_Object 
value, Lisp_Object oldval)
 void
 pgtk_change_tab_bar_height (struct frame *f, int height)
 {
-  int unit, old_height, lines;
-  Lisp_Object fullscreen;
-
-  unit = FRAME_LINE_HEIGHT (f);
-  old_height = FRAME_TAB_BAR_HEIGHT (f);
-  fullscreen = get_frame_param (f, Qfullscreen);
+  int unit = FRAME_LINE_HEIGHT (f);
+  int old_height = FRAME_TAB_BAR_HEIGHT (f);
 
   /* This differs from the tool bar code in that the tab bar height is
      not rounded up.  Otherwise, if redisplay_tab_bar decides to grow
      the tab bar by even 1 pixel, FRAME_TAB_BAR_LINES will be changed,
      leading to the tab bar height being incorrectly set upon the next
      call to x_set_font.  (bug#59285) */
-  lines = height / unit;
+  int lines = height / unit;
+  if (lines == 0 && height != 0)
+    lines = 1;
 
   /* Make sure we redisplay all windows in this frame.  */
   fset_redisplay (f);
@@ -506,6 +504,8 @@ pgtk_change_tab_bar_height (struct frame *f, int height)
 
   if (!f->tab_bar_resized)
     {
+      Lisp_Object fullscreen = get_frame_param (f, Qfullscreen);
+
       /* As long as tab_bar_resized is false, effectively try to change
         F's native height.  */
       if (NILP (fullscreen) || EQ (fullscreen, Qfullwidth))
diff --git a/src/pgtkgui.h b/src/pgtkgui.h
index 389052631c8..4d38e0abc63 100644
--- a/src/pgtkgui.h
+++ b/src/pgtkgui.h
@@ -1,5 +1,5 @@
 /* Definitions and headers for communication on the pure Gtk+3.
-   Copyright (C) 1995, 2005, 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2005, 2008-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/pgtkim.c b/src/pgtkim.c
index e1fffafb611..9123186cf57 100644
--- a/src/pgtkim.c
+++ b/src/pgtkim.c
@@ -1,6 +1,6 @@
 /* Pure Gtk+-3 communication module.
 
-Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2022 Free Software
+Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/pgtkmenu.c b/src/pgtkmenu.c
index d147f4b4168..31572f738c4 100644
--- a/src/pgtkmenu.c
+++ b/src/pgtkmenu.c
@@ -1,5 +1,5 @@
 /* Pure GTK3 menu and toolbar module.
-   Copyright (C) 2019-2022 Free Software Foundation, Inc.
+   Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/pgtkselect.c b/src/pgtkselect.c
index 212bbd56aa4..58d5035abed 100644
--- a/src/pgtkselect.c
+++ b/src/pgtkselect.c
@@ -1,5 +1,5 @@
 /* Gtk selection processing for emacs.
-   Copyright (C) 1993-1994, 2005-2006, 2008-2022 Free Software
+   Copyright (C) 1993-1994, 2005-2006, 2008-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/pgtkterm.c b/src/pgtkterm.c
index 13f6c6c3c4d..5158492ca09 100644
--- a/src/pgtkterm.c
+++ b/src/pgtkterm.c
@@ -1,6 +1,6 @@
 /* Communication module for window systems using GTK.
 
-Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2022 Free Software
+Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/pgtkterm.h b/src/pgtkterm.h
index b6bd10dcb41..202c6622ce3 100644
--- a/src/pgtkterm.h
+++ b/src/pgtkterm.h
@@ -1,5 +1,5 @@
 /* Definitions and headers for communication with pure Gtk+3.
-   Copyright (C) 1989, 1993, 2005, 2008-2022 Free Software Foundation,
+   Copyright (C) 1989, 1993, 2005, 2008-2023 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/print.c b/src/print.c
index d8f87c63036..d4a9ff89246 100644
--- a/src/print.c
+++ b/src/print.c
@@ -1,6 +1,6 @@
 /* Lisp object printing and output streams.
 
-Copyright (C) 1985-2022  Free Software Foundation, Inc.
+Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/process.c b/src/process.c
index 03bd272f683..d568d62c22a 100644
--- a/src/process.c
+++ b/src/process.c
@@ -1,6 +1,6 @@
 /* Asynchronous subprocess control for GNU Emacs.
 
-Copyright (C) 1985-1988, 1993-1996, 1998-1999, 2001-2022 Free Software
+Copyright (C) 1985-1988, 1993-1996, 1998-1999, 2001-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -6792,10 +6792,13 @@ emacs_get_tty_pgrp (struct Lisp_Process *p)
 
 DEFUN ("process-running-child-p", Fprocess_running_child_p,
        Sprocess_running_child_p, 0, 1, 0,
-       doc: /* Return non-nil if PROCESS has given the terminal to a
-child.  If the operating system does not make it possible to find out,
-return t.  If we can find out, return the numeric ID of the foreground
-process group.  */)
+       doc: /* Return non-nil if PROCESS has given control of its terminal to 
a child.
+If the operating system does not make it possible to find out, return t.
+If it's possible to find out, return the numeric ID of the foreground
+process group if PROCESS did give control of its terminal to a
+child process, and return nil if it didn't.
+
+PROCESS must be a real subprocess, not a connection.  */)
   (Lisp_Object process)
 {
   /* Initialize in case ioctl doesn't exist or gives an error,
diff --git a/src/process.h b/src/process.h
index 92baf0c4cb9..bbe4528dc31 100644
--- a/src/process.h
+++ b/src/process.h
@@ -1,5 +1,5 @@
 /* Definitions for asynchronous process control in GNU Emacs.
-   Copyright (C) 1985, 1994, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1994, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/profiler.c b/src/profiler.c
index 5cb42d54fa6..81b5e7b0cf0 100644
--- a/src/profiler.c
+++ b/src/profiler.c
@@ -1,6 +1,6 @@
 /* Profiler implementation.
 
-Copyright (C) 2012-2022 Free Software Foundation, Inc.
+Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/puresize.h b/src/puresize.h
index 37784784c38..dc0354878bd 100644
--- a/src/puresize.h
+++ b/src/puresize.h
@@ -1,5 +1,5 @@
 /* How much read-only Lisp storage a dumped Emacs needs.
-   Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/ralloc.c b/src/ralloc.c
index 22a5f5bc5a7..1b8d26d1244 100644
--- a/src/ralloc.c
+++ b/src/ralloc.c
@@ -1,5 +1,5 @@
 /* Block-relocating memory allocator.
-   Copyright (C) 1993, 1995, 2000-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1995, 2000-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/regex-emacs.c b/src/regex-emacs.c
index 626560911f6..6b2fa5df037 100644
--- a/src/regex-emacs.c
+++ b/src/regex-emacs.c
@@ -1,6 +1,6 @@
 /* Emacs regular expression matching and search
 
-   Copyright (C) 1993-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993-2023 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/src/regex-emacs.h b/src/regex-emacs.h
index 59579a1a8b9..1bc973363e9 100644
--- a/src/regex-emacs.h
+++ b/src/regex-emacs.h
@@ -1,6 +1,6 @@
 /* Emacs regular expression API
 
-   Copyright (C) 1985, 1989-1993, 1995, 2000-2022 Free Software
+   Copyright (C) 1985, 1989-1993, 1995, 2000-2023 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
diff --git a/src/region-cache.c b/src/region-cache.c
index 20fb14b671a..cbf6b7b1cee 100644
--- a/src/region-cache.c
+++ b/src/region-cache.c
@@ -1,6 +1,6 @@
 /* Caching facts about regions of the buffer, for optimization.
 
-Copyright (C) 1985-1989, 1993, 1995, 2001-2022 Free Software Foundation,
+Copyright (C) 1985-1989, 1993, 1995, 2001-2023 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/region-cache.h b/src/region-cache.h
index dc732328c88..bdf132dc2d8 100644
--- a/src/region-cache.h
+++ b/src/region-cache.h
@@ -1,6 +1,6 @@
 /* Header file: Caching facts about regions of the buffer, for optimization.
 
-Copyright (C) 1985-1986, 1993, 1995, 2001-2022 Free Software Foundation,
+Copyright (C) 1985-1986, 1993, 1995, 2001-2023 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/scroll.c b/src/scroll.c
index c643730965d..eee1ad80950 100644
--- a/src/scroll.c
+++ b/src/scroll.c
@@ -1,6 +1,6 @@
 /* Calculate what line insertion or deletion to do, and do it
 
-Copyright (C) 1985-1986, 1990, 1993-1994, 2001-2022 Free Software
+Copyright (C) 1985-1986, 1990, 1993-1994, 2001-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/search.c b/src/search.c
index 242681bbba0..dbc5a83946f 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1,6 +1,6 @@
 /* String search routines for GNU Emacs.
 
-Copyright (C) 1985-1987, 1993-1994, 1997-1999, 2001-2022 Free Software
+Copyright (C) 1985-1987, 1993-1994, 1997-1999, 2001-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/sheap.c b/src/sheap.c
index 1ec1f699cec..9ea0d91ef75 100644
--- a/src/sheap.c
+++ b/src/sheap.c
@@ -1,7 +1,7 @@
 /* simulate `sbrk' with an array in .bss, for `unexec' support for Cygwin;
    complete rewrite of xemacs Cygwin `unexec' code
 
-   Copyright (C) 2004-2022 Free Software Foundation, Inc.
+   Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/sheap.h b/src/sheap.h
index cef111bc2f9..b62adf4318f 100644
--- a/src/sheap.h
+++ b/src/sheap.h
@@ -1,6 +1,6 @@
 /* Static heap allocation for GNU Emacs.
 
-Copyright 2016-2022 Free Software Foundation, Inc.
+Copyright 2016-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/sort.c b/src/sort.c
index d10ae692d33..34d0d690198 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -1,6 +1,6 @@
 /* Timsort for sequences.
 
-Copyright (C) 2022 Free Software Foundation, Inc.
+Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/sound.c b/src/sound.c
index 0a307828008..145100cd433 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -1,6 +1,6 @@
 /* sound.c -- sound support.
 
-Copyright (C) 1998-1999, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1998-1999, 2001-2023 Free Software Foundation, Inc.
 
 Author: Gerd Moellmann <gerd@gnu.org>
 
diff --git a/src/sqlite.c b/src/sqlite.c
index d9b9333fb3c..c96841e63f9 100644
--- a/src/sqlite.c
+++ b/src/sqlite.c
@@ -1,6 +1,6 @@
 /* Support for accessing SQLite databases.
 
-Copyright (C) 2021-2022 Free Software Foundation, Inc.
+Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/syntax.c b/src/syntax.c
index 15625b4d0e2..79e16f652f3 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -1,5 +1,5 @@
 /* GNU Emacs routines to deal with syntax tables; also word and list parsing.
-   Copyright (C) 1985, 1987, 1993-1995, 1997-1999, 2001-2022 Free
+   Copyright (C) 1985, 1987, 1993-1995, 1997-1999, 2001-2023 Free
    Software Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/syntax.h b/src/syntax.h
index 5949a95a73b..9eb8701628b 100644
--- a/src/syntax.h
+++ b/src/syntax.h
@@ -1,6 +1,6 @@
 /* Declarations having to do with GNU Emacs syntax tables.
 
-Copyright (C) 1985, 1993-1994, 1997-1998, 2001-2022 Free Software
+Copyright (C) 1985, 1993-1994, 1997-1998, 2001-2023 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/sysdep.c b/src/sysdep.c
index 8402ffe308c..a5b3117d262 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -1,5 +1,5 @@
 /* Interfaces to system-dependent kernel and library entries.
-   Copyright (C) 1985-1988, 1993-1995, 1999-2022 Free Software
+   Copyright (C) 1985-1988, 1993-1995, 1999-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/sysselect.h b/src/sysselect.h
index 45cc22bc4cb..6cde52911f4 100644
--- a/src/sysselect.h
+++ b/src/sysselect.h
@@ -1,5 +1,5 @@
 /* sysselect.h - System-dependent definitions for the select function.
-   Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/syssignal.h b/src/syssignal.h
index 02fe44a3820..6aa3572b903 100644
--- a/src/syssignal.h
+++ b/src/syssignal.h
@@ -1,6 +1,6 @@
 /* syssignal.h - System-dependent definitions for signals.
 
-Copyright (C) 1993, 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1993, 1999, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/sysstdio.h b/src/sysstdio.h
index efedc3e450b..5a973c833cc 100644
--- a/src/sysstdio.h
+++ b/src/sysstdio.h
@@ -1,6 +1,6 @@
 /* Standard I/O for Emacs.
 
-Copyright 2013-2022 Free Software Foundation, Inc.
+Copyright 2013-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/systhread.c b/src/systhread.c
index 08afa7e5836..caa4dfd4443 100644
--- a/src/systhread.c
+++ b/src/systhread.c
@@ -1,5 +1,5 @@
 /* System thread definitions
-Copyright (C) 2012-2022 Free Software Foundation, Inc.
+Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/systhread.h b/src/systhread.h
index 10d6237f275..b8f078df071 100644
--- a/src/systhread.h
+++ b/src/systhread.h
@@ -1,5 +1,5 @@
 /* System thread definitions
-Copyright (C) 2012-2022 Free Software Foundation, Inc.
+Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/systime.h b/src/systime.h
index 085a7ddeaba..936f1a50a96 100644
--- a/src/systime.h
+++ b/src/systime.h
@@ -1,5 +1,5 @@
 /* systime.h - System-dependent definitions for time manipulations.
-   Copyright (C) 1993-1994, 2002-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 2002-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/systty.h b/src/systty.h
index 3a8fffe25f1..918b4178905 100644
--- a/src/systty.h
+++ b/src/systty.h
@@ -1,5 +1,5 @@
 /* systty.h - System-dependent definitions for terminals.
-   Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/syswait.h b/src/syswait.h
index 61c4364fe38..80e2d8d39d0 100644
--- a/src/syswait.h
+++ b/src/syswait.h
@@ -1,5 +1,5 @@
 /* Define wait system call interface for Emacs.
-   Copyright (C) 1993-1995, 2000-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993-1995, 2000-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/term.c b/src/term.c
index f8104e0304e..d881dee39fe 100644
--- a/src/term.c
+++ b/src/term.c
@@ -1,5 +1,5 @@
 /* Terminal control module for terminals described by TERMCAP
-   Copyright (C) 1985-1987, 1993-1995, 1998, 2000-2022 Free Software
+   Copyright (C) 1985-1987, 1993-1995, 1998, 2000-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/termcap.c b/src/termcap.c
index 5afa8ae9de4..d2688b3838d 100644
--- a/src/termcap.c
+++ b/src/termcap.c
@@ -1,5 +1,5 @@
 /* Work-alike for termcap, plus extra features.
-   Copyright (C) 1985-1986, 1993-1995, 2000-2008, 2011, 2013-2022 Free
+   Copyright (C) 1985-1986, 1993-1995, 2000-2008, 2011, 2013-2023 Free
    Software Foundation, Inc.
 
 This program is free software; you can redistribute it and/or modify
diff --git a/src/termchar.h b/src/termchar.h
index 0f172464113..5c47679a994 100644
--- a/src/termchar.h
+++ b/src/termchar.h
@@ -1,5 +1,5 @@
 /* Flags and parameters describing terminal's characteristics.
-   Copyright (C) 1985-1986, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1985-1986, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/termhooks.h b/src/termhooks.h
index c5f1e286e92..ba04a6b7759 100644
--- a/src/termhooks.h
+++ b/src/termhooks.h
@@ -1,6 +1,6 @@
 /* Parameters and display hooks for terminal devices.
 
-Copyright (C) 1985-1986, 1993-1994, 2001-2022 Free Software Foundation,
+Copyright (C) 1985-1986, 1993-1994, 2001-2023 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/terminal.c b/src/terminal.c
index d366e9d2438..d13e3466512 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -1,5 +1,5 @@
 /* Functions related to terminal devices.
-   Copyright (C) 2005-2022 Free Software Foundation, Inc.
+   Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/terminfo.c b/src/terminfo.c
index 1a7b38d7d90..66820920d47 100644
--- a/src/terminfo.c
+++ b/src/terminfo.c
@@ -1,5 +1,5 @@
 /* Interface from Emacs to terminfo.
-   Copyright (C) 1985-1986, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1985-1986, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/termopts.h b/src/termopts.h
index ff1be132456..346c46bdaaa 100644
--- a/src/termopts.h
+++ b/src/termopts.h
@@ -1,5 +1,5 @@
 /* Flags and parameters describing user options for handling the terminal.
-   Copyright (C) 1985-1986, 1990, 2001-2022 Free Software Foundation,
+   Copyright (C) 1985-1986, 1990, 2001-2023 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/textprop.c b/src/textprop.c
index ca693fd6800..f88fff19c59 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -1,5 +1,5 @@
 /* Interface code for dealing with text properties.
-   Copyright (C) 1993-2022  Free Software Foundation, Inc.
+   Copyright (C) 1993-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/thread.c b/src/thread.c
index 626d14aad0a..b8ca56fd372 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -1,5 +1,5 @@
 /* Threading code.
-Copyright (C) 2012-2022 Free Software Foundation, Inc.
+Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/thread.h b/src/thread.h
index 82c445ba7e7..f0e9ee01173 100644
--- a/src/thread.h
+++ b/src/thread.h
@@ -1,5 +1,5 @@
 /* Thread definitions
-Copyright (C) 2012-2022 Free Software Foundation, Inc.
+Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/timefns.c b/src/timefns.c
index dcc6403fd9d..b3132e7bc34 100644
--- a/src/timefns.c
+++ b/src/timefns.c
@@ -1,6 +1,6 @@
 /* Timestamp functions for Emacs
 
-Copyright (C) 1985-1987, 1989, 1993-2022 Free Software Foundation, Inc.
+Copyright (C) 1985-1987, 1989, 1993-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/tparam.c b/src/tparam.c
index 89483ed52a8..1a5eab37452 100644
--- a/src/tparam.c
+++ b/src/tparam.c
@@ -1,5 +1,5 @@
 /* Merge parameters into a termcap entry string.
-   Copyright (C) 1985, 1987, 1993, 1995, 2000-2008, 2013-2022 Free
+   Copyright (C) 1985, 1987, 1993, 1995, 2000-2008, 2013-2023 Free
    Software Foundation, Inc.
 
 This program is free software; you can redistribute it and/or modify
diff --git a/src/tparam.h b/src/tparam.h
index 4f4bdc8820f..898ee38a64b 100644
--- a/src/tparam.h
+++ b/src/tparam.h
@@ -1,6 +1,6 @@
 /* Interface definitions for termcap entries.
 
-Copyright (C) 2011-2022 Free Software Foundation, Inc.
+Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/treesit.c b/src/treesit.c
index c882d455137..55463122d14 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -1,6 +1,8 @@
 /* Tree-sitter integration for GNU Emacs.
 
-Copyright (C) 2021-2022 Free Software Foundation, Inc.
+Copyright (C) 2021-2023 Free Software Foundation, Inc.
+
+Maintainer: Yuan Fu <casouri@gmail.com>
 
 This file is part of GNU Emacs.
 
@@ -404,6 +406,10 @@ init_treesit_functions (void)
 
 /*** Initialization */
 
+/* This is the limit on recursion levels for some tree-sitter
+   functions.  Remember to update docstrings when changing this
+   value. */
+const ptrdiff_t treesit_recursion_limit = 1000;
 bool treesit_initialized = false;
 
 static bool
@@ -626,7 +632,7 @@ treesit_load_language (Lisp_Object language_symbol,
   return lang;
 }
 
-DEFUN ("treesit-language-available-p", Ftreesit_langauge_available_p,
+DEFUN ("treesit-language-available-p", Ftreesit_language_available_p,
        Streesit_language_available_p,
        1, 2, 0,
        doc: /* Return non-nil if LANGUAGE exists and is loadable.
@@ -656,9 +662,8 @@ If DETAIL is non-nil, return (t . nil) when LANGUAGE is 
available,
     }
 }
 
-DEFUN ("treesit-language-version",
-       Ftreesit_language_version,
-       Streesit_language_version,
+DEFUN ("treesit-library-abi-version", Ftreesit_library_abi_version,
+       Streesit_library_abi_version,
        0, 1, 0,
        doc: /* Return the language ABI version of the tree-sitter library.
 
@@ -674,6 +679,29 @@ is non-nil, return the oldest compatible ABI version.  */)
     return make_fixnum (TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION);
 }
 
+DEFUN ("treesit-language-abi-version", Ftreesit_language_abi_version,
+       Streesit_language_abi_version,
+       0, 1, 0,
+       doc: /* Return the ABI version of the tree-sitter grammar for LANGUAGE.
+Return nil if a grammar library for LANGUAGE is not available.  */)
+  (Lisp_Object language)
+{
+  if (NILP (Ftreesit_language_available_p (language, Qnil)))
+    return Qnil;
+  else
+    {
+      Lisp_Object signal_symbol = Qnil;
+      Lisp_Object signal_data = Qnil;
+      TSLanguage *ts_language = treesit_load_language (language,
+                                                      &signal_symbol,
+                                                      &signal_data);
+      if (ts_language == NULL)
+       return Qnil;
+      uint32_t version =  ts_language_version (ts_language);
+      return make_fixnum((ptrdiff_t) version);
+    }
+}
+
 /*** Parsing functions */
 
 static void
@@ -927,11 +955,24 @@ static void
 treesit_call_after_change_functions (TSTree *old_tree, TSTree *new_tree,
                                     Lisp_Object parser)
 {
-  uint32_t len;
-  TSRange *ranges = ts_tree_get_changed_ranges (old_tree, new_tree, &len);
+  /* If the old_tree is NULL, meaning this is the first parse, the
+     changed range is the whole buffer.  */
+  Lisp_Object lisp_ranges;
   struct buffer *buf = XBUFFER (XTS_PARSER (parser)->buffer);
-  Lisp_Object lisp_ranges = treesit_make_ranges (ranges, len, buf);
-  xfree (ranges);
+  if (old_tree)
+    {
+      uint32_t len;
+      TSRange *ranges = ts_tree_get_changed_ranges (old_tree, new_tree, &len);
+      lisp_ranges = treesit_make_ranges (ranges, len, buf);
+      xfree (ranges);
+    }
+  else
+    {
+      struct buffer *oldbuf = current_buffer;
+      set_buffer_internal (buf);
+      lisp_ranges = Fcons (Fcons (Fpoint_min (), Fpoint_max ()), Qnil);
+      set_buffer_internal (oldbuf);
+    }
 
   specpdl_ref count = SPECPDL_INDEX ();
 
@@ -949,6 +990,11 @@ treesit_call_after_change_functions (TSTree *old_tree, 
TSTree *new_tree,
 static void
 treesit_ensure_parsed (Lisp_Object parser)
 {
+  /* Make sure this comes before everything else, see comment
+     (ref:notifier-inside-ensure-parsed) for more detail.  */
+  if (!XTS_PARSER (parser)->need_reparse)
+    return;
+
   struct buffer *buffer = XBUFFER (XTS_PARSER (parser)->buffer);
 
   /* Before we parse, catch up with the narrowing situation.  */
@@ -957,8 +1003,6 @@ treesit_ensure_parsed (Lisp_Object parser)
      because it might set the flag to true.  */
   treesit_sync_visible_region (parser);
 
-  if (!XTS_PARSER (parser)->need_reparse)
-    return;
   TSParser *treesit_parser = XTS_PARSER (parser)->parser;
   TSTree *tree = XTS_PARSER (parser)->tree;
   TSInput input = XTS_PARSER (parser)->input;
@@ -978,14 +1022,17 @@ treesit_ensure_parsed (Lisp_Object parser)
       xsignal1 (Qtreesit_parse_error, buf);
     }
 
-  if (tree != NULL)
-    {
-      treesit_call_after_change_functions (tree, new_tree, parser);
-      ts_tree_delete (tree);
-    }
-
   XTS_PARSER (parser)->tree = new_tree;
   XTS_PARSER (parser)->need_reparse = false;
+
+  /* After-change functions should run at the very end, most crucially
+     after need_reparse is set to false, this way if the function
+     calls some tree-sitter function which invokes
+     treesit_ensure_parsed again, it returns early and do not
+     recursively call the after change functions again.
+     (ref:notifier-inside-ensure-parsed)  */
+  treesit_call_after_change_functions (tree, new_tree, parser);
+  ts_tree_delete (tree);
 }
 
 /* This is the read function provided to tree-sitter to read from a
@@ -1147,10 +1194,12 @@ treesit_query_error_to_string (TSQueryError error)
 
 static Lisp_Object
 treesit_compose_query_signal_data (uint32_t error_offset,
-                                  TSQueryError error_type)
+                                  TSQueryError error_type,
+                                  Lisp_Object query_source)
 {
-  return list3 (build_string (treesit_query_error_to_string (error_type)),
+  return list4 (build_string (treesit_query_error_to_string (error_type)),
                make_fixnum (error_offset + 1),
+               query_source,
                build_pure_c_string ("Debug the query with 
`treesit-query-validate'"));
 }
 
@@ -1192,7 +1241,8 @@ treesit_ensure_query_compiled (Lisp_Object query, 
Lisp_Object *signal_symbol,
     {
       *signal_symbol = Qtreesit_query_error;
       *signal_data = treesit_compose_query_signal_data (error_offset,
-                                                       error_type);
+                                                       error_type,
+                                                       source);
     }
   XTS_COMPILED_QUERY (query)->query = treesit_query;
   return treesit_query;
@@ -1762,7 +1812,7 @@ If NODE is nil, return nil.  */)
   return build_string (string);
 }
 
-static TSTreeCursor treesit_cursor_helper (TSNode, Lisp_Object);
+static bool treesit_cursor_helper (TSTreeCursor *, TSNode, Lisp_Object);
 
 DEFUN ("treesit-node-parent",
        Ftreesit_node_parent, Streesit_node_parent, 1, 1, 0,
@@ -1778,7 +1828,10 @@ Return nil if NODE has no parent.  If NODE is nil, 
return nil.  */)
 
   TSNode treesit_node = XTS_NODE (node)->node;
   Lisp_Object parser = XTS_NODE (node)->parser;
-  TSTreeCursor cursor = treesit_cursor_helper (treesit_node, parser);
+  TSTreeCursor cursor;
+  if (!treesit_cursor_helper (&cursor, treesit_node, parser))
+    return return_value;
+
   if (ts_tree_cursor_goto_parent (&cursor))
   {
     TSNode parent = ts_tree_cursor_current_node (&cursor);
@@ -2042,12 +2095,11 @@ Note that this function returns an immediate child, not 
the smallest
 
   struct buffer *buf = XBUFFER (XTS_PARSER (XTS_NODE (node)->parser)->buffer);
   ptrdiff_t visible_beg = XTS_PARSER (XTS_NODE (node)->parser)->visible_beg;
-  ptrdiff_t byte_pos = buf_charpos_to_bytepos (buf, XFIXNUM (pos));
 
   treesit_check_position (pos, buf);
-
   treesit_initialize ();
 
+  ptrdiff_t byte_pos = buf_charpos_to_bytepos (buf, XFIXNUM (pos));
   TSNode treesit_node = XTS_NODE (node)->node;
   TSNode child;
   if (NILP (named))
@@ -2078,14 +2130,14 @@ If NODE is nil, return nil.  */)
 
   struct buffer *buf = XBUFFER (XTS_PARSER (XTS_NODE (node)->parser)->buffer);
   ptrdiff_t visible_beg = XTS_PARSER (XTS_NODE (node)->parser)->visible_beg;
-  ptrdiff_t byte_beg = buf_charpos_to_bytepos (buf, XFIXNUM (beg));
-  ptrdiff_t byte_end = buf_charpos_to_bytepos (buf, XFIXNUM (end));
 
   treesit_check_position (beg, buf);
   treesit_check_position (end, buf);
 
   treesit_initialize ();
 
+  ptrdiff_t byte_beg = buf_charpos_to_bytepos (buf, XFIXNUM (beg));
+  ptrdiff_t byte_end = buf_charpos_to_bytepos (buf, XFIXNUM (end));
   TSNode treesit_node = XTS_NODE (node)->node;
   TSNode child;
   if (NILP (named))
@@ -2161,6 +2213,8 @@ See Info node `(elisp)Pattern Matching' for detailed 
explanation.  */)
     return build_pure_c_string ("#equal");
   if (EQ (pattern, QCmatch))
     return build_pure_c_string ("#match");
+  if (EQ (pattern, QCpred))
+    return build_pure_c_string ("#pred");
   Lisp_Object opening_delimeter
     = build_pure_c_string (VECTORP (pattern) ? "[" : "(");
   Lisp_Object closing_delimiter
@@ -2260,10 +2314,10 @@ treesit_predicates_for_pattern (TSQuery *query, 
uint32_t pattern_index)
   return Fnreverse (result);
 }
 
-/* Translate a capture NAME (symbol) to the text of the captured node.
+/* Translate a capture NAME (symbol) to a node.
    Signals treesit-query-error if such node is not captured.  */
 static Lisp_Object
-treesit_predicate_capture_name_to_text (Lisp_Object name,
+treesit_predicate_capture_name_to_node (Lisp_Object name,
                                        struct capture_range captures)
 {
   Lisp_Object node = Qnil;
@@ -2283,6 +2337,16 @@ treesit_predicate_capture_name_to_text (Lisp_Object name,
              name, build_pure_c_string ("A predicate can only refer"
                                         " to captured nodes in the "
                                         "same pattern"));
+  return node;
+}
+
+/* Translate a capture NAME (symbol) to the text of the captured node.
+   Signals treesit-query-error if such node is not captured.  */
+static Lisp_Object
+treesit_predicate_capture_name_to_text (Lisp_Object name,
+                                       struct capture_range captures)
+{
+  Lisp_Object node = treesit_predicate_capture_name_to_node (name, captures);
 
   struct buffer *old_buffer = current_buffer;
   set_buffer_internal (XBUFFER (XTS_PARSER (XTS_NODE (node)->parser)->buffer));
@@ -2356,13 +2420,30 @@ treesit_predicate_match (Lisp_Object args, struct 
capture_range captures)
     return false;
 }
 
-/* About predicates: I decide to hard-code predicates in C instead of
-   implementing an extensible system where predicates are translated
-   to Lisp functions, and new predicates can be added by extending a
-   list of functions, because I really couldn't imagine any useful
-   predicates besides equal and match.  If we later found out that
-   such system is indeed useful and necessary, it can be easily
-   added.  */
+/* Handles predicate (#pred FN ARG...).  Return true if FN returns
+   non-nil; return false otherwise.  The arity of FN must match the
+   number of ARGs  */
+static bool
+treesit_predicate_pred (Lisp_Object args, struct capture_range captures)
+{
+  if (XFIXNUM (Flength (args)) < 2)
+    xsignal2 (Qtreesit_query_error,
+             build_pure_c_string ("Predicate `pred' requires "
+                                  "at least two arguments, "
+                                  "but was only given"),
+             Flength (args));
+
+  Lisp_Object fn = Fintern (XCAR (args), Qnil);
+  Lisp_Object nodes = Qnil;
+  Lisp_Object tail = XCDR (args);
+  FOR_EACH_TAIL (tail)
+    nodes = Fcons (treesit_predicate_capture_name_to_node (XCAR (tail),
+                                                          captures),
+                  nodes);
+  nodes = Fnreverse (nodes);
+
+  return !NILP (CALLN (Fapply, fn, nodes));
+}
 
 /* If all predicates in PREDICATES passes, return true; otherwise
    return false.  */
@@ -2378,14 +2459,17 @@ treesit_eval_predicates (struct capture_range captures, 
Lisp_Object predicates)
       Lisp_Object fn = XCAR (predicate);
       Lisp_Object args = XCDR (predicate);
       if (!NILP (Fstring_equal (fn, build_pure_c_string ("equal"))))
-       pass = treesit_predicate_equal (args, captures);
+       pass &= treesit_predicate_equal (args, captures);
       else if (!NILP (Fstring_equal (fn, build_pure_c_string ("match"))))
-       pass = treesit_predicate_match (args, captures);
+       pass &= treesit_predicate_match (args, captures);
+      else if (!NILP (Fstring_equal (fn, build_pure_c_string ("pred"))))
+       pass &= treesit_predicate_pred (args, captures);
       else
        xsignal3 (Qtreesit_query_error,
                  build_pure_c_string ("Invalid predicate"),
                  fn, build_pure_c_string ("Currently Emacs only supports"
-                                          " equal and match predicate"));
+                                          " equal, match, and pred"
+                                          " predicate"));
     }
   /* If all predicates passed, add captures to result list.  */
   return pass;
@@ -2546,7 +2630,7 @@ the query.  */)
       if (treesit_query == NULL)
        xsignal (Qtreesit_query_error,
                 treesit_compose_query_signal_data (error_offset,
-                                                   error_type));
+                                                   error_type, query));
       cursor = ts_query_cursor_new ();
       needs_to_free_query_and_cursor = true;
     }
@@ -2637,8 +2721,59 @@ treesit_assume_true (bool val)
   eassert (val == true);
 }
 
+/* Tries to move CURSOR to point to TARGET.  END_POS is the end of
+   TARGET.  If success, return true, otherwise move CURSOR back to
+   starting position and return false.  LIMIT is the recursion
+   limit.  */
+static bool
+treesit_cursor_helper_1 (TSTreeCursor *cursor, TSNode *target,
+                        uint32_t end_pos, ptrdiff_t limit)
+{
+  if (limit <= 0)
+    return false;
+
+  TSNode cursor_node = ts_tree_cursor_current_node (cursor);
+  if (ts_node_eq (cursor_node, *target))
+    return true;
+
+  if (!ts_tree_cursor_goto_first_child (cursor))
+    return false;
+
+  /* Skip nodes that definitely don't contain TARGET.  */
+  while (ts_node_end_byte (cursor_node) < end_pos)
+    {
+      if (!ts_tree_cursor_goto_next_sibling (cursor))
+       break;
+      cursor_node = ts_tree_cursor_current_node (cursor);
+    }
+
+  /* Go through each sibling that could contain TARGET.  Because of
+     missing nodes (their width is 0), there could be multiple
+     siblings that could contain TARGET.  */
+  while (ts_node_start_byte (cursor_node) <= end_pos)
+    {
+      if (treesit_cursor_helper_1 (cursor, target, end_pos, limit - 1))
+       return true;
+
+      if (!ts_tree_cursor_goto_next_sibling (cursor))
+       break;
+      cursor_node = ts_tree_cursor_current_node (cursor);
+    }
+
+  /* Couldn't find TARGET, must be not in this subtree, move cursor
+     back and pray that other brothers and sisters can succeed.  */
+  treesit_assume_true (ts_tree_cursor_goto_parent (cursor));
+  return false;
+}
+
 /* Create a TSTreeCursor pointing at NODE.  PARSER is the lisp parser
-   that produced NODE.
+   that produced NODE.  If success, return true, otherwise return
+   false.  This function should almost always succeed, but if the parse
+   tree is strangely too deep and exceeds the recursion limit, this
+   function will fail and return false.
+
+   If this function returns true, caller needs to free CURSOR; if
+   returns false, caller don't need to free CURSOR.
 
    The reason we need this instead of simply using ts_tree_cursor_new
    is that we have to create the cursor on the root node and traverse
@@ -2646,56 +2781,17 @@ treesit_assume_true (bool val)
    Otherwise going to sibling or parent of NODE wouldn't work.
 
    (Wow perfect filling.)  */
-static TSTreeCursor
-treesit_cursor_helper (TSNode node, Lisp_Object parser)
+static bool
+treesit_cursor_helper (TSTreeCursor *cursor, TSNode node, Lisp_Object parser)
 {
   uint32_t end_pos = ts_node_end_byte (node);
   TSNode root = ts_tree_root_node (XTS_PARSER (parser)->tree);
-  TSTreeCursor cursor = ts_tree_cursor_new (root);
-  TSNode cursor_node = ts_tree_cursor_current_node (&cursor);
-  /* This is like treesit-node-at.  We go down from the root node,
-     either to first child or next sibling, repeatedly, and finally
-     arrive at NODE.  */
-  while (!ts_node_eq (node, cursor_node))
-    {
-      treesit_assume_true (ts_tree_cursor_goto_first_child (&cursor));
-      cursor_node = ts_tree_cursor_current_node (&cursor);
-      /* ts_tree_cursor_goto_first_child_for_byte is not reliable, so
-        we just go through each sibling.  */
-      while (ts_node_is_missing (cursor_node)
-            || ts_node_end_byte (cursor_node) < end_pos)
-       {
-         /* A "missing" node has zero width, so it's possible that
-            its end = NODE.end but it's not NODE, so we skip them.
-            But we need to make sure this missing node is not the
-            node we are looking for before skipping it.  */
-         if (ts_node_is_missing (cursor_node)
-             && ts_node_eq (node, cursor_node))
-           return cursor;
-         treesit_assume_true (ts_tree_cursor_goto_next_sibling (&cursor));
-         cursor_node = ts_tree_cursor_current_node (&cursor);
-       }
-      /* Right now CURSOR.end >= NODE.end.  But what if CURSOR.end =
-        NODE.end, and there are missing nodes after CURSOR, and the
-        missing node after CURSOR is the NODE we are looking for??
-        Well, create a probe and look ahead.  (This is tested by
-        treesit-cursor-helper-with-missing-node.)  */
-      TSTreeCursor probe = ts_tree_cursor_copy (&cursor);
-      TSNode probe_node;
-      while (ts_tree_cursor_goto_next_sibling (&probe))
-       {
-         probe_node = ts_tree_cursor_current_node (&probe);
-         if (!ts_node_is_missing (probe_node))
-           break;
-         if (ts_node_eq (probe_node, node))
-           {
-             ts_tree_cursor_delete (&cursor);
-             return probe;
-           }
-       }
-      ts_tree_cursor_delete (&probe);
-    }
-  return cursor;
+  *cursor = ts_tree_cursor_new (root);
+  bool success = treesit_cursor_helper_1 (cursor, &node, end_pos,
+                                         treesit_recursion_limit);
+  if (!success)
+    ts_tree_cursor_delete (cursor);
+  return success;
 }
 
 /* Move CURSOR to the next/previous sibling.  FORWARD controls the
@@ -2957,7 +3053,7 @@ Return the first matched node, or nil if none matches.  
*/)
 
   /* We use a default limit of 1000.  See bug#59426 for the
      discussion.  */
-  ptrdiff_t the_limit = 1000;
+  ptrdiff_t the_limit = treesit_recursion_limit;
   if (!NILP (limit))
     {
       CHECK_FIXNUM (limit);
@@ -2968,7 +3064,10 @@ Return the first matched node, or nil if none matches.  
*/)
 
   Lisp_Object parser = XTS_NODE (node)->parser;
   Lisp_Object return_value = Qnil;
-  TSTreeCursor cursor = treesit_cursor_helper (XTS_NODE (node)->node, parser);
+  TSTreeCursor cursor;
+  if (!treesit_cursor_helper (&cursor, XTS_NODE (node)->node, parser))
+    return return_value;
+
   if (treesit_search_dfs (&cursor, predicate, parser, NILP (backward),
                          NILP (all), the_limit, false))
     {
@@ -3022,7 +3121,10 @@ always traverse leaf nodes first, then upwards.  */)
 
   Lisp_Object parser = XTS_NODE (start)->parser;
   Lisp_Object return_value = Qnil;
-  TSTreeCursor cursor = treesit_cursor_helper (XTS_NODE (start)->node, parser);
+  TSTreeCursor cursor;
+  if (!treesit_cursor_helper (&cursor, XTS_NODE (start)->node, parser))
+    return return_value;
+
   if (treesit_search_forward (&cursor, predicate, parser,
                              NILP (backward), NILP (all)))
     {
@@ -3130,7 +3232,7 @@ a regexp.  */)
 
   /* We use a default limit of 1000.  See bug#59426 for the
      discussion.  */
-  ptrdiff_t the_limit = 1000;
+  ptrdiff_t the_limit = treesit_recursion_limit;
   if (!NILP (limit))
     {
       CHECK_FIXNUM (limit);
@@ -3141,7 +3243,10 @@ a regexp.  */)
 
   Lisp_Object parser = XTS_NODE (root)->parser;
   Lisp_Object parent = Fcons (Qnil, Qnil);
-  TSTreeCursor cursor = treesit_cursor_helper (XTS_NODE (root)->node, parser);
+  TSTreeCursor cursor;
+  if (!treesit_cursor_helper (&cursor, XTS_NODE (root)->node, parser))
+    return Qnil;
+
   treesit_build_sparse_tree (&cursor, parent, predicate, process_fn,
                             the_limit, parser);
   ts_tree_cursor_delete (&cursor);
@@ -3187,6 +3292,7 @@ syms_of_treesit (void)
   DEFSYM (QCanchor, ":anchor");
   DEFSYM (QCequal, ":equal");
   DEFSYM (QCmatch, ":match");
+  DEFSYM (QCpred, ":pred");
 
   DEFSYM (Qnot_found, "not-found");
   DEFSYM (Qsymbol_error, "symbol-error");
@@ -3264,7 +3370,8 @@ then in the system default locations for dynamic 
libraries, in that order.  */);
   Vtreesit_extra_load_path = Qnil;
 
   defsubr (&Streesit_language_available_p);
-  defsubr (&Streesit_language_version);
+  defsubr (&Streesit_library_abi_version);
+  defsubr (&Streesit_language_abi_version);
 
   defsubr (&Streesit_parser_p);
   defsubr (&Streesit_node_p);
diff --git a/src/treesit.h b/src/treesit.h
index 6f6423ff472..909609737d3 100644
--- a/src/treesit.h
+++ b/src/treesit.h
@@ -1,6 +1,6 @@
 /* Header file for the tree-sitter integration.
 
-Copyright (C) 2021-2022 Free Software Foundation, Inc.
+Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/undo.c b/src/undo.c
index f76977dbe50..75cfd6058d2 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -1,5 +1,5 @@
 /* undo handling for GNU Emacs.
-   Copyright (C) 1990, 1993-1994, 2000-2022 Free Software Foundation,
+   Copyright (C) 1990, 1993-1994, 2000-2023 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/unexaix.c b/src/unexaix.c
index 457c7543044..e50452c519a 100644
--- a/src/unexaix.c
+++ b/src/unexaix.c
@@ -1,5 +1,5 @@
 /* Dump an executable file.
-   Copyright (C) 1985-1988, 1999, 2001-2022 Free Software Foundation,
+   Copyright (C) 1985-1988, 1999, 2001-2023 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/unexcoff.c b/src/unexcoff.c
index 337754f6d46..05a4edfe89d 100644
--- a/src/unexcoff.c
+++ b/src/unexcoff.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1985-1988, 1992-1994, 2001-2022 Free Software
+/* Copyright (C) 1985-1988, 1992-1994, 2001-2023 Free Software
  * Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/unexcw.c b/src/unexcw.c
index d1099bb2053..fe2f120a01f 100644
--- a/src/unexcw.c
+++ b/src/unexcw.c
@@ -1,7 +1,7 @@
 /* unexec() support for Cygwin;
    complete rewrite of xemacs Cygwin unexec() code
 
-   Copyright (C) 2004-2022 Free Software Foundation, Inc.
+   Copyright (C) 2004-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/unexelf.c b/src/unexelf.c
index e61bdd4e880..607ac0cd6a2 100644
--- a/src/unexelf.c
+++ b/src/unexelf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1985-1988, 1990, 1992, 1999-2022 Free Software
+/* Copyright (C) 1985-1988, 1990, 1992, 1999-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/unexmacosx.c b/src/unexmacosx.c
index be1ef43e62c..33c20358116 100644
--- a/src/unexmacosx.c
+++ b/src/unexmacosx.c
@@ -1,5 +1,5 @@
 /* Dump Emacs in Mach-O format for use on macOS.
-   Copyright (C) 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/unexw32.c b/src/unexw32.c
index fe76b37a05b..92e02b29850 100644
--- a/src/unexw32.c
+++ b/src/unexw32.c
@@ -1,5 +1,5 @@
 /* unexec for GNU Emacs on Windows NT.
-   Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/verbose.mk.in b/src/verbose.mk.in
index 4ec7788442d..a4e2aad9325 100644
--- a/src/verbose.mk.in
+++ b/src/verbose.mk.in
@@ -1,6 +1,6 @@
 ### verbose.mk --- Makefile fragment for GNU Emacs
 
-## Copyright (C) 2021-2022 Free Software Foundation, Inc.
+## Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
diff --git a/src/vm-limit.c b/src/vm-limit.c
index 043ea96d15f..a118f36edc5 100644
--- a/src/vm-limit.c
+++ b/src/vm-limit.c
@@ -1,5 +1,5 @@
 /* Functions for memory limit warnings.
-   Copyright (C) 1990, 1992, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1990, 1992, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w16select.c b/src/w16select.c
index b878481e469..dce37fc1396 100644
--- a/src/w16select.c
+++ b/src/w16select.c
@@ -1,6 +1,6 @@
 /* 16-bit Windows Selection processing for emacs on MS-Windows
 
-Copyright (C) 1996-1997, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1996-1997, 2001-2023 Free Software Foundation, Inc.
 
 Author: Dale P. Smith <dpsm@en.com>
 
diff --git a/src/w32.c b/src/w32.c
index 9c7d536adad..47d79abc5b0 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -1,6 +1,6 @@
 /* Utility and Unix shadow routines for GNU Emacs on the Microsoft Windows API.
 
-Copyright (C) 1994-1995, 2000-2022 Free Software Foundation, Inc.
+Copyright (C) 1994-1995, 2000-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32.h b/src/w32.h
index b914aa9bafa..a3d0b75359a 100644
--- a/src/w32.h
+++ b/src/w32.h
@@ -2,7 +2,7 @@
 #define EMACS_W32_H
 
 /* Support routines for the NT version of Emacs.
-   Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32common.h b/src/w32common.h
index 6b9c2c08dde..26b114441ef 100644
--- a/src/w32common.h
+++ b/src/w32common.h
@@ -1,5 +1,5 @@
 /* Common functions for Microsoft Windows builds of Emacs
-   Copyright (C) 2012-2022 Free Software Foundation, Inc.
+   Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32console.c b/src/w32console.c
index 09749126e03..bb7d2162403 100644
--- a/src/w32console.c
+++ b/src/w32console.c
@@ -1,5 +1,5 @@
 /* Terminal hooks for GNU Emacs on the Microsoft Windows API.
-   Copyright (C) 1992, 1999, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1999, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32cygwinx.c b/src/w32cygwinx.c
index bb2539be94f..dd1c4044e8e 100644
--- a/src/w32cygwinx.c
+++ b/src/w32cygwinx.c
@@ -1,6 +1,6 @@
 /* Common functions for the Microsoft Windows and Cygwin builds.
 
-Copyright (C) 2018-2022 Free Software Foundation, Inc.
+Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32fns.c b/src/w32fns.c
index 887e5a1f7b7..192d3ddf27a 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -1,6 +1,6 @@
 /* Graphical user interface functions for the Microsoft Windows API.
 
-Copyright (C) 1989, 1992-2022 Free Software Foundation, Inc.
+Copyright (C) 1989, 1992-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -1717,19 +1717,17 @@ w32_set_tab_bar_lines (struct frame *f, Lisp_Object 
value, Lisp_Object oldval)
 void
 w32_change_tab_bar_height (struct frame *f, int height)
 {
-  int unit, old_height, lines;
-  Lisp_Object fullscreen;
-
-  unit = FRAME_LINE_HEIGHT (f);
-  old_height = FRAME_TAB_BAR_HEIGHT (f);
-  fullscreen = get_frame_param (f, Qfullscreen);
+  int unit = FRAME_LINE_HEIGHT (f);
+  int old_height = FRAME_TAB_BAR_HEIGHT (f);
 
   /* This differs from the tool bar code in that the tab bar height is
      not rounded up.  Otherwise, if redisplay_tab_bar decides to grow
      the tab bar by even 1 pixel, FRAME_TAB_BAR_LINES will be changed,
      leading to the tab bar height being incorrectly set upon the next
      call to x_set_font.  (bug#59285) */
-  lines = height / unit;
+  int lines = height / unit;
+  if (lines == 0 && height != 0)
+    lines = 1;
 
   /* Make sure we redisplay all windows in this frame.  */
   fset_redisplay (f);
@@ -1758,6 +1756,8 @@ w32_change_tab_bar_height (struct frame *f, int height)
 
   if (!f->tab_bar_resized)
     {
+      Lisp_Object fullscreen = get_frame_param (f, Qfullscreen);
+
       /* As long as tab_bar_resized is false, effectively try to change
         F's native height.  */
       if (NILP (fullscreen) || EQ (fullscreen, Qfullwidth))
diff --git a/src/w32font.c b/src/w32font.c
index 611a0c89658..2917fa55f9f 100644
--- a/src/w32font.c
+++ b/src/w32font.c
@@ -1,5 +1,5 @@
 /* Font backend for the Microsoft Windows API.
-   Copyright (C) 2007-2022 Free Software Foundation, Inc.
+   Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32font.h b/src/w32font.h
index 9fd4a6c1873..3f1c86adff9 100644
--- a/src/w32font.h
+++ b/src/w32font.h
@@ -1,5 +1,5 @@
 /* Shared GDI and Uniscribe Font backend declarations for the Windows API.
-   Copyright (C) 2007-2022 Free Software Foundation, Inc.
+   Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32gui.h b/src/w32gui.h
index 4e8de848545..55e2e90c634 100644
--- a/src/w32gui.h
+++ b/src/w32gui.h
@@ -1,5 +1,5 @@
 /* Definitions and headers for communication on the Microsoft Windows API.
-   Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32heap.c b/src/w32heap.c
index 675162447d8..a1975d9a975 100644
--- a/src/w32heap.c
+++ b/src/w32heap.c
@@ -1,5 +1,5 @@
 /* Heap management routines for GNU Emacs on the Microsoft Windows API.
-   Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 
    This file is part of GNU Emacs.
 
diff --git a/src/w32heap.h b/src/w32heap.h
index 764fc48a4ee..2f0ac61e6a0 100644
--- a/src/w32heap.h
+++ b/src/w32heap.h
@@ -1,5 +1,5 @@
 /* Heap management routines (including unexec) for GNU Emacs on Windows NT.
-   Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1994, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32image.c b/src/w32image.c
index af10d2bd265..32967bab9e8 100644
--- a/src/w32image.c
+++ b/src/w32image.c
@@ -1,6 +1,6 @@
 /* Implementation of MS-Windows native image API via the GDI+ library.
 
-Copyright (C) 2020-2022 Free Software Foundation, Inc.
+Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32inevt.c b/src/w32inevt.c
index d13b0521c9a..29717954cfd 100644
--- a/src/w32inevt.c
+++ b/src/w32inevt.c
@@ -1,5 +1,5 @@
 /* Input event support for Emacs on the Microsoft Windows API.
-   Copyright (C) 1992-1993, 1995, 2001-2022 Free Software Foundation,
+   Copyright (C) 1992-1993, 1995, 2001-2023 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/w32inevt.h b/src/w32inevt.h
index e5b2581430c..9310873c872 100644
--- a/src/w32inevt.h
+++ b/src/w32inevt.h
@@ -1,5 +1,5 @@
 /* Input routines for GNU Emacs on the Microsoft Windows API.
-   Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32menu.c b/src/w32menu.c
index b10239d5cc6..239355946fc 100644
--- a/src/w32menu.c
+++ b/src/w32menu.c
@@ -1,5 +1,5 @@
 /* Menu support for GNU Emacs on the Microsoft Windows API.
-   Copyright (C) 1986, 1988, 1993-1994, 1996, 1998-1999, 2001-2022 Free
+   Copyright (C) 1986, 1988, 1993-1994, 1996, 1998-1999, 2001-2023 Free
    Software Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -1073,7 +1073,10 @@ is_simple_dialog (Lisp_Object contents)
   if (NILP (Fstring_equal (name, other)))
     return false;
 
-  /* Check there are no more options.  */
+  /* Check there are no more options.
+
+     (FIXME: Since we use MB_YESNOCANCEL, we could also consider
+     dialogs with 3 options: Yes/No/Cancel as "simple".  */
   options = XCDR (options);
   return !(CONSP (options));
 }
@@ -1085,7 +1088,13 @@ simple_dialog_show (struct frame *f, Lisp_Object 
contents, Lisp_Object header)
   UINT type;
   Lisp_Object lispy_answer = Qnil, temp = XCAR (contents);
 
-  type = MB_YESNO;
+  /* We use MB_YESNOCANCEL to allow the user the equivalent of C-g
+     when the Yes/No question is asked vya y-or-n-p or
+     yes-or-no-p.  */
+  if (w32_yes_no_dialog_show_cancel)
+    type = MB_YESNOCANCEL;
+  else
+    type = MB_YESNO;
 
   /* Since we only handle Yes/No dialogs, and we already checked
      is_simple_dialog, we don't need to worry about checking contents
diff --git a/src/w32notify.c b/src/w32notify.c
index 6b5fce9f927..541d2f0fcd4 100644
--- a/src/w32notify.c
+++ b/src/w32notify.c
@@ -1,6 +1,6 @@
 /* Filesystem notifications support for GNU Emacs on the Microsoft Windows API.
 
-Copyright (C) 2012-2022 Free Software Foundation, Inc.
+Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 Author: Eli Zaretskii <eliz@gnu.org>
 
diff --git a/src/w32proc.c b/src/w32proc.c
index f771ebc8511..77a4ac1ff7e 100644
--- a/src/w32proc.c
+++ b/src/w32proc.c
@@ -1,6 +1,6 @@
 /* Process support for GNU Emacs on the Microsoft Windows API.
 
-Copyright (C) 1992, 1995, 1999-2022 Free Software Foundation, Inc.
+Copyright (C) 1992, 1995, 1999-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32reg.c b/src/w32reg.c
index 30cf4ab5ec8..9c390d6cd41 100644
--- a/src/w32reg.c
+++ b/src/w32reg.c
@@ -1,6 +1,6 @@
 /* Emulate the X Resource Manager through the registry.
 
-Copyright (C) 1990, 1993-1994, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1990, 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 Author: Kevin Gallo
 
diff --git a/src/w32select.c b/src/w32select.c
index 37206118127..193bc00c6e0 100644
--- a/src/w32select.c
+++ b/src/w32select.c
@@ -1,6 +1,6 @@
 /* Selection processing for Emacs on the Microsoft Windows API.
 
-Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 Author: Kevin Gallo
        Benjamin Riefenstahl
diff --git a/src/w32select.h b/src/w32select.h
index db707036d0c..e4ef82aff46 100644
--- a/src/w32select.h
+++ b/src/w32select.h
@@ -1,6 +1,6 @@
 /* Selection processing for Emacs on the Microsoft W32 API.
 
-Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
+Copyright (C) 1993-1994, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32term.c b/src/w32term.c
index dff21489e5b..2899e82b295 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -1,6 +1,6 @@
 /* Implementation of GUI terminal on the Microsoft Windows API.
 
-Copyright (C) 1989, 1993-2022 Free Software Foundation, Inc.
+Copyright (C) 1989, 1993-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -7696,6 +7696,7 @@ static void
 w32_initialize (void)
 {
   HANDLE shell;
+  BOOL caret;
   HRESULT (WINAPI * set_user_model) (const wchar_t * id);
 
   baud_rate = 19200;
@@ -7732,8 +7733,9 @@ w32_initialize (void)
 
   /* Initialize w32_use_visible_system_caret based on whether a screen
      reader is in use.  */
-  if (!SystemParametersInfo (SPI_GETSCREENREADER, 0,
-                            &w32_use_visible_system_caret, 0))
+  if (SystemParametersInfo (SPI_GETSCREENREADER, 0, &caret, 0))
+    w32_use_visible_system_caret = caret == TRUE;
+  else
     w32_use_visible_system_caret = 0;
 
   any_help_event_p = 0;
@@ -7923,6 +7925,11 @@ unconditionally set to nil on older systems.  */);
   w32_use_native_image_api = 0;
 #endif
 
+  DEFVAR_BOOL ("w32-yes-no-dialog-show-cancel",
+              w32_yes_no_dialog_show_cancel,
+     doc: /* If non-nil, show Cancel button in MS-Windows GUI Yes/No dialogs. 
*/);
+  w32_yes_no_dialog_show_cancel = 1;
+
   /* FIXME: The following variable will be (hopefully) removed
      before Emacs 25.1 gets released.  */
 
diff --git a/src/w32term.h b/src/w32term.h
index 88b7ec22bd1..69ef297cbcc 100644
--- a/src/w32term.h
+++ b/src/w32term.h
@@ -1,5 +1,5 @@
 /* Definitions and headers for communication on the Microsoft Windows API.
-   Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32uniscribe.c b/src/w32uniscribe.c
index 7c772b68f6e..67df0c8aebd 100644
--- a/src/w32uniscribe.c
+++ b/src/w32uniscribe.c
@@ -1,6 +1,6 @@
 /* Font backend for the Microsoft W32 Uniscribe API.
    Windows-specific parts of the HarfBuzz font backend.
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32xfns.c b/src/w32xfns.c
index 22d39ae0037..2df9577460f 100644
--- a/src/w32xfns.c
+++ b/src/w32xfns.c
@@ -1,5 +1,5 @@
 /* Functions taken directly from X sources for use with the Microsoft Windows 
API.
-   Copyright (C) 1989, 1992-1995, 1999, 2001-2022 Free Software
+   Copyright (C) 1989, 1992-1995, 1999, 2001-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/widget.c b/src/widget.c
index aaab33b6d8e..26696a975e3 100644
--- a/src/widget.c
+++ b/src/widget.c
@@ -1,5 +1,5 @@
 /* The emacs frame widget.
-   Copyright (C) 1992-1993, 2000-2022 Free Software Foundation, Inc.
+   Copyright (C) 1992-1993, 2000-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/widget.h b/src/widget.h
index cf83cb10781..317b14cc523 100644
--- a/src/widget.h
+++ b/src/widget.h
@@ -1,5 +1,5 @@
 /* The emacs frame widget public header file.
-   Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/widgetprv.h b/src/widgetprv.h
index 3a4d9206ffe..e264d157edb 100644
--- a/src/widgetprv.h
+++ b/src/widgetprv.h
@@ -1,5 +1,5 @@
 /* The emacs frame widget private header file.
-   Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/window.c b/src/window.c
index 2793d73e3cc..d3cefe4a959 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1,6 +1,6 @@
 /* Window creation, deletion and examination for GNU Emacs.
    Does not include redisplay.
-   Copyright (C) 1985-1987, 1993-1998, 2000-2022 Free Software
+   Copyright (C) 1985-1987, 1993-1998, 2000-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -1649,7 +1649,8 @@ check_window_containing (struct window *w, void 
*user_data)
    set *PART to the id of that element.
 
    If there is no window under X, Y return nil and leave *PART
-   unmodified.  TOOL_BAR_P means detect tool-bar windows.
+   unmodified.  TOOL_BAR_P means detect tool-bar windows, and
+   TAB_BAR_P means detect tab-bar windows.
 
    This function was previously implemented with a loop cycling over
    windows with Fnext_window, and starting with the frame's selected
diff --git a/src/window.h b/src/window.h
index b5d0c69ab52..32b5fe14f4f 100644
--- a/src/window.h
+++ b/src/window.h
@@ -1,5 +1,5 @@
 /* Window definitions for GNU Emacs.
-   Copyright (C) 1985-1986, 1993, 1995, 1997-2022 Free Software
+   Copyright (C) 1985-1986, 1993, 1995, 1997-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/xdisp.c b/src/xdisp.c
index 795697bca76..9b137d2d9b6 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -1,6 +1,6 @@
 /* Display generation from window structure and buffer text.
 
-Copyright (C) 1985-2022  Free Software Foundation, Inc.
+Copyright (C) 1985-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -12938,7 +12938,7 @@ clear_garbaged_frames (void)
        {
          struct frame *f = XFRAME (frame);
 
-         if (FRAME_VISIBLE_P (f) && FRAME_GARBAGED_P (f))
+         if (FRAME_REDISPLAY_P (f) && FRAME_GARBAGED_P (f))
            {
              if (f->resized_p
                  /* It makes no sense to redraw a non-selected TTY
@@ -12987,7 +12987,7 @@ echo_area_display (bool update_frame_p)
   f = XFRAME (WINDOW_FRAME (w));
 
   /* Don't display if frame is invisible or not yet initialized.  */
-  if (!FRAME_VISIBLE_P (f) || !f->glyphs_initialized_p)
+  if (!FRAME_REDISPLAY_P (f) || !f->glyphs_initialized_p)
     return;
 
 #ifdef HAVE_WINDOW_SYSTEM
@@ -13543,7 +13543,7 @@ prepare_menu_bars (void)
                     TTY frames to be completely redrawn, when there
                     are more than one of them, even though nothing
                     should be changed on display.  */
-                 || (FRAME_VISIBLE_P (f) == 2 && FRAME_WINDOW_P (f))))
+                 || (FRAME_REDISPLAY_P (f) && FRAME_WINDOW_P (f))))
            gui_consider_frame_title (frame);
        }
     }
@@ -14271,12 +14271,14 @@ redisplay_tab_bar (struct frame *f)
        frame_default_tab_bar_height = new_height;
     }
 
-  /* If new_height or new_nrows indicate that we need to enlarge the
-     tab-bar window, we can return right away.  */
+  /* If new_height or new_nrows indicate that we need to enlarge or
+     shrink the tab-bar window, we can return right away.  */
   if (new_nrows > f->n_tab_bar_rows
       || (EQ (Vauto_resize_tab_bars, Qgrow_only)
          && !f->minimize_tab_bar_window_p
-         && new_height > WINDOW_PIXEL_HEIGHT (w)))
+         && new_height > WINDOW_PIXEL_HEIGHT (w))
+      || (! EQ (Vauto_resize_tab_bars, Qgrow_only)
+         && new_height < WINDOW_PIXEL_HEIGHT (w)))
     {
       if (FRAME_TERMINAL (f)->change_tab_bar_height_hook)
        FRAME_TERMINAL (f)->change_tab_bar_height_hook (f, new_height);
@@ -16430,7 +16432,7 @@ redisplay_internal (void)
     {
       struct frame *f = XFRAME (frame);
 
-      if (FRAME_VISIBLE_P (f))
+      if (FRAME_REDISPLAY_P (f))
        {
          ++number_of_visible_frames;
          /* Adjust matrices for visible frames only.  */
@@ -16572,7 +16574,7 @@ redisplay_internal (void)
       && !w->update_mode_line
       && !current_buffer->clip_changed
       && !current_buffer->prevent_redisplay_optimizations_p
-      && FRAME_VISIBLE_P (XFRAME (w->frame))
+      && FRAME_REDISPLAY_P (XFRAME (w->frame))
       && !FRAME_OBSCURED_P (XFRAME (w->frame))
       && !XFRAME (w->frame)->cursor_type_changed
       && !XFRAME (w->frame)->face_change
@@ -16838,14 +16840,20 @@ redisplay_internal (void)
                /* Only GC scrollbars when we redisplay the whole frame.  */
                = f->redisplay || !REDISPLAY_SOME_P ();
              bool f_redisplay_flag = f->redisplay;
+
+             /* The X error handler may have deleted that frame
+                before we went back to retry_frame.  This must come
+                before any accesses to f->terminal.  */
+             if (!FRAME_LIVE_P (f))
+               continue;
+
              /* Mark all the scroll bars to be removed; we'll redeem
                 the ones we want when we redisplay their windows.  */
              if (gcscrollbars && FRAME_TERMINAL (f)->condemn_scroll_bars_hook)
                FRAME_TERMINAL (f)->condemn_scroll_bars_hook (f);
 
-             if (FRAME_VISIBLE_P (f) && !FRAME_OBSCURED_P (f))
+             if (FRAME_REDISPLAY_P (f) && !FRAME_OBSCURED_P (f))
                {
-
                  /* Don't allow freeing images and faces for this
                     frame as long as the frame's update wasn't
                     completed.  This prevents crashes when some Lisp
@@ -16870,7 +16878,7 @@ redisplay_internal (void)
              if (gcscrollbars && FRAME_TERMINAL (f)->judge_scroll_bars_hook)
                FRAME_TERMINAL (f)->judge_scroll_bars_hook (f);
 
-             if (FRAME_VISIBLE_P (f) && !FRAME_OBSCURED_P (f))
+             if (FRAME_REDISPLAY_P (f) && !FRAME_OBSCURED_P (f))
                {
                  /* If fonts changed on visible frame, display again.  */
                  if (f->fonts_changed)
@@ -16976,7 +16984,7 @@ redisplay_internal (void)
            }
        }
     }
-  else if (FRAME_VISIBLE_P (sf) && !FRAME_OBSCURED_P (sf))
+  else if (FRAME_REDISPLAY_P (sf) && !FRAME_OBSCURED_P (sf))
     {
       sf->inhibit_clear_image_cache = true;
       displayed_buffer = XBUFFER (XWINDOW (selected_window)->contents);
@@ -17027,7 +17035,7 @@ redisplay_internal (void)
        unrequest_sigio ();
       STOP_POLLING;
 
-      if (FRAME_VISIBLE_P (sf) && !FRAME_OBSCURED_P (sf))
+      if (FRAME_REDISPLAY_P (sf) && !FRAME_OBSCURED_P (sf))
        {
           if (hscroll_retries <= MAX_HSCROLL_RETRIES
               && hscroll_windows (selected_window))
@@ -17126,7 +17134,7 @@ redisplay_internal (void)
 
       FOR_EACH_FRAME (tail, frame)
        {
-         if (XFRAME (frame)->visible)
+         if (FRAME_REDISPLAY_P (XFRAME (frame)))
            new_count++;
        }
 
@@ -33250,7 +33258,7 @@ display_and_set_cursor (struct window *w, bool on,
      windows and frames; in the latter case, the frame or window may
      be in the midst of changing its size, and x and y may be off the
      window.  */
-  if (! FRAME_VISIBLE_P (f)
+  if (! FRAME_REDISPLAY_P (f)
       || vpos >= w->current_matrix->nrows
       || hpos >= w->current_matrix->matrix_w)
     return;
@@ -33411,7 +33419,7 @@ gui_update_cursor (struct frame *f, bool on_p)
 void
 gui_clear_cursor (struct window *w)
 {
-  if (FRAME_VISIBLE_P (XFRAME (w->frame)) && w->phys_cursor_on_p)
+  if (FRAME_REDISPLAY_P (XFRAME (w->frame)) && w->phys_cursor_on_p)
     update_window_cursor (w, false);
 }
 
diff --git a/src/xfaces.c b/src/xfaces.c
index be4a7ca71cc..68f7cc493cc 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -1,6 +1,6 @@
 /* xfaces.c -- "Face" primitives.
 
-Copyright (C) 1993-1994, 1998-2022 Free Software Foundation, Inc.
+Copyright (C) 1993-1994, 1998-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -7280,7 +7280,7 @@ syms_of_xfaces (void)
   DEFVAR_BOOL ("face-filters-always-match", face_filters_always_match,
     doc: /* Non-nil means that face filters are always deemed to match.
 This variable is intended for use only by code that evaluates
-the "specifity" of a face specification and should be let-bound
+the "specificity" of a face specification and should be let-bound
 only for this purpose.  */);
 
   DEFVAR_LISP ("face--new-frame-defaults", Vface_new_frame_defaults,
diff --git a/src/xfns.c b/src/xfns.c
index 668f711bdb5..3a129211463 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -1,6 +1,6 @@
 /* Functions for the X Window System.
 
-Copyright (C) 1989, 1992-2022 Free Software Foundation, Inc.
+Copyright (C) 1989, 1992-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -1757,19 +1757,17 @@ x_set_tab_bar_lines (struct frame *f, Lisp_Object 
value, Lisp_Object oldval)
 void
 x_change_tab_bar_height (struct frame *f, int height)
 {
-  int unit, old_height, lines;
-  Lisp_Object fullscreen;
-
-  unit = FRAME_LINE_HEIGHT (f);
-  old_height = FRAME_TAB_BAR_HEIGHT (f);
-  fullscreen = get_frame_param (f, Qfullscreen);
+  int unit = FRAME_LINE_HEIGHT (f);
+  int old_height = FRAME_TAB_BAR_HEIGHT (f);
 
   /* This differs from the tool bar code in that the tab bar height is
      not rounded up.  Otherwise, if redisplay_tab_bar decides to grow
      the tab bar by even 1 pixel, FRAME_TAB_BAR_LINES will be changed,
      leading to the tab bar height being incorrectly set upon the next
      call to x_set_font.  (bug#59285) */
-  lines = height / unit;
+  int lines = height / unit;
+  if (lines == 0 && height != 0)
+    lines = 1;
 
   /* Make sure we redisplay all windows in this frame.  */
   fset_redisplay (f);
@@ -1790,6 +1788,8 @@ x_change_tab_bar_height (struct frame *f, int height)
 
   if (!f->tab_bar_resized)
     {
+      Lisp_Object fullscreen = get_frame_param (f, Qfullscreen);
+
       /* As long as tab_bar_resized is false, effectively try to change
         F's native height.  */
       if (NILP (fullscreen) || EQ (fullscreen, Qfullwidth))
@@ -4741,6 +4741,7 @@ This function is an internal primitive--use `make-frame' 
instead.  */)
 #endif /* USE_LUCID && USE_TOOLKIT_SCROLL_BARS */
   f->output_data.x->white_relief.pixel = -1;
   f->output_data.x->black_relief.pixel = -1;
+  f->output_data.x->visibility_state = VisibilityFullyObscured;
 
   fset_icon_name (f, gui_display_get_arg (dpyinfo,
                                           parms,
diff --git a/src/xfont.c b/src/xfont.c
index 951446b44d2..ce32c7a2188 100644
--- a/src/xfont.c
+++ b/src/xfont.c
@@ -1,5 +1,5 @@
 /* xfont.c -- X core font driver.
-   Copyright (C) 2006-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006-2023 Free Software Foundation, Inc.
    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H13PRO009
diff --git a/src/xftfont.c b/src/xftfont.c
index b9686db2a73..4d5b855f178 100644
--- a/src/xftfont.c
+++ b/src/xftfont.c
@@ -1,5 +1,5 @@
 /* xftfont.c -- XFT font driver.
-   Copyright (C) 2006-2022 Free Software Foundation, Inc.
+   Copyright (C) 2006-2023 Free Software Foundation, Inc.
    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H13PRO009
diff --git a/src/xgselect.c b/src/xgselect.c
index 6e09a15fa84..7f4f2b04811 100644
--- a/src/xgselect.c
+++ b/src/xgselect.c
@@ -1,6 +1,6 @@
 /* Function for handling the GLib event loop.
 
-Copyright (C) 2009-2022 Free Software Foundation, Inc.
+Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/xgselect.h b/src/xgselect.h
index 156d4bde59f..cfc872558b7 100644
--- a/src/xgselect.h
+++ b/src/xgselect.h
@@ -1,6 +1,6 @@
 /* Header for xg_select.
 
-Copyright (C) 2009-2022 Free Software Foundation, Inc.
+Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/xmenu.c b/src/xmenu.c
index 756842c2fef..6d32aa3e078 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -1,6 +1,6 @@
 /* X Communication module for terminals which understand the X protocol.
 
-Copyright (C) 1986, 1988, 1993-1994, 1996, 1999-2022 Free Software
+Copyright (C) 1986, 1988, 1993-1994, 1996, 1999-2023 Free Software
 Foundation, Inc.
 
 Author: Jon Arnold
diff --git a/src/xml.c b/src/xml.c
index 2cccff12331..b55ac62cdd3 100644
--- a/src/xml.c
+++ b/src/xml.c
@@ -1,5 +1,5 @@
 /* Interface to libxml2.
-   Copyright (C) 2010-2022 Free Software Foundation, Inc.
+   Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/xrdb.c b/src/xrdb.c
index 01c9ff5558a..046200f0d19 100644
--- a/src/xrdb.c
+++ b/src/xrdb.c
@@ -1,5 +1,5 @@
 /* Deal with the X Resource Manager.
-   Copyright (C) 1990, 1993-1994, 2000-2022 Free Software Foundation,
+   Copyright (C) 1990, 1993-1994, 2000-2023 Free Software Foundation,
    Inc.
 
 Author: Joseph Arceneaux
diff --git a/src/xselect.c b/src/xselect.c
index 05548be311f..0586e46870b 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -1,5 +1,5 @@
 /* X Selection processing for Emacs.
-   Copyright (C) 1993-1997, 2000-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993-1997, 2000-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/xsettings.c b/src/xsettings.c
index 00b67539d41..f366c9d7fc5 100644
--- a/src/xsettings.c
+++ b/src/xsettings.c
@@ -1,6 +1,6 @@
 /* Functions for handling font and other changes dynamically.
 
-Copyright (C) 2009-2022 Free Software Foundation, Inc.
+Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/xsettings.h b/src/xsettings.h
index 833c2b367dc..f1c6f7af1f1 100644
--- a/src/xsettings.h
+++ b/src/xsettings.h
@@ -1,6 +1,6 @@
 /* Functions for handle font changes dynamically.
 
-Copyright (C) 2009-2022 Free Software Foundation, Inc.
+Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/xsmfns.c b/src/xsmfns.c
index 7a17e6dbd86..799c9fd1053 100644
--- a/src/xsmfns.c
+++ b/src/xsmfns.c
@@ -1,7 +1,7 @@
 /* Session management module for systems which understand the X Session
    management protocol.
 
-Copyright (C) 2002-2022 Free Software Foundation, Inc.
+Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/xterm.c b/src/xterm.c
index 60d48165650..028bb7582c4 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -1,6 +1,6 @@
 /* X Communication module for terminals which understand the X protocol.
 
-Copyright (C) 1989, 1993-2022 Free Software Foundation, Inc.
+Copyright (C) 1989, 1993-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -4597,7 +4597,7 @@ x_dnd_send_position (struct frame *f, Window target, 
Window toplevel,
      maintained by the original author of the protocol specifies it
      for all versions.  Since at least one program supports these
      flags, but uses protocol v4 (and not v5), set them for all
-     protocool versions.  */
+     protocol versions.  */
   if (button >= 4 && button <= 7)
     {
       msg.xclient.data.l[1] |= (1 << 10);
@@ -7645,6 +7645,46 @@ x_after_update_window_line (struct window *w, struct 
glyph_row *desired_row)
 #endif
 }
 
+/* Generate a premultiplied pixel value for COLOR with ALPHA applied
+   on the given display.  COLOR will be modified.  The display must
+   use a visual that supports an alpha channel.
+
+   This is possibly dead code on builds which do not support
+   XRender.  */
+
+#ifndef USE_CAIRO
+
+static unsigned long
+x_premultiply_pixel (struct x_display_info *dpyinfo,
+                    XColor *color, double alpha)
+{
+  unsigned long pixel;
+
+  eassert (dpyinfo->alpha_bits);
+
+  /* Multiply the RGB channels.  */
+  color->red *= alpha;
+  color->green *= alpha;
+  color->blue *= alpha;
+
+  /* First, allocate a fully opaque pixel.  */
+  pixel = x_make_truecolor_pixel (dpyinfo, color->red,
+                                 color->green,
+                                 color->blue);
+
+  /* Next, erase the alpha component.  */
+  pixel &= ~dpyinfo->alpha_mask;
+
+  /* And add an alpha channel.  */
+  pixel |= (((unsigned long) (alpha * 65535)
+            >> (16 - dpyinfo->alpha_bits))
+           << dpyinfo->alpha_offset);
+
+  return pixel;
+}
+
+#endif
+
 static void
 x_draw_fringe_bitmap (struct window *w, struct glyph_row *row,
                      struct draw_fringe_bitmap_params *p)
@@ -7734,18 +7774,15 @@ x_draw_fringe_bitmap (struct window *w, struct 
glyph_row *row,
       if (FRAME_DISPLAY_INFO (f)->alpha_bits
          && f->alpha_background < 1.0)
        {
+         /* Extend the background color with an alpha channel
+            according to f->alpha_background.  */
          bg.pixel = background;
          x_query_colors (f, &bg, 1);
-         bg.red *= f->alpha_background;
-         bg.green *= f->alpha_background;
-         bg.blue *= f->alpha_background;
 
-         background = x_make_truecolor_pixel (FRAME_DISPLAY_INFO (f),
-                                              bg.red, bg.green, bg.blue);
-         background &= ~FRAME_DISPLAY_INFO (f)->alpha_mask;
-         background |= (((unsigned long) (f->alpha_background * 0xffff)
-                         >> (16 - FRAME_DISPLAY_INFO (f)->alpha_bits))
-                        << FRAME_DISPLAY_INFO (f)->alpha_offset);
+         background
+           = x_premultiply_pixel (FRAME_DISPLAY_INFO (f),
+                                  &bg,
+                                  f->alpha_background);
        }
 
       /* Draw the bitmap.  I believe these small pixmaps can be cached
@@ -8894,7 +8931,11 @@ x_color_cells (Display *dpy, int *ncells)
 
 
 /* On frame F, translate pixel colors to RGB values for the NCOLORS
-   colors in COLORS.  Use cached information, if available.  */
+   colors in COLORS.  Use cached information, if available.
+
+   Pixel values are in unsigned normalized format, meaning that
+   extending missing bits is done straightforwardly without any
+   complex colorspace conversions.  */
 
 void
 x_query_colors (struct frame *f, XColor *colors, int ncolors)
@@ -8942,6 +8983,7 @@ x_query_colors (struct frame *f, XColor *colors, int 
ncolors)
          colors[i].green = (g * gmult) >> 16;
          colors[i].blue = (b * bmult) >> 16;
        }
+
       return;
     }
 
@@ -8984,16 +9026,10 @@ x_query_frame_background_color (struct frame *f, XColor 
*bgcolor)
        {
          bg.pixel = background;
          x_query_colors (f, &bg, 1);
-         bg.red *= f->alpha_background;
-         bg.green *= f->alpha_background;
-         bg.blue *= f->alpha_background;
 
-         background = x_make_truecolor_pixel (FRAME_DISPLAY_INFO (f),
-                                              bg.red, bg.green, bg.blue);
-         background &= ~FRAME_DISPLAY_INFO (f)->alpha_mask;
-         background |= (((unsigned long) (f->alpha_background * 0xffff)
-                         >> (16 - FRAME_DISPLAY_INFO (f)->alpha_bits))
-                        << FRAME_DISPLAY_INFO (f)->alpha_offset);
+         background
+           = x_premultiply_pixel (FRAME_DISPLAY_INFO (f),
+                                  &bg, f->alpha_background);
        }
 #endif
     }
@@ -21707,9 +21743,9 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 
     case VisibilityNotify:
       f = x_top_window_to_frame (dpyinfo, event->xvisibility.window);
-      if (f && (event->xvisibility.state == VisibilityUnobscured
-               || event->xvisibility.state == VisibilityPartiallyObscured))
-       SET_FRAME_VISIBLE (f, 1);
+
+      if (f)
+       FRAME_X_OUTPUT (f)->visibility_state = event->xvisibility.state;
 
       goto OTHER;
 
@@ -26264,8 +26300,10 @@ x_error_handler (Display *display, XErrorEvent *event)
 static void NO_INLINE
 x_error_quitter (Display *display, XErrorEvent *event)
 {
-  char buf[256], buf1[400 + INT_STRLEN_BOUND (int)
-                     + INT_STRLEN_BOUND (unsigned long)];
+  char buf[256], buf1[800 + INT_STRLEN_BOUND (int)
+                     + INT_STRLEN_BOUND (unsigned long)
+                     + INT_STRLEN_BOUND (XID)
+                     + INT_STRLEN_BOUND (int)];
 
   /* Ignore BadName errors.  They can happen because of fonts
      or colors that are not defined.  */
@@ -26278,8 +26316,12 @@ x_error_quitter (Display *display, XErrorEvent *event)
 
   XGetErrorText (display, event->error_code, buf, sizeof (buf));
   sprintf (buf1, "X protocol error: %s on protocol request %d\n"
-          "Serial no: %lu\n", buf, event->request_code,
-          event->serial);
+          "Serial no: %lu\n"
+          "Failing resource ID (if any): 0x%lx\n"
+          "Minor code: %d\n"
+          "This is a bug!  Please report this to bug-gnu-emacs@gnu.org!\n",
+          buf, event->request_code, event->serial, event->resourceid,
+          event->minor_code);
   x_connection_closed (display, buf1, false);
 }
 
@@ -28435,7 +28477,10 @@ x_make_frame_invisible (struct frame *f)
        error ("Can't notify window manager of window withdrawal");
       }
 
-  XSync (FRAME_X_DISPLAY (f), False);
+  /* Don't perform the synchronization if the network connection is
+     slow, and the user says it is unwanted.  */
+  if (NILP (Vx_lax_frame_positioning))
+    XSync (FRAME_X_DISPLAY (f), False);
 
   /* We can't distinguish this from iconification
      just by the event that we get from the server.
@@ -28446,8 +28491,7 @@ x_make_frame_invisible (struct frame *f)
   SET_FRAME_ICONIFIED (f, false);
 
   if (CONSP (frame_size_history))
-    frame_size_history_plain
-      (f, build_string ("x_make_frame_invisible"));
+    frame_size_history_plain (f, build_string ("x_make_frame_invisible"));
 
   unblock_input ();
 }
@@ -28797,6 +28841,13 @@ x_free_frame_resources (struct frame *f)
   if (f == hlinfo->mouse_face_mouse_frame)
     reset_mouse_highlight (hlinfo);
 
+  /* These two need to be freed now that they are used to compute the
+     mouse position, I think.  */
+  if (f == dpyinfo->last_mouse_motion_frame)
+    dpyinfo->last_mouse_motion_frame = NULL;
+  if (f == dpyinfo->last_mouse_frame)
+    dpyinfo->last_mouse_frame = NULL;
+
 #ifdef HAVE_XINPUT2
   /* Consider a frame being unfocused with no following FocusIn event
      while an older focus from another seat exists.  The client
@@ -31974,6 +32025,7 @@ too slow, which is usually true when the X server is 
located over a
 network connection with high latency.  Doing so will make frame
 creation and placement faster at the cost of reducing the accuracy of
 frame placement via frame parameters, `set-frame-position', and
-`set-frame-size'.  */);
+`set-frame-size', along with the actual state of a frame after
+`x_make_frame_invisible'.  */);
   Vx_lax_frame_positioning = Qnil;
 }
diff --git a/src/xterm.h b/src/xterm.h
index 832ffc172b9..d768ba7ff8d 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -1,5 +1,5 @@
 /* Definitions and headers for communication with X protocol.
-   Copyright (C) 1989, 1993-1994, 1998-2022 Free Software Foundation,
+   Copyright (C) 1989, 1993-1994, 1998-2023 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
@@ -1290,6 +1290,11 @@ struct x_output
      strictly an optimization to avoid extraneous synchronizing in
      some cases.  */
   int root_x, root_y;
+
+  /* The frame visibility state.  This starts out
+     VisibilityFullyObscured, but is set to something else in
+     handle_one_xevent.  */
+  int visibility_state;
 };
 
 enum
@@ -1408,6 +1413,11 @@ extern void x_mark_frame_dirty (struct frame *f);
 /* And its corresponding visual info.  */
 #define FRAME_X_VISUAL_INFO(f) (&FRAME_DISPLAY_INFO (f)->visual_info)
 
+/* Whether or not the frame is visible.  Do not test this alone.
+   Instead, use FRAME_REDISPLAY_P.  */
+#define FRAME_X_VISIBLE(f) (FRAME_X_OUTPUT (f)->visibility_state       \
+                           != VisibilityFullyObscured)
+
 #ifdef HAVE_XRENDER
 #define FRAME_X_PICTURE_FORMAT(f) FRAME_DISPLAY_INFO (f)->pict_format
 #define FRAME_X_PICTURE(f) ((f)->output_data.x->picture)
diff --git a/src/xwidget.c b/src/xwidget.c
index 8bdfab02fd4..efe27055629 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -1,6 +1,6 @@
 /* Support for embedding graphical components in a buffer.
 
-Copyright (C) 2011-2022 Free Software Foundation, Inc.
+Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/xwidget.h b/src/xwidget.h
index 502beb67650..171924e0aaa 100644
--- a/src/xwidget.h
+++ b/src/xwidget.h
@@ -1,6 +1,6 @@
 /* Support for embedding graphical components in a buffer.
 
-Copyright (C) 2011-2022 Free Software Foundation, Inc.
+Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/test/ChangeLog.1 b/test/ChangeLog.1
index 328609038a7..2c412a64519 100644
--- a/test/ChangeLog.1
+++ b/test/ChangeLog.1
@@ -2952,7 +2952,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2008-2022 Free Software Foundation, Inc.
+  Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/test/Makefile.in b/test/Makefile.in
index 1fa9d5f7d9d..fd21695f5bc 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2010-2022 Free Software Foundation, Inc.
+# Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/test/README b/test/README
index eb6314c74d6..9255dbed513 100644
--- a/test/README
+++ b/test/README
@@ -1,4 +1,4 @@
-Copyright (C) 2008-2022 Free Software Foundation, Inc.
+Copyright (C) 2008-2023 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 This directory contains files intended to test various aspects of
diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba
index d9d963bcfd5..c005d872cb8 100644
--- a/test/infra/Dockerfile.emba
+++ b/test/infra/Dockerfile.emba
@@ -1,4 +1,4 @@
-# Copyright (C) 2021-2022 Free Software Foundation, Inc.
+# Copyright (C) 2021-2023 Free Software Foundation, Inc.
 #
 #  This file is part of GNU Emacs.
 #
diff --git a/test/infra/Makefile.in b/test/infra/Makefile.in
index c251578e6a7..c6538c093c0 100644
--- a/test/infra/Makefile.in
+++ b/test/infra/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2021-2022 Free Software Foundation, Inc.
+# Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/test/infra/gitlab-ci.yml b/test/infra/gitlab-ci.yml
index 96fe9e3a1c3..1c1452dcda5 100644
--- a/test/infra/gitlab-ci.yml
+++ b/test/infra/gitlab-ci.yml
@@ -1,4 +1,4 @@
-# Copyright (C) 2017-2022 Free Software Foundation, Inc.
+# Copyright (C) 2017-2023 Free Software Foundation, Inc.
 #
 #  This file is part of GNU Emacs.
 #
diff --git a/test/lib-src/emacsclient-tests.el 
b/test/lib-src/emacsclient-tests.el
index 0fa3c6facf1..8e44f4fe4bf 100644
--- a/test/lib-src/emacsclient-tests.el
+++ b/test/lib-src/emacsclient-tests.el
@@ -1,6 +1,6 @@
 ;;; emacsclient-tests.el --- Test emacsclient  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/abbrev-tests.el b/test/lisp/abbrev-tests.el
index 947178473e4..ecca21df4bc 100644
--- a/test/lisp/abbrev-tests.el
+++ b/test/lisp/abbrev-tests.el
@@ -1,6 +1,6 @@
 ;;; abbrev-tests.el --- Test suite for abbrevs  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Eli Zaretskii <eliz@gnu.org>
 ;; Keywords: abbrevs
diff --git a/test/lisp/align-tests.el b/test/lisp/align-tests.el
index 5b964fc5c0f..62ef9cf27fa 100644
--- a/test/lisp/align-tests.el
+++ b/test/lisp/align-tests.el
@@ -1,6 +1,6 @@
 ;;; align-tests.el --- Test suite for aligns  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/allout-tests.el b/test/lisp/allout-tests.el
index 4c3fd9c5dc6..9b70f86c09a 100644
--- a/test/lisp/allout-tests.el
+++ b/test/lisp/allout-tests.el
@@ -1,6 +1,6 @@
 ;;; allout-tests.el --- Tests for allout.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/allout-widgets-tests.el 
b/test/lisp/allout-widgets-tests.el
index c6616922be9..67b796d69c5 100644
--- a/test/lisp/allout-widgets-tests.el
+++ b/test/lisp/allout-widgets-tests.el
@@ -1,6 +1,6 @@
 ;;; allout-widgets-tests.el --- Tests for allout-widgets.el  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/ansi-color-tests.el b/test/lisp/ansi-color-tests.el
index f672f334914..996a0512814 100644
--- a/test/lisp/ansi-color-tests.el
+++ b/test/lisp/ansi-color-tests.el
@@ -1,6 +1,6 @@
 ;;; ansi-color-tests.el --- Test suite for ansi-color  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Pablo Barbáchano <pablob@amazon.com>
 
diff --git a/test/lisp/ansi-osc-tests.el b/test/lisp/ansi-osc-tests.el
index b3d66fb036c..616ea0d0d34 100644
--- a/test/lisp/ansi-osc-tests.el
+++ b/test/lisp/ansi-osc-tests.el
@@ -1,6 +1,6 @@
 ;;; osc-tests.el --- Tests for osc.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Matthias Meulien <orontee@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/apropos-tests.el b/test/lisp/apropos-tests.el
index 917c08b9114..c899087634b 100644
--- a/test/lisp/apropos-tests.el
+++ b/test/lisp/apropos-tests.el
@@ -1,6 +1,6 @@
 ;;; apropos-tests.el --- Tests for apropos.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/arc-mode-tests.el b/test/lisp/arc-mode-tests.el
index 341a835039e..32bce1b71bd 100644
--- a/test/lisp/arc-mode-tests.el
+++ b/test/lisp/arc-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; arc-mode-tests.el --- Test suite for arc-mode. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/auth-source-pass-tests.el 
b/test/lisp/auth-source-pass-tests.el
index d6d42ce942e..ed14289bade 100644
--- a/test/lisp/auth-source-pass-tests.el
+++ b/test/lisp/auth-source-pass-tests.el
@@ -1,6 +1,6 @@
 ;;; auth-source-pass-tests.el --- Tests for auth-source-pass.el  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2013, 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013, 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Damien Cassou <damien.cassou@gmail.com>
 
diff --git a/test/lisp/auth-source-tests.el b/test/lisp/auth-source-tests.el
index a76e4fb0d2e..6f832725754 100644
--- a/test/lisp/auth-source-tests.el
+++ b/test/lisp/auth-source-tests.el
@@ -1,6 +1,6 @@
 ;;; auth-source-tests.el --- Tests for auth-source.el  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Damien Cassou <damien@cassou.me>,
 ;;         Nicolas Petton <nicolas@petton.fr>
diff --git a/test/lisp/autoinsert-tests.el b/test/lisp/autoinsert-tests.el
index 722215cb7e4..fc4e2bdab5b 100644
--- a/test/lisp/autoinsert-tests.el
+++ b/test/lisp/autoinsert-tests.el
@@ -1,6 +1,6 @@
 ;;; autoinsert-tests.el --- Tests for autoinsert.el  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/autorevert-tests.el b/test/lisp/autorevert-tests.el
index 568820ec42c..8dbb5d2a496 100644
--- a/test/lisp/autorevert-tests.el
+++ b/test/lisp/autorevert-tests.el
@@ -1,6 +1,6 @@
 ;;; autorevert-tests.el --- Tests of auto-revert   -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
diff --git a/test/lisp/battery-tests.el b/test/lisp/battery-tests.el
index 1f9cfaee01f..e8fa1a6d017 100644
--- a/test/lisp/battery-tests.el
+++ b/test/lisp/battery-tests.el
@@ -1,6 +1,6 @@
 ;;; battery-tests.el --- tests for battery.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/bookmark-tests.el b/test/lisp/bookmark-tests.el
index 3bea08bc37a..12a9f24e66e 100644
--- a/test/lisp/bookmark-tests.el
+++ b/test/lisp/bookmark-tests.el
@@ -1,6 +1,6 @@
 ;;; bookmark-tests.el --- Tests for bookmark.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/buff-menu-tests.el b/test/lisp/buff-menu-tests.el
index 8e7981e6999..b3a54093c54 100644
--- a/test/lisp/buff-menu-tests.el
+++ b/test/lisp/buff-menu-tests.el
@@ -1,6 +1,6 @@
 ;;; buff-menu-tests.el --- Test suite for buff-menu.el -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Tino Calancha <tino.calancha@gmail.com>
 
diff --git a/test/lisp/button-tests.el b/test/lisp/button-tests.el
index 99d1ee3de46..46371b01f3f 100644
--- a/test/lisp/button-tests.el
+++ b/test/lisp/button-tests.el
@@ -1,6 +1,6 @@
 ;;; button-tests.el --- tests for button.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/calc/calc-tests.el b/test/lisp/calc/calc-tests.el
index cd984f7ff7e..41c47e5332c 100644
--- a/test/lisp/calc/calc-tests.el
+++ b/test/lisp/calc/calc-tests.el
@@ -1,6 +1,6 @@
 ;;; calc-tests.el --- tests for calc                 -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Leo Liu <sdl.web@gmail.com>
 ;; Keywords: maint
diff --git a/test/lisp/calculator-tests.el b/test/lisp/calculator-tests.el
index c1a1942cf7c..7ac3b9ba37a 100644
--- a/test/lisp/calculator-tests.el
+++ b/test/lisp/calculator-tests.el
@@ -1,6 +1,6 @@
 ;;; calculator-tests.el --- Test suite for calculator. -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/calendar/cal-french-tests.el 
b/test/lisp/calendar/cal-french-tests.el
index 771681228e6..aad0eae5514 100644
--- a/test/lisp/calendar/cal-french-tests.el
+++ b/test/lisp/calendar/cal-french-tests.el
@@ -1,6 +1,6 @@
 ;;; cal-french-tests.el --- tests for cal-french.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/calendar/cal-julian-tests.el 
b/test/lisp/calendar/cal-julian-tests.el
index 46d49c68c1e..e0d74e8a6cd 100644
--- a/test/lisp/calendar/cal-julian-tests.el
+++ b/test/lisp/calendar/cal-julian-tests.el
@@ -1,6 +1,6 @@
 ;;; cal-julian-tests.el --- tests for calendar/cal-julian.el  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/calendar/icalendar-tests.el 
b/test/lisp/calendar/icalendar-tests.el
index baf4846c8f5..27076f5ce1f 100644
--- a/test/lisp/calendar/icalendar-tests.el
+++ b/test/lisp/calendar/icalendar-tests.el
@@ -1,6 +1,6 @@
 ;;; icalendar-tests.el --- Test suite for icalendar.el  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2005, 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2008-2023 Free Software Foundation, Inc.
 
 ;; Author:         Ulf Jasper <ulf.jasper@web.de>
 ;; Created:        March 2005
diff --git a/test/lisp/calendar/iso8601-tests.el 
b/test/lisp/calendar/iso8601-tests.el
index f64c498c027..f68ea2a4e4d 100644
--- a/test/lisp/calendar/iso8601-tests.el
+++ b/test/lisp/calendar/iso8601-tests.el
@@ -1,6 +1,6 @@
 ;;; iso8601-tests.el --- tests for calendar/iso8601.el    -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/calendar/lunar-tests.el 
b/test/lisp/calendar/lunar-tests.el
index 846a749eb5f..0d66403e3b6 100644
--- a/test/lisp/calendar/lunar-tests.el
+++ b/test/lisp/calendar/lunar-tests.el
@@ -1,6 +1,6 @@
 ;;; lunar-tests.el --- tests for calendar/lunar.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/calendar/parse-time-tests.el 
b/test/lisp/calendar/parse-time-tests.el
index 3fd53c6c1eb..95f1b83d851 100644
--- a/test/lisp/calendar/parse-time-tests.el
+++ b/test/lisp/calendar/parse-time-tests.el
@@ -1,6 +1,6 @@
 ;;; parse-time-tests.el --- Test suite for parse-time.el  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 
diff --git a/test/lisp/calendar/solar-tests.el 
b/test/lisp/calendar/solar-tests.el
index 9f79fed7c7b..1f1ad0578f6 100644
--- a/test/lisp/calendar/solar-tests.el
+++ b/test/lisp/calendar/solar-tests.el
@@ -1,6 +1,6 @@
 ;;; solar-tests.el --- tests for solar.el            -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/calendar/time-date-tests.el 
b/test/lisp/calendar/time-date-tests.el
index fd4d5ac8a1b..53afd372057 100644
--- a/test/lisp/calendar/time-date-tests.el
+++ b/test/lisp/calendar/time-date-tests.el
@@ -1,6 +1,6 @@
 ;;; time-date-tests.el --- tests for calendar/time-date.el    -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/calendar/todo-mode-tests.el 
b/test/lisp/calendar/todo-mode-tests.el
index 95855d1e639..8d4ea69e9eb 100644
--- a/test/lisp/calendar/todo-mode-tests.el
+++ b/test/lisp/calendar/todo-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; todo-mode-tests.el --- tests for todo-mode.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Stephen Berman <stephen.berman@gmx.net>
 ;; Keywords: calendar
diff --git a/test/lisp/cedet/cedet-files-tests.el 
b/test/lisp/cedet/cedet-files-tests.el
index daaf3edfc4e..751101065ba 100644
--- a/test/lisp/cedet/cedet-files-tests.el
+++ b/test/lisp/cedet/cedet-files-tests.el
@@ -1,6 +1,6 @@
 ;;; cedet-files-tests.el --- Tests for cedet-files.el  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-c.el 
b/test/lisp/cedet/semantic-utest-c.el
index 87d754968f9..2569c1c9478 100644
--- a/test/lisp/cedet/semantic-utest-c.el
+++ b/test/lisp/cedet/semantic-utest-c.el
@@ -1,6 +1,6 @@
 ;;; semantic-utest-c.el --- C based parsing tests.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/test.srt 
b/test/lisp/cedet/semantic-utest-ia-resources/test.srt
index 46f14d8480f..b1094ffb52f 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/test.srt
+++ b/test/lisp/cedet/semantic-utest-ia-resources/test.srt
@@ -1,6 +1,6 @@
 ;; test.srt --- unit test support file for semantic-utest-ia
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testdoublens.cpp 
b/test/lisp/cedet/semantic-utest-ia-resources/testdoublens.cpp
index 54941fa974a..e192c4f7f83 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testdoublens.cpp
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testdoublens.cpp
@@ -1,6 +1,6 @@
 // testdoublens.cpp --- semantic-ia-utest completion engine unit tests
 
-// Copyright (C) 2008-2022 Free Software Foundation, Inc.
+// Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 // Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testdoublens.hpp 
b/test/lisp/cedet/semantic-utest-ia-resources/testdoublens.hpp
index 6157af42121..5c55a0fc6f0 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testdoublens.hpp
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testdoublens.hpp
@@ -1,6 +1,6 @@
 // testdoublens.hpp --- Header file used in one of the Semantic tests
 
-// Copyright (C) 2008-2022 Free Software Foundation, Inc.
+// Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 // Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testjavacomp.java 
b/test/lisp/cedet/semantic-utest-ia-resources/testjavacomp.java
index 10735a5aa97..639ed95e9da 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testjavacomp.java
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testjavacomp.java
@@ -1,6 +1,6 @@
 //  testjavacomp.java --- Semantic unit test for Java
 
-// Copyright (C) 2009-2022 Free Software Foundation, Inc.
+// Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 //  Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testlocalvars.cpp 
b/test/lisp/cedet/semantic-utest-ia-resources/testlocalvars.cpp
index 920022648f7..fbe20dade9c 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testlocalvars.cpp
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testlocalvars.cpp
@@ -1,6 +1,6 @@
 //  testlocalvars.java --- Semantic unit test for Java
 
-// Copyright (C) 2009-2022 Free Software Foundation, Inc.
+// Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 //  Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testnsp.cpp 
b/test/lisp/cedet/semantic-utest-ia-resources/testnsp.cpp
index 05f8f54afd0..e88bd37c808 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testnsp.cpp
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testnsp.cpp
@@ -1,6 +1,6 @@
 /* testnsp.cpp --- semantic-ia-utest completion engine unit tests
 
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testsppcomplete.c 
b/test/lisp/cedet/semantic-utest-ia-resources/testsppcomplete.c
index 1d2c51e3652..2458bf433aa 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testsppcomplete.c
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testsppcomplete.c
@@ -1,6 +1,6 @@
 /* testesppcomplete.cpp --- semantic-ia-utest completion engine unit tests
 
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/teststruct.cpp 
b/test/lisp/cedet/semantic-utest-ia-resources/teststruct.cpp
index f5b6d641842..894f53754ea 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/teststruct.cpp
+++ b/test/lisp/cedet/semantic-utest-ia-resources/teststruct.cpp
@@ -1,6 +1,6 @@
 // teststruct.cpp --- semantic-ia-utest completion engine unit tests
 
-// Copyright (C) 2008-2022 Free Software Foundation, Inc.
+// Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 // Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testsubclass.cpp 
b/test/lisp/cedet/semantic-utest-ia-resources/testsubclass.cpp
index 4c56d34c90d..a507f1bf418 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testsubclass.cpp
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testsubclass.cpp
@@ -1,6 +1,6 @@
 // testsubclass.cpp --- unit test for analyzer and complex C++ inheritance
 
-// Copyright (C) 2007-2022 Free Software Foundation, Inc.
+// Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 // Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testsubclass.hh 
b/test/lisp/cedet/semantic-utest-ia-resources/testsubclass.hh
index 870da66aded..a6c31ac8fab 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testsubclass.hh
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testsubclass.hh
@@ -1,6 +1,6 @@
 // testsubclass.hh --- unit test for analyzer and complex C++ inheritance
 
-// Copyright (C) 2007-2022 Free Software Foundation, Inc.
+// Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
 // Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testtemplates.cpp 
b/test/lisp/cedet/semantic-utest-ia-resources/testtemplates.cpp
index d2b0f5d3c37..f4c48edd562 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testtemplates.cpp
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testtemplates.cpp
@@ -1,6 +1,6 @@
 // testtemplates.cpp --- semantic-ia-utest completion engine unit tests
 
-// Copyright (C) 2008-2022 Free Software Foundation, Inc.
+// Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 // Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testtypedefs.cpp 
b/test/lisp/cedet/semantic-utest-ia-resources/testtypedefs.cpp
index 09ab78942e6..13f0f288212 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testtypedefs.cpp
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testtypedefs.cpp
@@ -1,6 +1,6 @@
 // testtypedefs.cpp --- Sample with some fake bits out of std::string
 
-// Copyright (C) 2008-2022 Free Software Foundation, Inc.
+// Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 // Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testusing.cpp 
b/test/lisp/cedet/semantic-utest-ia-resources/testusing.cpp
index 661c09b01bb..940e7caa0cf 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testusing.cpp
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testusing.cpp
@@ -1,6 +1,6 @@
 // testusing.cpp --- semantic-ia-utest completion engine unit tests
 
-// Copyright (C) 2008-2022 Free Software Foundation, Inc.
+// Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 // Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testusing.hh 
b/test/lisp/cedet/semantic-utest-ia-resources/testusing.hh
index e438e62e294..1effa00686d 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testusing.hh
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testusing.hh
@@ -1,6 +1,6 @@
 // testusing.hh --- semantic-ia-utest completion engine unit tests
 
-// Copyright (C) 2008-2022 Free Software Foundation, Inc.
+// Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 // Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testvarnames.c 
b/test/lisp/cedet/semantic-utest-ia-resources/testvarnames.c
index 00c877a182d..f8202296385 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testvarnames.c
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testvarnames.c
@@ -1,6 +1,6 @@
 /* testvarnames.cpp --- semantic-ia-utest completion engine unit tests
 
-   Copyright (C) 2008-2022 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testvarnames.java 
b/test/lisp/cedet/semantic-utest-ia-resources/testvarnames.java
index 323e2059c40..8934bb8d97d 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testvarnames.java
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testvarnames.java
@@ -1,6 +1,6 @@
 //  testvarnames.java --- Semantic unit test for Java
 
-// Copyright (C) 2009-2022 Free Software Foundation, Inc.
+// Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 //  Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia-resources/testwisent.wy 
b/test/lisp/cedet/semantic-utest-ia-resources/testwisent.wy
index 901a662e799..e00f2eb102e 100644
--- a/test/lisp/cedet/semantic-utest-ia-resources/testwisent.wy
+++ b/test/lisp/cedet/semantic-utest-ia-resources/testwisent.wy
@@ -1,6 +1,6 @@
 ;; testwisent.wy --- unit test support file for semantic-utest-ia
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest-ia.el 
b/test/lisp/cedet/semantic-utest-ia.el
index fa3b3185ed5..f2b2dbc5a7d 100644
--- a/test/lisp/cedet/semantic-utest-ia.el
+++ b/test/lisp/cedet/semantic-utest-ia.el
@@ -1,6 +1,6 @@
 ;;; semantic-utest-ia.el --- Analyzer unit tests  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic-utest.el 
b/test/lisp/cedet/semantic-utest.el
index 4aaa4c5e3c4..f53b7c41005 100644
--- a/test/lisp/cedet/semantic-utest.el
+++ b/test/lisp/cedet/semantic-utest.el
@@ -1,6 +1,6 @@
 ;;; semantic-utest.el --- Tests for semantic's parsing system. -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic/bovine/gcc-tests.el 
b/test/lisp/cedet/semantic/bovine/gcc-tests.el
index 041773a0c80..5437d65d139 100644
--- a/test/lisp/cedet/semantic/bovine/gcc-tests.el
+++ b/test/lisp/cedet/semantic/bovine/gcc-tests.el
@@ -1,6 +1,6 @@
 ;;; gcc-tests.el --- Tests for semantic/bovine/gcc.el  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic/format-resources/test-fmt.cpp 
b/test/lisp/cedet/semantic/format-resources/test-fmt.cpp
index 39843a22194..3b04542dcc1 100644
--- a/test/lisp/cedet/semantic/format-resources/test-fmt.cpp
+++ b/test/lisp/cedet/semantic/format-resources/test-fmt.cpp
@@ -1,6 +1,6 @@
 /** test-fmt.cpp --- Signatures, and format answers for testing
  *
- * Copyright (C) 2012, 2016, 2019-2022 Free Software Foundation, Inc.
+ * Copyright (C) 2012, 2016, 2019-2023 Free Software Foundation, Inc.
  *
  * Author: Eric M. Ludlam <zappo@gnu.org>
  *
diff --git a/test/lisp/cedet/semantic/format-resources/test-fmt.el 
b/test/lisp/cedet/semantic/format-resources/test-fmt.el
index 5fcb8ef3c36..3cef50e2395 100644
--- a/test/lisp/cedet/semantic/format-resources/test-fmt.el
+++ b/test/lisp/cedet/semantic/format-resources/test-fmt.el
@@ -1,6 +1,6 @@
 ;;; test-fmt.el --- test semantic tag formatting  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic/format-tests.el 
b/test/lisp/cedet/semantic/format-tests.el
index f698d865c3c..cc2bcc40ae3 100644
--- a/test/lisp/cedet/semantic/format-tests.el
+++ b/test/lisp/cedet/semantic/format-tests.el
@@ -1,6 +1,6 @@
 ;;; semantic/format-tests.el --- Parsing / Formatting tests -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/semantic/fw-tests.el 
b/test/lisp/cedet/semantic/fw-tests.el
index c8bfffb3cf5..6da2632aa39 100644
--- a/test/lisp/cedet/semantic/fw-tests.el
+++ b/test/lisp/cedet/semantic/fw-tests.el
@@ -1,6 +1,6 @@
 ;;; fw-tests.el --- Tests for semantic/fw.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/srecode-utest-getset.el 
b/test/lisp/cedet/srecode-utest-getset.el
index fbcb0ad4cf1..c3c1e41c3d2 100644
--- a/test/lisp/cedet/srecode-utest-getset.el
+++ b/test/lisp/cedet/srecode-utest-getset.el
@@ -1,6 +1,6 @@
 ;;; srecode/test-getset.el --- Test the getset inserter. -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2008-2009, 2011, 2019-2022 Free Software Foundation,
+;; Copyright (C) 2008-2009, 2011, 2019-2023 Free Software Foundation,
 ;; Inc.
 
 ;; This file is part of GNU Emacs.
diff --git a/test/lisp/cedet/srecode-utest-template.el 
b/test/lisp/cedet/srecode-utest-template.el
index 87c28c6af12..a43ea43ba30 100644
--- a/test/lisp/cedet/srecode-utest-template.el
+++ b/test/lisp/cedet/srecode-utest-template.el
@@ -1,6 +1,6 @@
 ;;; srecode-utest-template.el --- SRecode Core Template tests. -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/cedet/srecode/document-tests.el 
b/test/lisp/cedet/srecode/document-tests.el
index 5341bb09366..b5f7f83e0cb 100644
--- a/test/lisp/cedet/srecode/document-tests.el
+++ b/test/lisp/cedet/srecode/document-tests.el
@@ -1,6 +1,6 @@
 ;;; document-tests.el --- Tests for srecode/document.el  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/cedet/srecode/fields-tests.el 
b/test/lisp/cedet/srecode/fields-tests.el
index c9e0d4601b9..21c2b329120 100644
--- a/test/lisp/cedet/srecode/fields-tests.el
+++ b/test/lisp/cedet/srecode/fields-tests.el
@@ -1,6 +1,6 @@
 ;;; srecode/fields-tests.el --- Tests for srecode/fields.el  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/char-fold-tests.el b/test/lisp/char-fold-tests.el
index e7f5ff6fd2f..6e265a5eb27 100644
--- a/test/lisp/char-fold-tests.el
+++ b/test/lisp/char-fold-tests.el
@@ -1,6 +1,6 @@
 ;;; char-fold-tests.el --- Tests for char-fold.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
 
diff --git a/test/lisp/color-tests.el b/test/lisp/color-tests.el
index e4e1eda26d3..d47373bf023 100644
--- a/test/lisp/color-tests.el
+++ b/test/lisp/color-tests.el
@@ -1,6 +1,6 @@
 ;;; color-tests.el --- Tests for color.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/comint-tests.el b/test/lisp/comint-tests.el
index ce1a6865b65..6d435908b35 100644
--- a/test/lisp/comint-tests.el
+++ b/test/lisp/comint-tests.el
@@ -1,6 +1,6 @@
 ;;; comint-tests.el --- Tests for comint.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/completion-tests.el b/test/lisp/completion-tests.el
index dee6f8d5dda..d34691d93ae 100644
--- a/test/lisp/completion-tests.el
+++ b/test/lisp/completion-tests.el
@@ -1,6 +1,6 @@
 ;;; completion-tests.el --- Tests for completion.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/cus-edit-tests.el b/test/lisp/cus-edit-tests.el
index 0ef5168109b..eca35d7c96a 100644
--- a/test/lisp/cus-edit-tests.el
+++ b/test/lisp/cus-edit-tests.el
@@ -1,6 +1,6 @@
 ;;; cus-edit-tests.el --- Tests for cus-edit.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -83,7 +83,14 @@
 (ert-deftest test-setopt ()
   (should (= (setopt cus-edit-test-foo1 1) 1))
   (should (= cus-edit-test-foo1 1))
-  (should-error (setopt cus-edit-test-foo1 :foo)))
-
+  (let* ((text-quoting-style 'grave)
+         (warn-txt
+          (with-current-buffer (get-buffer-create "*Warnings*")
+            (let ((inhibit-read-only t))
+              (erase-buffer))
+            (setopt cus-edit-test-foo1 :foo)
+            (buffer-substring-no-properties (point-min) (point-max)))))
+    (should (string-search "Value `:foo' does not match type number"
+                           warn-txt))))
 (provide 'cus-edit-tests)
 ;;; cus-edit-tests.el ends here
diff --git a/test/lisp/custom-tests.el b/test/lisp/custom-tests.el
index d1effaa72a8..376a13d5df5 100644
--- a/test/lisp/custom-tests.el
+++ b/test/lisp/custom-tests.el
@@ -1,6 +1,6 @@
 ;;; custom-tests.el --- tests for custom.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/dabbrev-tests.el b/test/lisp/dabbrev-tests.el
index 278a59c015c..48677a0b415 100644
--- a/test/lisp/dabbrev-tests.el
+++ b/test/lisp/dabbrev-tests.el
@@ -1,6 +1,6 @@
 ;;; dabbrev-tests.el --- Test suite for dabbrev.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Alan Third <alan@idiocy.org>
 ;; Keywords: dabbrev
diff --git a/test/lisp/delim-col-tests.el b/test/lisp/delim-col-tests.el
index 2bf54d9b44c..a2721d8cdf8 100644
--- a/test/lisp/delim-col-tests.el
+++ b/test/lisp/delim-col-tests.el
@@ -1,6 +1,6 @@
 ;;; delim-col-tests.el --- Tests for delim-col.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/descr-text-tests.el b/test/lisp/descr-text-tests.el
index e5547d4f6eb..96c5d90e449 100644
--- a/test/lisp/descr-text-tests.el
+++ b/test/lisp/descr-text-tests.el
@@ -1,6 +1,6 @@
 ;;; descr-text-tests.el --- ERT tests for descr-text.el -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2014, 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014, 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Michal Nazarewicz <mina86@mina86.com>
 
diff --git a/test/lisp/desktop-tests.el b/test/lisp/desktop-tests.el
index d52fe39ed96..07f0be6c90e 100644
--- a/test/lisp/desktop-tests.el
+++ b/test/lisp/desktop-tests.el
@@ -1,6 +1,6 @@
 ;;; desktop-tests.el --- Tests for desktop.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020 Free Software Foundation, Inc.
+;; Copyright (C) 2020, 2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/dired-aux-tests.el b/test/lisp/dired-aux-tests.el
index e70898ab74e..5939f480680 100644
--- a/test/lisp/dired-aux-tests.el
+++ b/test/lisp/dired-aux-tests.el
@@ -1,6 +1,6 @@
 ;;; dired-aux-tests.el --- Test suite for dired-aux. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/dired-tests.el b/test/lisp/dired-tests.el
index 18b0257e01a..347bdfc0d7b 100644
--- a/test/lisp/dired-tests.el
+++ b/test/lisp/dired-tests.el
@@ -1,6 +1,6 @@
 ;;; dired-tests.el --- Test suite. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/dired-x-tests.el b/test/lisp/dired-x-tests.el
index 7acaa3c1319..b64b115e69f 100644
--- a/test/lisp/dired-x-tests.el
+++ b/test/lisp/dired-x-tests.el
@@ -1,6 +1,6 @@
 ;;; dired-x-tests.el --- Test suite for dired-x. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/dnd-tests.el b/test/lisp/dnd-tests.el
index bdadc0f2801..a603f29eb6d 100644
--- a/test/lisp/dnd-tests.el
+++ b/test/lisp/dnd-tests.el
@@ -1,6 +1,6 @@
 ;;; dnd-tests.el --- Tests for window system independent DND support -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/dom-tests.el b/test/lisp/dom-tests.el
index cb96f12d19d..abb586435a7 100644
--- a/test/lisp/dom-tests.el
+++ b/test/lisp/dom-tests.el
@@ -1,6 +1,6 @@
 ;;; dom-tests.el --- Tests for dom.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/edmacro-tests.el b/test/lisp/edmacro-tests.el
index e386342f6ee..f79529a2000 100644
--- a/test/lisp/edmacro-tests.el
+++ b/test/lisp/edmacro-tests.el
@@ -1,6 +1,6 @@
 ;;; edmacro-tests.el --- Tests for edmacro.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/electric-tests.el b/test/lisp/electric-tests.el
index d34737e6090..c577229c322 100644
--- a/test/lisp/electric-tests.el
+++ b/test/lisp/electric-tests.el
@@ -1,6 +1,6 @@
 ;;; electric-tests.el --- tests for electric.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: João Távora <joaotavora@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/elide-head-tests.el b/test/lisp/elide-head-tests.el
index 429ef266572..40a9d365f37 100644
--- a/test/lisp/elide-head-tests.el
+++ b/test/lisp/elide-head-tests.el
@@ -1,6 +1,6 @@
 ;;; elide-head-tests.el --- Tests for elide-head.el  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 
@@ -180,6 +180,90 @@
 ;; along with Mentor.  If not, see <https://www.gnu.org/licenses>.
 " "Mentor is distributed in the hope that")
 
+;; from GnuTLS       [has a line break in snail mail address]
+(elide-head--add-test gpl3-6 "\
+# This file is part of GnuTLS.
+#
+# This program 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.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+# USA
+" "This program is distributed in the hope that")
+
+;; from GnuTLS       [has a different line break in snail mail address]
+(elide-head--add-test gpl3-7 "\
+# This file is part of GnuTLS.
+#
+# The GnuTLS is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public License
+# as published by the Free Software Foundation; either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# The GnuTLS 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with GnuTLS; if not, write to the Free
+# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA
+" "The GnuTLS is distributed in the hope that")
+
+;; from GnuTLS       [has a typo in the 02111-1301 part]
+(elide-head--add-test gpl3-8 "\
+/* nettle, low-level cryptographics library
+ *
+ * Copyright (C) 2002 Niels Möller
+ * Copyright (C) 2014 Red Hat
+ *\s\s
+ * The nettle library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *\s
+ * The nettle library 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 Lesser General Public
+ * License for more details.
+ *\s
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with the nettle library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02111-1301, USA.
+ */
+" "The nettle library is distributed in the hope that")
+
+;; from GnuTLS-EXTRA  [has a different line break in snail mail address]
+(elide-head--add-test gpl3-9 "\
+# This file is part of GnuTLS-EXTRA.
+#
+# GnuTLS-extra 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.
+#
+# GnuTLS-extra 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 GnuTLS-EXTRA; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+" "GnuTLS-extra is distributed in the hope that")
+
 
 ;;; GPLv2
 
@@ -201,6 +285,28 @@
 " "This program is distributed in the hope that")
 
 
+;;; Apache License
+
+(elide-head--add-test apache1-1 "\
+/*
+ *  Copyright 2011-2016 The Pkcs11Interop Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the \"License\");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an \"AS IS\" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+" "Unless required by applicable law")
+
+
+
 ;;; Obsolete
 
 (with-suppressed-warnings ((obsolete elide-head)
diff --git a/test/lisp/emacs-lisp/backquote-tests.el 
b/test/lisp/emacs-lisp/backquote-tests.el
index 2ba61726f09..79155cc0450 100644
--- a/test/lisp/emacs-lisp/backquote-tests.el
+++ b/test/lisp/emacs-lisp/backquote-tests.el
@@ -1,6 +1,6 @@
 ;;; backquote-tests.el --- Tests for backquote.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/backtrace-tests.el 
b/test/lisp/emacs-lisp/backtrace-tests.el
index b42de06776b..794488edae8 100644
--- a/test/lisp/emacs-lisp/backtrace-tests.el
+++ b/test/lisp/emacs-lisp/backtrace-tests.el
@@ -1,6 +1,6 @@
 ;;; backtrace-tests.el --- Tests for backtraces -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Gemini Lasswell
 
diff --git a/test/lisp/emacs-lisp/benchmark-tests.el 
b/test/lisp/emacs-lisp/benchmark-tests.el
index b3c4949acc7..31357f24a0d 100644
--- a/test/lisp/emacs-lisp/benchmark-tests.el
+++ b/test/lisp/emacs-lisp/benchmark-tests.el
@@ -1,6 +1,6 @@
 ;;; benchmark-tests.el --- Test suite for benchmark.  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/bindat-tests.el 
b/test/lisp/emacs-lisp/bindat-tests.el
index 2abf714852f..1e4a511d036 100644
--- a/test/lisp/emacs-lisp/bindat-tests.el
+++ b/test/lisp/emacs-lisp/bindat-tests.el
@@ -1,6 +1,6 @@
 ;;; bindat-tests.el --- tests for bindat.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/bytecomp-tests.el 
b/test/lisp/emacs-lisp/bytecomp-tests.el
index 3400128759a..2fdf7389fc1 100644
--- a/test/lisp/emacs-lisp/bytecomp-tests.el
+++ b/test/lisp/emacs-lisp/bytecomp-tests.el
@@ -1,6 +1,6 @@
 ;;; bytecomp-tests.el --- Tests for bytecomp.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Shigeru Fukaya <shigeru.fukaya@gmail.com>
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
@@ -704,6 +704,59 @@ inner loops respectively."
     (let ((bytecomp-tests--xx 1))
       (set (make-local-variable 'bytecomp-tests--xx) 2)
       bytecomp-tests--xx)
+
+    ;; Check for-effect optimisation of `condition-case' body form.
+    ;; With `condition-case' in for-effect context:
+    (let ((x (bytecomp-test-identity ?A))
+          (r nil))
+      (condition-case e
+          (characterp x)                ; value (:success, var)
+        (error (setq r 'bad))
+        (:success (setq r (list 'good e))))
+      r)
+    (let ((x (bytecomp-test-identity ?B))
+          (r nil))
+      (condition-case nil
+          (characterp x)               ; for-effect (:success, no var)
+        (error (setq r 'bad))
+        (:success (setq r 'good)))
+      r)
+    (let ((x (bytecomp-test-identity ?C))
+          (r nil))
+      (condition-case e
+          (characterp x)               ; for-effect (no :success, var)
+        (error (setq r (list 'bad e))))
+      r)
+    (let ((x (bytecomp-test-identity ?D))
+          (r nil))
+      (condition-case nil
+          (characterp x)               ; for-effect (no :success, no var)
+        (error (setq r 'bad)))
+      r)
+    ;; With `condition-case' in value context:
+    (let ((x (bytecomp-test-identity ?E)))
+      (condition-case e
+          (characterp x)               ; for-effect (:success, var)
+        (error (list 'bad e))
+        (:success (list 'good e))))
+    (let ((x (bytecomp-test-identity ?F)))
+      (condition-case nil
+          (characterp x)               ; for-effect (:success, no var)
+        (error 'bad)
+        (:success 'good)))
+    (let ((x (bytecomp-test-identity ?G)))
+      (condition-case e
+          (characterp x)               ; value (no :success, var)
+        (error (list 'bad e))))
+    (let ((x (bytecomp-test-identity ?H)))
+      (condition-case nil
+          (characterp x)               ; value (no :success, no var)
+        (error 'bad)))
+
+    (condition-case nil
+        (bytecomp-test-identity 3)
+      (error 'bad)
+      (:success))                       ; empty handler
     )
   "List of expressions for cross-testing interpreted and compiled code.")
 
@@ -869,6 +922,16 @@ byte-compiled.  Run with dynamic binding."
   (bytecomp--with-warning-test "defvar.*foo.*wider than.*characters"
     `(defvar foo t ,bytecomp-tests--docstring)))
 
+(ert-deftest bytecomp-warn-quoted-condition ()
+  (bytecomp--with-warning-test
+      "Warning: `condition-case' condition should not be quoted: 'arith-error"
+    '(condition-case nil
+         (abc)
+       ('arith-error "ugh")))
+  (bytecomp--with-warning-test
+      "Warning: `ignore-error' condition argument should not be quoted: 'error"
+    '(ignore-error 'error (abc))))
+
 (ert-deftest bytecomp-warn-dodgy-args-eq ()
   (dolist (fn '(eq eql))
     (cl-flet ((msg (type arg)
@@ -1370,7 +1433,50 @@ literals (Bug#20852)."
         (set-buffer (get-buffer-create "foo"))
         nil))
    '((suspicious set-buffer))
-   "Warning: Use .with-current-buffer. rather than"))
+   "Warning: Use .with-current-buffer. rather than")
+
+  (test-suppression
+   '(defun zot ()
+      (let ((_ 1))
+        ))
+   '((empty-body let))
+   "Warning: `let' with empty body")
+
+  (test-suppression
+   '(defun zot ()
+      (let* ((_ 1))
+        ))
+   '((empty-body let*))
+   "Warning: `let\\*' with empty body")
+
+  (test-suppression
+   '(defun zot (x)
+      (when x
+        ))
+   '((empty-body when))
+   "Warning: `when' with empty body")
+
+  (test-suppression
+   '(defun zot (x)
+      (unless x
+        ))
+   '((empty-body unless))
+   "Warning: `unless' with empty body")
+
+  (test-suppression
+   '(defun zot (x)
+      (ignore-error arith-error
+        ))
+   '((empty-body ignore-error))
+   "Warning: `ignore-error' with empty body")
+
+  (test-suppression
+   '(defun zot (x)
+      (with-suppressed-warnings ((suspicious eq))
+        ))
+   '((empty-body with-suppressed-warnings))
+   "Warning: `with-suppressed-warnings' with empty body")
+  )
 
 (ert-deftest bytecomp-tests--not-writable-directory ()
   "Test that byte compilation works if the output directory isn't
diff --git a/test/lisp/emacs-lisp/cconv-tests.el 
b/test/lisp/emacs-lisp/cconv-tests.el
index 537f6bfe721..83013cf46a9 100644
--- a/test/lisp/emacs-lisp/cconv-tests.el
+++ b/test/lisp/emacs-lisp/cconv-tests.el
@@ -1,6 +1,6 @@
 ;;; cconv-tests.el --- Tests for cconv.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/check-declare-tests.el 
b/test/lisp/emacs-lisp/check-declare-tests.el
index 59dfc10163d..840b6d22e1e 100644
--- a/test/lisp/emacs-lisp/check-declare-tests.el
+++ b/test/lisp/emacs-lisp/check-declare-tests.el
@@ -1,6 +1,6 @@
 ;;; check-declare-tests.el --- Tests for check-declare.el  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/emacs-lisp/checkdoc-tests.el 
b/test/lisp/emacs-lisp/checkdoc-tests.el
index c17415cbdd1..57694bd424b 100644
--- a/test/lisp/emacs-lisp/checkdoc-tests.el
+++ b/test/lisp/emacs-lisp/checkdoc-tests.el
@@ -1,6 +1,6 @@
 ;;; checkdoc-tests.el --- unit tests for checkdoc.el  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Philipp Stephani <phst@google.com>
 
diff --git a/test/lisp/emacs-lisp/cl-extra-tests.el 
b/test/lisp/emacs-lisp/cl-extra-tests.el
index 6a34cd681ec..84f878900b5 100644
--- a/test/lisp/emacs-lisp/cl-extra-tests.el
+++ b/test/lisp/emacs-lisp/cl-extra-tests.el
@@ -1,6 +1,6 @@
 ;;; cl-extra-tests.el --- tests for emacs-lisp/cl-extra.el  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/cl-generic-tests.el 
b/test/lisp/emacs-lisp/cl-generic-tests.el
index 8e807b15915..57b9c949342 100644
--- a/test/lisp/emacs-lisp/cl-generic-tests.el
+++ b/test/lisp/emacs-lisp/cl-generic-tests.el
@@ -1,6 +1,6 @@
 ;;; cl-generic-tests.el --- Tests for cl-generic.el functionality  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 
diff --git a/test/lisp/emacs-lisp/cl-lib-tests.el 
b/test/lisp/emacs-lisp/cl-lib-tests.el
index 759138569e4..4e1a0fd63a2 100644
--- a/test/lisp/emacs-lisp/cl-lib-tests.el
+++ b/test/lisp/emacs-lisp/cl-lib-tests.el
@@ -1,6 +1,6 @@
 ;;; cl-lib-tests.el --- tests for emacs-lisp/cl-lib.el  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -431,7 +431,7 @@
     (should (eq nums (cdr (cl-adjoin 3 nums))))
     ;; add only when not already there
     (should (eq nums (cl-adjoin 2 nums)))
-    (with-suppressed-warnings ((suspicious eq))
+    (with-suppressed-warnings ((suspicious memql))
       (should (equal '(2 1 (2)) (cl-adjoin 2 '(1 (2))))))
     ;; default test function is eql
     (should (equal '(1.0 1 2) (cl-adjoin 1.0 nums)))
diff --git a/test/lisp/emacs-lisp/cl-macs-tests.el 
b/test/lisp/emacs-lisp/cl-macs-tests.el
index 160ac591130..a9ec0b76ae8 100644
--- a/test/lisp/emacs-lisp/cl-macs-tests.el
+++ b/test/lisp/emacs-lisp/cl-macs-tests.el
@@ -1,6 +1,6 @@
 ;;; cl-macs-tests.el --- tests for emacs-lisp/cl-macs.el  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/cl-preloaded-tests.el 
b/test/lisp/emacs-lisp/cl-preloaded-tests.el
index 43cd7b6bff1..7c863b4d3eb 100644
--- a/test/lisp/emacs-lisp/cl-preloaded-tests.el
+++ b/test/lisp/emacs-lisp/cl-preloaded-tests.el
@@ -1,6 +1,6 @@
 ;;; cl-preloaded-tests.el --- unit tests for cl-preloaded.el  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 ;; Author: Philipp Stephani <phst@google.com>
 
 ;; This file is part of GNU Emacs.
diff --git a/test/lisp/emacs-lisp/cl-print-tests.el 
b/test/lisp/emacs-lisp/cl-print-tests.el
index 57fe52a948e..7161035d75a 100644
--- a/test/lisp/emacs-lisp/cl-print-tests.el
+++ b/test/lisp/emacs-lisp/cl-print-tests.el
@@ -1,6 +1,6 @@
 ;;; cl-print-tests.el --- Test suite for the cl-print facility.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/cl-seq-tests.el 
b/test/lisp/emacs-lisp/cl-seq-tests.el
index f42ae69873f..adb74f0a6d5 100644
--- a/test/lisp/emacs-lisp/cl-seq-tests.el
+++ b/test/lisp/emacs-lisp/cl-seq-tests.el
@@ -1,6 +1,6 @@
 ;;; cl-seq-tests.el --- Tests for cl-seq.el functionality  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Richard <youngfrog@members.fsf.org>
 
diff --git a/test/lisp/emacs-lisp/comp-cstr-tests.el 
b/test/lisp/emacs-lisp/comp-cstr-tests.el
index ba7ab6331ef..aeb620326b0 100644
--- a/test/lisp/emacs-lisp/comp-cstr-tests.el
+++ b/test/lisp/emacs-lisp/comp-cstr-tests.el
@@ -1,6 +1,6 @@
 ;;; comp-cstr-tests.el --- unit tests for src/comp.c -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Andrea Corallo <akrl@sdf.org>
 
diff --git a/test/lisp/emacs-lisp/comp-tests.el 
b/test/lisp/emacs-lisp/comp-tests.el
index 418c7296948..79345ac9a4e 100644
--- a/test/lisp/emacs-lisp/comp-tests.el
+++ b/test/lisp/emacs-lisp/comp-tests.el
@@ -1,6 +1,6 @@
 ;;; comp-tests.el --- Tests for comp.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/copyright-tests.el 
b/test/lisp/emacs-lisp/copyright-tests.el
index b00d697aa64..5f8b5c67896 100644
--- a/test/lisp/emacs-lisp/copyright-tests.el
+++ b/test/lisp/emacs-lisp/copyright-tests.el
@@ -1,6 +1,6 @@
 ;;; copyright-tests.el --- tests for copyright.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -59,7 +59,8 @@
                 "\nCopyright 2006, 2007, 2008 Foo Bar\n\n")
         (copyright-update)
         (buffer-substring (- (point-max) 42) (point-max))))
-    "Copyright 2006, 2007, 2008, 2022 Foo Bar\n\n")))
+    (format "Copyright 2006, 2007, 2008, %s Foo Bar\n\n"
+            (format-time-string "%Y")))))
 
 (ert-deftest test-correct-notice ()
   (should (equal
@@ -70,7 +71,8 @@
                    (copyright-query nil))
                (copyright-update))
              (buffer-string))
-           "Copyright 2021 FSF\nCopyright 2021, 2022 FSF\n")))
+           (format "Copyright 2021 FSF\nCopyright 2021, %s FSF\n"
+                   (format-time-string "%Y")))))
 
 (defmacro with-copyright-fix-years-test (orig result)
   `(let ((copyright-year-ranges t))
diff --git a/test/lisp/emacs-lisp/derived-tests.el 
b/test/lisp/emacs-lisp/derived-tests.el
index 547b16843d4..ca462c935f5 100644
--- a/test/lisp/emacs-lisp/derived-tests.el
+++ b/test/lisp/emacs-lisp/derived-tests.el
@@ -1,6 +1,6 @@
 ;;; derived-tests.el --- tests for derived.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/easy-mmode-tests.el 
b/test/lisp/emacs-lisp/easy-mmode-tests.el
index f6d07196727..6d65c22f5f2 100644
--- a/test/lisp/emacs-lisp/easy-mmode-tests.el
+++ b/test/lisp/emacs-lisp/easy-mmode-tests.el
@@ -1,6 +1,6 @@
 ;;; easy-mmode-tests.el --- tests for easy-mmode.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el 
b/test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el
index 42d06889ea7..b0211c915e6 100644
--- a/test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el
+++ b/test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el
@@ -1,6 +1,6 @@
 ;;; edebug-test-code.el --- Sample code for the Edebug test suite  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Gemini Lasswell
 
diff --git a/test/lisp/emacs-lisp/edebug-tests.el 
b/test/lisp/emacs-lisp/edebug-tests.el
index dea6e9ed611..de2fff5ef19 100644
--- a/test/lisp/emacs-lisp/edebug-tests.el
+++ b/test/lisp/emacs-lisp/edebug-tests.el
@@ -1,6 +1,6 @@
 ;;; edebug-tests.el --- Edebug test suite   -*- lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Gemini Lasswell
 
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 05d24a8e35d..bb19a579e83 100644
--- a/test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el
+++ b/test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el
@@ -1,6 +1,6 @@
 ;;; eieio-test-methodinvoke.el --- eieio tests for method invocation  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2005, 2008, 2010, 2013-2022 Free Software Foundation,
+;; Copyright (C) 2005, 2008, 2010, 2013-2023 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el 
b/test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el
index e839e1262fa..4feaebed452 100644
--- a/test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el
+++ b/test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el
@@ -1,6 +1,6 @@
 ;;; eieio-test-persist.el --- Tests for eieio-persistent class  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el 
b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
index 9b27d4ab938..c9993341f98 100644
--- a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
+++ b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
@@ -1,6 +1,6 @@
 ;;; eieio-tests.el --- eieio test routines -*- lexical-binding: t -*-
 
-;; Copyright (C) 1999-2003, 2005-2010, 2012-2022 Free Software
+;; Copyright (C) 1999-2003, 2005-2010, 2012-2023 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/test/lisp/emacs-lisp/ert-tests.el 
b/test/lisp/emacs-lisp/ert-tests.el
index 84c28e11315..3e499fc6f59 100644
--- a/test/lisp/emacs-lisp/ert-tests.el
+++ b/test/lisp/emacs-lisp/ert-tests.el
@@ -1,6 +1,6 @@
 ;;; ert-tests.el --- ERT's self-tests  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2008, 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2008, 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Christian Ohler <ohler@gnu.org>
 
diff --git a/test/lisp/emacs-lisp/ert-x-tests.el 
b/test/lisp/emacs-lisp/ert-x-tests.el
index 63e7cd7608f..6be2ca18ff1 100644
--- a/test/lisp/emacs-lisp/ert-x-tests.el
+++ b/test/lisp/emacs-lisp/ert-x-tests.el
@@ -1,6 +1,6 @@
 ;;; ert-x-tests.el --- Tests for ert-x.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2008, 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008, 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Phil Hagelberg
 ;;        Christian Ohler <ohler@gnu.org>
@@ -82,6 +82,40 @@
         (should-not (buffer-live-p buffer-1))
         (should (buffer-live-p buffer-2))))))
 
+(ert-deftest ert-test-with-buffer-selected/current ()
+  (let ((origbuf (current-buffer)))
+    (ert-with-test-buffer ()
+      (let ((buf (current-buffer)))
+        (should (not (eq buf origbuf)))
+        (with-current-buffer origbuf
+          (ert-with-buffer-selected buf
+            (should (eq (current-buffer) buf))))))))
+
+(ert-deftest ert-test-with-buffer-selected/selected ()
+  (ert-with-test-buffer ()
+    (ert-with-buffer-selected (current-buffer)
+      (should (eq (window-buffer) (current-buffer))))))
+
+(ert-deftest ert-test-with-buffer-selected/nil-buffer ()
+  (ert-with-test-buffer ()
+    (let ((buf (current-buffer)))
+      (ert-with-buffer-selected nil
+        (should (eq (window-buffer) buf))))))
+
+(ert-deftest ert-test-with-buffer-selected/modification-hooks ()
+  (ert-with-test-buffer ()
+    (ert-with-buffer-selected (current-buffer)
+      (should (null inhibit-modification-hooks)))))
+
+(ert-deftest ert-test-with-buffer-selected/read-only ()
+  (ert-with-test-buffer ()
+    (ert-with-buffer-selected (current-buffer)
+      (should (null inhibit-read-only))
+      (should (null buffer-read-only)))))
+
+(ert-deftest ert-test-with-buffer-selected/return-value ()
+  (should (equal (ert-with-buffer-selected nil "foo") "foo")))
+
 (ert-deftest ert-test-with-test-buffer-selected/selected ()
   (ert-with-test-buffer-selected ()
     (should (eq (window-buffer) (current-buffer)))))
@@ -90,6 +124,11 @@
   (ert-with-test-buffer-selected ()
     (should (null inhibit-modification-hooks))))
 
+(ert-deftest ert-test-with-test-buffer-selected/read-only ()
+  (ert-with-test-buffer-selected ()
+    (should (null inhibit-read-only))
+    (should (null buffer-read-only))))
+
 (ert-deftest ert-test-with-test-buffer-selected/return-value ()
   (should (equal (ert-with-test-buffer-selected () "foo") "foo")))
 
diff --git a/test/lisp/emacs-lisp/faceup-resources/faceup-test-mode.el 
b/test/lisp/emacs-lisp/faceup-resources/faceup-test-mode.el
index 9b9c863aa0b..4988babcfbd 100644
--- a/test/lisp/emacs-lisp/faceup-resources/faceup-test-mode.el
+++ b/test/lisp/emacs-lisp/faceup-resources/faceup-test-mode.el
@@ -1,6 +1,6 @@
 ;;; faceup-test-mode.el --- Dummy major mode for testing `faceup'.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Anders Lindgren
 ;; Keywords: languages, faces
diff --git 
a/test/lisp/emacs-lisp/faceup-resources/faceup-test-this-file-directory.el 
b/test/lisp/emacs-lisp/faceup-resources/faceup-test-this-file-directory.el
index 137b43a5dfd..9d677f48872 100644
--- a/test/lisp/emacs-lisp/faceup-resources/faceup-test-this-file-directory.el
+++ b/test/lisp/emacs-lisp/faceup-resources/faceup-test-this-file-directory.el
@@ -1,6 +1,6 @@
 ;;; faceup-test-this-file-directory.el --- Support file for faceup tests  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Anders Lindgren
 ;; Keywords: languages, faces
diff --git a/test/lisp/emacs-lisp/faceup-tests/faceup-test-basics.el 
b/test/lisp/emacs-lisp/faceup-tests/faceup-test-basics.el
index b9fcb4e8863..c162354aa36 100644
--- a/test/lisp/emacs-lisp/faceup-tests/faceup-test-basics.el
+++ b/test/lisp/emacs-lisp/faceup-tests/faceup-test-basics.el
@@ -1,6 +1,6 @@
 ;;; faceup-test-basics.el --- Tests for the `faceup' package.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Anders Lindgren
 ;; Keywords: languages, faces
diff --git a/test/lisp/emacs-lisp/faceup-tests/faceup-test-files.el 
b/test/lisp/emacs-lisp/faceup-tests/faceup-test-files.el
index f07b8d830b9..99d3223f311 100644
--- a/test/lisp/emacs-lisp/faceup-tests/faceup-test-files.el
+++ b/test/lisp/emacs-lisp/faceup-tests/faceup-test-files.el
@@ -1,6 +1,6 @@
 ;;; faceup-test-files.el --- Self test of `faceup' using dummy major mode.  
-*- lexical-binding:t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Anders Lindgren
 ;; Keywords: languages, faces
diff --git a/test/lisp/emacs-lisp/find-func-tests.el 
b/test/lisp/emacs-lisp/find-func-tests.el
index 8c432f87200..7251b76157b 100644
--- a/test/lisp/emacs-lisp/find-func-tests.el
+++ b/test/lisp/emacs-lisp/find-func-tests.el
@@ -1,6 +1,6 @@
 ;;; find-func-tests.el --- Unit tests for find-func.el  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
diff --git a/test/lisp/emacs-lisp/float-sup-tests.el 
b/test/lisp/emacs-lisp/float-sup-tests.el
index f4353d9e855..f0e192d1e76 100644
--- a/test/lisp/emacs-lisp/float-sup-tests.el
+++ b/test/lisp/emacs-lisp/float-sup-tests.el
@@ -1,6 +1,6 @@
 ;;; float-sup-tests.el --- Tests for float-sup.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/generator-tests.el 
b/test/lisp/emacs-lisp/generator-tests.el
index b7a21d49b2f..fa4df77b9b7 100644
--- a/test/lisp/emacs-lisp/generator-tests.el
+++ b/test/lisp/emacs-lisp/generator-tests.el
@@ -1,6 +1,6 @@
 ;;; generator-tests.el --- Testing generators -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Daniel Colascione <dancol@dancol.org>
 ;; Keywords:
diff --git a/test/lisp/emacs-lisp/gv-tests.el b/test/lisp/emacs-lisp/gv-tests.el
index 69a7bcf7dd4..f57b2c69fe4 100644
--- a/test/lisp/emacs-lisp/gv-tests.el
+++ b/test/lisp/emacs-lisp/gv-tests.el
@@ -1,6 +1,6 @@
 ;;; gv-tests.el --- tests for gv.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/icons-tests.el 
b/test/lisp/emacs-lisp/icons-tests.el
index e6e71a8e4fd..fdfbd1ff7cb 100644
--- a/test/lisp/emacs-lisp/icons-tests.el
+++ b/test/lisp/emacs-lisp/icons-tests.el
@@ -1,6 +1,6 @@
 ;;; icons-tests.el --- Tests for icons.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/let-alist-tests.el 
b/test/lisp/emacs-lisp/let-alist-tests.el
index c4e4feaad30..cf4cba50367 100644
--- a/test/lisp/emacs-lisp/let-alist-tests.el
+++ b/test/lisp/emacs-lisp/let-alist-tests.el
@@ -1,6 +1,6 @@
 ;;; let-alist.el --- tests for file handling. -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/lisp-mnt-tests.el 
b/test/lisp/emacs-lisp/lisp-mnt-tests.el
index a4bf834a8e4..c056761f0f9 100644
--- a/test/lisp/emacs-lisp/lisp-mnt-tests.el
+++ b/test/lisp/emacs-lisp/lisp-mnt-tests.el
@@ -1,6 +1,6 @@
 ;;; lisp-mnt-tests.el --- Tests for lisp-mnt  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 
diff --git a/test/lisp/emacs-lisp/lisp-mode-tests.el 
b/test/lisp/emacs-lisp/lisp-mode-tests.el
index 996ea201fb0..3e906497020 100644
--- a/test/lisp/emacs-lisp/lisp-mode-tests.el
+++ b/test/lisp/emacs-lisp/lisp-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; lisp-mode-tests.el --- Test Lisp editing commands  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/lisp-tests.el 
b/test/lisp/emacs-lisp/lisp-tests.el
index 901447ecd27..2e5e2a740b1 100644
--- a/test/lisp/emacs-lisp/lisp-tests.el
+++ b/test/lisp/emacs-lisp/lisp-tests.el
@@ -1,6 +1,6 @@
 ;;; lisp-tests.el --- Test Lisp editing commands     -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Aaron S. Hawley <aaron.s.hawley@gmail.com>
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
diff --git a/test/lisp/emacs-lisp/macroexp-resources/m1.el 
b/test/lisp/emacs-lisp/macroexp-resources/m1.el
index 88c51e75261..5b35f60ad3d 100644
--- a/test/lisp/emacs-lisp/macroexp-resources/m1.el
+++ b/test/lisp/emacs-lisp/macroexp-resources/m1.el
@@ -1,6 +1,6 @@
 ;;; m1.el --- Some sample code for macroexp-tests    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
diff --git a/test/lisp/emacs-lisp/macroexp-resources/m2.el 
b/test/lisp/emacs-lisp/macroexp-resources/m2.el
index cebe4cac125..fb11b56c378 100644
--- a/test/lisp/emacs-lisp/macroexp-resources/m2.el
+++ b/test/lisp/emacs-lisp/macroexp-resources/m2.el
@@ -1,6 +1,6 @@
 ;;; m2.el --- More sample code for macroexp-tests    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
diff --git a/test/lisp/emacs-lisp/macroexp-resources/vk.el 
b/test/lisp/emacs-lisp/macroexp-resources/vk.el
index d9ca33671ef..c892b279923 100644
--- a/test/lisp/emacs-lisp/macroexp-resources/vk.el
+++ b/test/lisp/emacs-lisp/macroexp-resources/vk.el
@@ -1,6 +1,6 @@
 ;;; vk.el --- test code for macroexp-tests    -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/macroexp-tests.el 
b/test/lisp/emacs-lisp/macroexp-tests.el
index 4e6bd8b8fcd..7bb38fe58f7 100644
--- a/test/lisp/emacs-lisp/macroexp-tests.el
+++ b/test/lisp/emacs-lisp/macroexp-tests.el
@@ -1,6 +1,6 @@
 ;;; macroexp-tests.el --- Tests for macroexp.el      -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
diff --git a/test/lisp/emacs-lisp/map-tests.el 
b/test/lisp/emacs-lisp/map-tests.el
index 75ebe594313..86c0e9e0503 100644
--- a/test/lisp/emacs-lisp/map-tests.el
+++ b/test/lisp/emacs-lisp/map-tests.el
@@ -1,6 +1,6 @@
 ;;; map-tests.el --- Tests for map.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Petton <nicolas@petton.fr>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/test/lisp/emacs-lisp/memory-report-tests.el 
b/test/lisp/emacs-lisp/memory-report-tests.el
index 869144163b7..1bca74ca7c4 100644
--- a/test/lisp/emacs-lisp/memory-report-tests.el
+++ b/test/lisp/emacs-lisp/memory-report-tests.el
@@ -1,6 +1,6 @@
 ;;; memory-report-tests.el --- tests for memory-report.el -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/multisession-tests.el 
b/test/lisp/emacs-lisp/multisession-tests.el
index 5807c27bd20..639a8ab5219 100644
--- a/test/lisp/emacs-lisp/multisession-tests.el
+++ b/test/lisp/emacs-lisp/multisession-tests.el
@@ -1,6 +1,6 @@
 ;;; multisession-tests.el --- Tests for multisession.el  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -94,7 +94,7 @@
                                   (dotimes (i 100)
                                     (cl-incf (multisession-value 
multisession--bar))))))))
             (while (process-live-p proc)
-              (ignore-error 'sqlite-locked-error
+              (ignore-error sqlite-locked-error
                 (message "multisession--bar %s" (multisession-value 
multisession--bar))
                 ;;(cl-incf (multisession-value multisession--bar))
                 )
diff --git a/test/lisp/emacs-lisp/nadvice-tests.el 
b/test/lisp/emacs-lisp/nadvice-tests.el
index a675986b90b..748d42f2120 100644
--- a/test/lisp/emacs-lisp/nadvice-tests.el
+++ b/test/lisp/emacs-lisp/nadvice-tests.el
@@ -1,6 +1,6 @@
 ;;; nadvice-tests.el --- Test suite for the new advice thingy.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/oclosure-tests.el 
b/test/lisp/emacs-lisp/oclosure-tests.el
index 00b008845c0..a7f2d1017a9 100644
--- a/test/lisp/emacs-lisp/oclosure-tests.el
+++ b/test/lisp/emacs-lisp/oclosure-tests.el
@@ -1,6 +1,6 @@
 ;;; oclosure-tests.e; --- Tests for Open Closures  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022  Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/package-resources/signed/update-signatures.sh 
b/test/lisp/emacs-lisp/package-resources/signed/update-signatures.sh
index ddd96748ec1..3f3e2fc70d2 100755
--- a/test/lisp/emacs-lisp/package-resources/signed/update-signatures.sh
+++ b/test/lisp/emacs-lisp/package-resources/signed/update-signatures.sh
@@ -2,7 +2,7 @@
 
 # Generate a new key and update the signatures for tests.
 
-# Copyright (C) 2020-2022 Free Software Foundation, Inc.
+# Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/package-tests.el 
b/test/lisp/emacs-lisp/package-tests.el
index ffe4d7cd5fd..0016fb586b7 100644
--- a/test/lisp/emacs-lisp/package-tests.el
+++ b/test/lisp/emacs-lisp/package-tests.el
@@ -1,6 +1,6 @@
 ;;; package-tests.el --- Tests for the Emacs package system  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Daniel Hackney <dan@haxney.org>
 ;; Version: 1.0
diff --git a/test/lisp/emacs-lisp/pcase-tests.el 
b/test/lisp/emacs-lisp/pcase-tests.el
index 80607990808..799e8d36647 100644
--- a/test/lisp/emacs-lisp/pcase-tests.el
+++ b/test/lisp/emacs-lisp/pcase-tests.el
@@ -1,6 +1,6 @@
 ;;; pcase-tests.el --- Test suite for pcase macro.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/pp-tests.el b/test/lisp/emacs-lisp/pp-tests.el
index 01ac572c537..72c7cb880d2 100644
--- a/test/lisp/emacs-lisp/pp-tests.el
+++ b/test/lisp/emacs-lisp/pp-tests.el
@@ -1,6 +1,6 @@
 ;;; pp-tests.el --- Test suite for pretty printer.  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/range-tests.el 
b/test/lisp/emacs-lisp/range-tests.el
index 660110aa1fb..c35a95a4c1e 100644
--- a/test/lisp/emacs-lisp/range-tests.el
+++ b/test/lisp/emacs-lisp/range-tests.el
@@ -1,6 +1,6 @@
 ;;; range-tests.el --- Tests for range.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022  Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/regexp-opt-tests.el 
b/test/lisp/emacs-lisp/regexp-opt-tests.el
index 46ed7c29b28..1eefd7b210c 100644
--- a/test/lisp/emacs-lisp/regexp-opt-tests.el
+++ b/test/lisp/emacs-lisp/regexp-opt-tests.el
@@ -1,6 +1,6 @@
 ;;; regexp-opt-tests.el --- Tests for regexp-opt.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:       internal
diff --git a/test/lisp/emacs-lisp/ring-tests.el 
b/test/lisp/emacs-lisp/ring-tests.el
index 6bbcd94f201..f8f2cfc37de 100644
--- a/test/lisp/emacs-lisp/ring-tests.el
+++ b/test/lisp/emacs-lisp/ring-tests.el
@@ -1,6 +1,6 @@
 ;;; ring-tests.el --- Tests for ring.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/emacs-lisp/rmc-tests.el 
b/test/lisp/emacs-lisp/rmc-tests.el
index 385b0fe44a5..bf0ff59151d 100644
--- a/test/lisp/emacs-lisp/rmc-tests.el
+++ b/test/lisp/emacs-lisp/rmc-tests.el
@@ -1,6 +1,6 @@
 ;;; rmc-tests.el --- Test suite for rmc.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Tino Calancha <tino.calancha@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el
index 01772e54d8a..028250b7352 100644
--- a/test/lisp/emacs-lisp/rx-tests.el
+++ b/test/lisp/emacs-lisp/rx-tests.el
@@ -1,6 +1,6 @@
 ;;; rx-tests.el --- tests for rx.el              -*- lexical-binding: t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/seq-tests.el 
b/test/lisp/emacs-lisp/seq-tests.el
index e22f86f0447..71ff991c215 100644
--- a/test/lisp/emacs-lisp/seq-tests.el
+++ b/test/lisp/emacs-lisp/seq-tests.el
@@ -1,6 +1,6 @@
 ;;; seq-tests.el --- Tests for seq.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Petton <nicolas@petton.fr>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/test/lisp/emacs-lisp/shadow-tests.el 
b/test/lisp/emacs-lisp/shadow-tests.el
index a91c4efd048..d3b18aa5987 100644
--- a/test/lisp/emacs-lisp/shadow-tests.el
+++ b/test/lisp/emacs-lisp/shadow-tests.el
@@ -1,6 +1,6 @@
 ;;; shadow-tests.el --- Test suite for shadow.  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/shortdoc-tests.el 
b/test/lisp/emacs-lisp/shortdoc-tests.el
index 8515b9fdfb9..516d095767f 100644
--- a/test/lisp/emacs-lisp/shortdoc-tests.el
+++ b/test/lisp/emacs-lisp/shortdoc-tests.el
@@ -1,6 +1,6 @@
 ;;; shortdoc-tests.el --- tests for shortdoc.el   -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -21,6 +21,8 @@
 
 (require 'ert)
 (require 'shortdoc)
+(require 'subr-x) ; `string-pad' in shortdoc group needed at run time
+(require 'regexp-opt)    ; `regexp-opt-charset' not autoloaded
 
 (defun shortdoc-tests--tree-contains (tree fun)
   "Whether TREE contains a call to FUN."
@@ -44,6 +46,14 @@
                 (should (shortdoc-tests--tree-contains expr fun))))
             (setq props (cddr props))))))))
 
+(ert-deftest shortdoc-all-functions-fboundp ()
+  "Check that all functions listed in shortdoc groups are `fboundp'."
+  (dolist (group shortdoc--groups)
+    (dolist (item group)
+      (when (consp item)
+        (let ((fun (car item)))
+          (should (fboundp fun)))))))
+
 (ert-deftest shortdoc-all-groups-work ()
   "Test that all defined shortdoc groups display correctly."
   (dolist (group (mapcar (lambda (x) (car x)) shortdoc--groups))
diff --git a/test/lisp/emacs-lisp/subr-x-tests.el 
b/test/lisp/emacs-lisp/subr-x-tests.el
index e80d2e17e8d..e4c270a114f 100644
--- a/test/lisp/emacs-lisp/subr-x-tests.el
+++ b/test/lisp/emacs-lisp/subr-x-tests.el
@@ -1,6 +1,6 @@
 ;;; subr-x-tests.el --- Testing the extended lisp routines  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Fabián E. Gallina <fgallina@gnu.org>
 ;; Keywords:
diff --git a/test/lisp/emacs-lisp/syntax-tests.el 
b/test/lisp/emacs-lisp/syntax-tests.el
index d8fc5c4fa82..6cdbca984ac 100644
--- a/test/lisp/emacs-lisp/syntax-tests.el
+++ b/test/lisp/emacs-lisp/syntax-tests.el
@@ -1,6 +1,6 @@
 ;;; syntax-tests.el --- tests for syntax.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/tabulated-list-tests.el 
b/test/lisp/emacs-lisp/tabulated-list-tests.el
index 3ce4a63f4f0..115a7e735a2 100644
--- a/test/lisp/emacs-lisp/tabulated-list-tests.el
+++ b/test/lisp/emacs-lisp/tabulated-list-tests.el
@@ -1,6 +1,6 @@
 ;;; tabulated-list-tests.el --- Tests for emacs-lisp/tabulated-list.el  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
 
diff --git a/test/lisp/emacs-lisp/testcover-resources/testcases.el 
b/test/lisp/emacs-lisp/testcover-resources/testcases.el
index 46040be1a6c..48c73648259 100644
--- a/test/lisp/emacs-lisp/testcover-resources/testcases.el
+++ b/test/lisp/emacs-lisp/testcover-resources/testcases.el
@@ -1,6 +1,6 @@
 ;;;; testcases.el -- Test cases for testcover-tests.el
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Gemini Lasswell
 
diff --git a/test/lisp/emacs-lisp/testcover-tests.el 
b/test/lisp/emacs-lisp/testcover-tests.el
index 39cd3175c26..989dd40b646 100644
--- a/test/lisp/emacs-lisp/testcover-tests.el
+++ b/test/lisp/emacs-lisp/testcover-tests.el
@@ -1,6 +1,6 @@
 ;;; testcover-tests.el --- Testcover test suite   -*- lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Gemini Lasswell
 
diff --git a/test/lisp/emacs-lisp/text-property-search-tests.el 
b/test/lisp/emacs-lisp/text-property-search-tests.el
index 98fdd55e85f..2c701c2c8e4 100644
--- a/test/lisp/emacs-lisp/text-property-search-tests.el
+++ b/test/lisp/emacs-lisp/text-property-search-tests.el
@@ -1,6 +1,6 @@
 ;;; text-property-search-tests.el --- Testing text-property-search  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 ;; Keywords:
diff --git a/test/lisp/emacs-lisp/thunk-tests.el 
b/test/lisp/emacs-lisp/thunk-tests.el
index f593737fd22..5ae0e2a3d7d 100644
--- a/test/lisp/emacs-lisp/thunk-tests.el
+++ b/test/lisp/emacs-lisp/thunk-tests.el
@@ -1,6 +1,6 @@
 ;;; thunk-tests.el --- Tests for thunk.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Petton <nicolas@petton.fr>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/test/lisp/emacs-lisp/timer-tests.el 
b/test/lisp/emacs-lisp/timer-tests.el
index 4d974cfd9d7..7652b324493 100644
--- a/test/lisp/emacs-lisp/timer-tests.el
+++ b/test/lisp/emacs-lisp/timer-tests.el
@@ -1,6 +1,6 @@
 ;;; timer-tests.el --- tests for timers -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/unsafep-tests.el 
b/test/lisp/emacs-lisp/unsafep-tests.el
index fdd82b4fc3d..368eee796ea 100644
--- a/test/lisp/emacs-lisp/unsafep-tests.el
+++ b/test/lisp/emacs-lisp/unsafep-tests.el
@@ -2,7 +2,7 @@
 
 ;; Author: Jonathan Yavner <jyavner@member.fsf.org>
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/vtable-tests.el 
b/test/lisp/emacs-lisp/vtable-tests.el
index 627d9f9c5df..2da1bbaabb1 100644
--- a/test/lisp/emacs-lisp/vtable-tests.el
+++ b/test/lisp/emacs-lisp/vtable-tests.el
@@ -1,6 +1,6 @@
 ;;; vtable-tests.el --- Tests for vtable.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/warnings-tests.el 
b/test/lisp/emacs-lisp/warnings-tests.el
index 3b12092505d..22520d0e84f 100644
--- a/test/lisp/emacs-lisp/warnings-tests.el
+++ b/test/lisp/emacs-lisp/warnings-tests.el
@@ -2,7 +2,7 @@
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emulation/viper-tests.el 
b/test/lisp/emulation/viper-tests.el
index 1d2bf46b199..a0b1a823909 100644
--- a/test/lisp/emulation/viper-tests.el
+++ b/test/lisp/emulation/viper-tests.el
@@ -1,6 +1,6 @@
 ;;; viper-tests.el --- tests for viper.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/env-tests.el b/test/lisp/env-tests.el
index fd3d3cb2734..579f73b1b21 100644
--- a/test/lisp/env-tests.el
+++ b/test/lisp/env-tests.el
@@ -1,6 +1,6 @@
 ;;; env-tests.el --- Tests for env.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/epg-config-tests.el b/test/lisp/epg-config-tests.el
index ac065909c45..51d2052c27d 100644
--- a/test/lisp/epg-config-tests.el
+++ b/test/lisp/epg-config-tests.el
@@ -1,6 +1,6 @@
 ;;; epg-config-tests.el --- Test suite for epg.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/epg-tests.el b/test/lisp/epg-tests.el
index dca6f337647..3659a922fe3 100644
--- a/test/lisp/epg-tests.el
+++ b/test/lisp/epg-tests.el
@@ -1,6 +1,6 @@
 ;;; epg-tests.el --- Test suite for epg.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-dcc-tests.el b/test/lisp/erc/erc-dcc-tests.el
index 74cbb7d9476..bd8a9fc7951 100644
--- a/test/lisp/erc/erc-dcc-tests.el
+++ b/test/lisp/erc/erc-dcc-tests.el
@@ -1,6 +1,6 @@
 ;;; erc-dcc-tests.el --- Tests for erc-dcc  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 ;;
diff --git a/test/lisp/erc/erc-join-tests.el b/test/lisp/erc/erc-join-tests.el
index 89521ba4292..e293c9976a1 100644
--- a/test/lisp/erc/erc-join-tests.el
+++ b/test/lisp/erc/erc-join-tests.el
@@ -1,6 +1,6 @@
 ;;; erc-join-tests.el --- Tests for erc-join.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 ;;
diff --git a/test/lisp/erc/erc-match-tests.el b/test/lisp/erc/erc-match-tests.el
index cd7598703b5..748ccd02ddf 100644
--- a/test/lisp/erc/erc-match-tests.el
+++ b/test/lisp/erc/erc-match-tests.el
@@ -1,6 +1,6 @@
 ;;; erc-match-tests.el --- Tests for erc-match.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-networks-tests.el 
b/test/lisp/erc/erc-networks-tests.el
index 0a8b5935df0..96836c29aed 100644
--- a/test/lisp/erc/erc-networks-tests.el
+++ b/test/lisp/erc/erc-networks-tests.el
@@ -1,6 +1,6 @@
 ;;; erc-networks-tests.el --- Tests for erc-networks.  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 ;;
diff --git a/test/lisp/erc/erc-sasl-tests.el b/test/lisp/erc/erc-sasl-tests.el
index 0e5ea60e5f0..767a8f56f54 100644
--- a/test/lisp/erc/erc-sasl-tests.el
+++ b/test/lisp/erc/erc-sasl-tests.el
@@ -1,6 +1,6 @@
 ;;; erc-sasl-tests.el --- Tests for erc-sasl.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 ;;
 ;; This file is part of GNU Emacs.
 ;;
diff --git a/test/lisp/erc/erc-scenarios-auth-source.el 
b/test/lisp/erc/erc-scenarios-auth-source.el
index 20cae9fbcb8..641b881666e 100644
--- a/test/lisp/erc/erc-scenarios-auth-source.el
+++ b/test/lisp/erc/erc-scenarios-auth-source.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-auth-source.el --- auth-source scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-association-nick.el 
b/test/lisp/erc/erc-scenarios-base-association-nick.el
index 7eac9c900a7..5f90f0d2bcd 100644
--- a/test/lisp/erc/erc-scenarios-base-association-nick.el
+++ b/test/lisp/erc/erc-scenarios-base-association-nick.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-association-nick.el --- base assoc scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-association-query.el 
b/test/lisp/erc/erc-scenarios-base-association-query.el
index 78b75a530c0..e9472617918 100644
--- a/test/lisp/erc/erc-scenarios-base-association-query.el
+++ b/test/lisp/erc/erc-scenarios-base-association-query.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-association-query.el --- assoc query scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-association-samenet.el 
b/test/lisp/erc/erc-scenarios-base-association-samenet.el
index a843159824a..c64a3f6725b 100644
--- a/test/lisp/erc/erc-scenarios-base-association-samenet.el
+++ b/test/lisp/erc/erc-scenarios-base-association-samenet.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-association-samenet.el --- assoc samenet scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-association.el 
b/test/lisp/erc/erc-scenarios-base-association.el
index a03714aa795..1e280d0fdd7 100644
--- a/test/lisp/erc/erc-scenarios-base-association.el
+++ b/test/lisp/erc/erc-scenarios-base-association.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-association.el --- base assoc scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-compat-rename-bouncer.el 
b/test/lisp/erc/erc-scenarios-base-compat-rename-bouncer.el
index 81cbaca5583..74d4444ccd2 100644
--- a/test/lisp/erc/erc-scenarios-base-compat-rename-bouncer.el
+++ b/test/lisp/erc/erc-scenarios-base-compat-rename-bouncer.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-compat-rename-bouncer.el --- compat-rename scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-local-modules.el 
b/test/lisp/erc/erc-scenarios-base-local-modules.el
index ff92dacb75a..d4001df45de 100644
--- a/test/lisp/erc/erc-scenarios-base-local-modules.el
+++ b/test/lisp/erc/erc-scenarios-base-local-modules.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-local-modules.el --- Local modules tests for ERC -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-misc-regressions.el 
b/test/lisp/erc/erc-scenarios-base-misc-regressions.el
index 1cad934b6ef..16b2cb355d1 100644
--- a/test/lisp/erc/erc-scenarios-base-misc-regressions.el
+++ b/test/lisp/erc/erc-scenarios-base-misc-regressions.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-misc-regressions.el --- misc regressions scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-netid-bouncer-id.el 
b/test/lisp/erc/erc-scenarios-base-netid-bouncer-id.el
index 6540d44c4b9..876f2e3cade 100644
--- a/test/lisp/erc/erc-scenarios-base-netid-bouncer-id.el
+++ b/test/lisp/erc/erc-scenarios-base-netid-bouncer-id.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-netid-bouncer-id.el --- net-id bouncer ID scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-base.el 
b/test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-base.el
index 135d378c7fc..d3d07493e9e 100644
--- a/test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-base.el
+++ b/test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-base.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-netid-bouncer-recon-base.el --- net-id base scenarios 
-*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-both.el 
b/test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-both.el
index 2f58c3269e3..b76633f3e3e 100644
--- a/test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-both.el
+++ b/test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-both.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-netid-bouncer-recon-both.el --- net-id both scenarios 
-*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 ;;
 ;; This file is part of GNU Emacs.
 ;;
diff --git a/test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-id.el 
b/test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-id.el
index fb58be9615e..66d3c25f7da 100644
--- a/test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-id.el
+++ b/test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-id.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-netid-bouncer-recon-id.el --- recon ID scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-netid-bouncer.el 
b/test/lisp/erc/erc-scenarios-base-netid-bouncer.el
index 432a89b9977..a658a17601b 100644
--- a/test/lisp/erc/erc-scenarios-base-netid-bouncer.el
+++ b/test/lisp/erc/erc-scenarios-base-netid-bouncer.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-netid-bouncer.el --- net-id bouncer scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-netid-samenet.el 
b/test/lisp/erc/erc-scenarios-base-netid-samenet.el
index 14367122510..7304dead44c 100644
--- a/test/lisp/erc/erc-scenarios-base-netid-samenet.el
+++ b/test/lisp/erc/erc-scenarios-base-netid-samenet.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-network-id-samenet.el --- netid-id samenet scenarios 
-*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-reconnect.el 
b/test/lisp/erc/erc-scenarios-base-reconnect.el
index 2a3dac12518..5b4dc549042 100644
--- a/test/lisp/erc/erc-scenarios-base-reconnect.el
+++ b/test/lisp/erc/erc-scenarios-base-reconnect.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-reconnect.el --- Base-reconnect scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-renick.el 
b/test/lisp/erc/erc-scenarios-base-renick.el
index 69ecc0a7da5..f1723200533 100644
--- a/test/lisp/erc/erc-scenarios-base-renick.el
+++ b/test/lisp/erc/erc-scenarios-base-renick.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-renick.el --- Re-nicking scenarios -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-reuse-buffers.el 
b/test/lisp/erc/erc-scenarios-base-reuse-buffers.el
index a8575aa55ae..d23a0b35904 100644
--- a/test/lisp/erc/erc-scenarios-base-reuse-buffers.el
+++ b/test/lisp/erc/erc-scenarios-base-reuse-buffers.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-reuse-buffers.el --- base-reuse-buffers scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-unstable.el 
b/test/lisp/erc/erc-scenarios-base-unstable.el
index f5b8df6f4a1..2ccf8880b95 100644
--- a/test/lisp/erc/erc-scenarios-base-unstable.el
+++ b/test/lisp/erc/erc-scenarios-base-unstable.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-base-unstable.el --- base unstable scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -24,7 +24,7 @@
   (let ((load-path (cons (ert-resource-directory) load-path)))
     (require 'erc-scenarios-common)))
 
-(eval-when-compile (require 'erc-join))
+(eval-when-compile (require 'erc-join) (require 'warnings))
 
 ;; Not unstable, but stashed here for now
 
@@ -132,4 +132,56 @@
               (not (setq failed (zerop (cl-decf tries)))))))
     (should-not failed)))
 
+;; The `erc-networks' library has slowly become a hard dependency of
+;; the interactive client since its incorporation in 2006.  But its
+;; module, which was added in ERC 5.3 (2008) and thereafter loaded by
+;; default, only became quasi-required in ERC 5.5 (2022).  Despite
+;; this, a basic connection should still always succeed, at least long
+;; enough to warn users that their setup is abnormal.  Of course,
+;; third-party code intentionally omitting the module will have to
+;; override various erc-server-*-functions to avoid operating in a
+;; degraded state, which has likely been the case for a while.
+
+(ert-deftest erc-scenarios-networks-no-module ()
+  :tags '(:expensive-test)
+  (erc-scenarios-common-with-cleanup
+      ((erc-scenarios-common-dialog "networks/no-module")
+       (erc-server-flood-penalty 0.1)
+       (erc-networks-mode-orig erc-networks-mode)
+       (dumb-server (erc-d-run "localhost" t 'basic))
+       (port (process-contact dumb-server :service))
+       (erc-modules (remq 'networks erc-modules))
+       (warning-suppress-log-types '((erc)))
+       (expect (erc-d-t-make-expecter)))
+
+    (erc-networks-mode -1)
+    (ert-info ("Connect and retain dialed name")
+      (with-current-buffer (erc :server "127.0.0.1"
+                                :port port
+                                :nick "tester"
+                                :user "tester"
+                                :full-name "tester")
+        (funcall expect 10 "Required module `networks' not loaded")
+        (funcall expect 10 "This server is in debug mode")
+        ;; Buffer not named after network
+        (should (string= (buffer-name) (format "127.0.0.1:%d" port)))
+        (erc-cmd-JOIN "#chan")))
+
+    (ert-info ("Join #chan, change nick, query op")
+      (with-current-buffer (erc-d-t-wait-for 10 (get-buffer "#chan"))
+        (funcall expect 20 "Even at thy teat thou")
+        (erc-cmd-NICK "dummy")
+        (funcall expect 10 "Your new nickname is dummy")
+        (erc-scenarios-common-say "/msg alice hi")))
+
+    (ert-info ("Switch to query and quit")
+      (with-current-buffer (erc-d-t-wait-for 10 (get-buffer "alice"))
+        (funcall expect 20 "bye"))
+
+      (with-current-buffer (format "127.0.0.1:%d" port)
+        (erc-cmd-QUIT "")
+        (funcall expect 10 "finished")))
+    (when erc-networks-mode-orig
+      (erc-networks-mode +1))))
+
 ;;; erc-scenarios-base-unstable.el ends here
diff --git a/test/lisp/erc/erc-scenarios-base-upstream-recon-soju.el 
b/test/lisp/erc/erc-scenarios-base-upstream-recon-soju.el
index 0e6f4b7a6ba..28b0db77be6 100644
--- a/test/lisp/erc/erc-scenarios-base-upstream-recon-soju.el
+++ b/test/lisp/erc/erc-scenarios-base-upstream-recon-soju.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-upstream-recon-soju.el --- Upstream soju -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-base-upstream-recon-znc.el 
b/test/lisp/erc/erc-scenarios-base-upstream-recon-znc.el
index 76cf9f4f76c..79e1349bd95 100644
--- a/test/lisp/erc/erc-scenarios-base-upstream-recon-znc.el
+++ b/test/lisp/erc/erc-scenarios-base-upstream-recon-znc.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-upstream-recon-znc.el --- Upstream znc -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-internal.el 
b/test/lisp/erc/erc-scenarios-internal.el
index e122443c590..8d38c2dde49 100644
--- a/test/lisp/erc/erc-scenarios-internal.el
+++ b/test/lisp/erc/erc-scenarios-internal.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-internal.el --- Proxy file for erc-d tests -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-join-auth-source.el 
b/test/lisp/erc/erc-scenarios-join-auth-source.el
index ef200fb6d09..6ed5bc2db37 100644
--- a/test/lisp/erc/erc-scenarios-join-auth-source.el
+++ b/test/lisp/erc/erc-scenarios-join-auth-source.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-join-auth-source.el --- join-auth-source scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-join-netid-newcmd-id.el 
b/test/lisp/erc/erc-scenarios-join-netid-newcmd-id.el
index 4c25c3e4f86..812ac1c3b56 100644
--- a/test/lisp/erc/erc-scenarios-join-netid-newcmd-id.el
+++ b/test/lisp/erc/erc-scenarios-join-netid-newcmd-id.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-join-netid-newcmd-id.el --- join netid newcmd scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-join-netid-newcmd.el 
b/test/lisp/erc/erc-scenarios-join-netid-newcmd.el
index e54f5fe9ced..c8e9d66906e 100644
--- a/test/lisp/erc/erc-scenarios-join-netid-newcmd.el
+++ b/test/lisp/erc/erc-scenarios-join-netid-newcmd.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-join-netid-newcmd.el --- join netid newcmd scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-join-netid-recon-id.el 
b/test/lisp/erc/erc-scenarios-join-netid-recon-id.el
index 9a9e4692b6a..0e0fc9132b8 100644
--- a/test/lisp/erc/erc-scenarios-join-netid-recon-id.el
+++ b/test/lisp/erc/erc-scenarios-join-netid-recon-id.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-join-netid-recon-id.el --- join-netid-recon scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-join-netid-recon.el 
b/test/lisp/erc/erc-scenarios-join-netid-recon.el
index 9f9244dad22..0f76617faa5 100644
--- a/test/lisp/erc/erc-scenarios-join-netid-recon.el
+++ b/test/lisp/erc/erc-scenarios-join-netid-recon.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-join-netid-recon.el --- join-netid-recon scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-misc.el 
b/test/lisp/erc/erc-scenarios-misc.el
index f1696088a48..5927eee48fd 100644
--- a/test/lisp/erc/erc-scenarios-misc.el
+++ b/test/lisp/erc/erc-scenarios-misc.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-misc.el --- Misc scenarios for ERC -*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-sasl.el 
b/test/lisp/erc/erc-scenarios-sasl.el
index 1e412d53d5e..3878237c7d2 100644
--- a/test/lisp/erc/erc-scenarios-sasl.el
+++ b/test/lisp/erc/erc-scenarios-sasl.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-sasl.el --- SASL tests for ERC -*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-scenarios-services-misc.el 
b/test/lisp/erc/erc-scenarios-services-misc.el
index 44e04e51509..a1679d302f4 100644
--- a/test/lisp/erc/erc-scenarios-services-misc.el
+++ b/test/lisp/erc/erc-scenarios-services-misc.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-services-misc.el --- Services-misc scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/erc-services-tests.el 
b/test/lisp/erc/erc-services-tests.el
index 2547c5e01a8..b1d36d868eb 100644
--- a/test/lisp/erc/erc-services-tests.el
+++ b/test/lisp/erc/erc-services-tests.el
@@ -1,6 +1,6 @@
 ;;; erc-services-tests.el --- Tests for erc-services.  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 ;;
diff --git a/test/lisp/erc/erc-tests.el b/test/lisp/erc/erc-tests.el
index 578b2641a6d..85506c3d27e 100644
--- a/test/lisp/erc/erc-tests.el
+++ b/test/lisp/erc/erc-tests.el
@@ -1,6 +1,6 @@
 ;;; erc-tests.el --- Tests for erc.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 
@@ -1001,11 +1001,11 @@
 
 (ert-deftest erc-select-read-args ()
 
-  (ert-info ("Defaults to TLS")
+  (ert-info ("Does not default to TLS")
     (should (equal (ert-simulate-keys "\r\r\r\r"
                      (erc-select-read-args))
                    (list :server "irc.libera.chat"
-                         :port 6697
+                         :port 6667
                          :nick (user-login-name)
                          :password nil))))
 
@@ -1036,7 +1036,7 @@
                          :password nil))))
 
   (ert-info ("Address includes nick and password")
-    (should (equal (ert-simulate-keys "nick:sesame@localhost:6667\r"
+    (should (equal (ert-simulate-keys "nick:sesame@localhost:6667\r\r"
                      (erc-select-read-args))
                    (list :server "localhost"
                          :port 6667
diff --git a/test/lisp/erc/erc-track-tests.el b/test/lisp/erc/erc-track-tests.el
index 475a436bb1d..ab8d708b721 100644
--- a/test/lisp/erc/erc-track-tests.el
+++ b/test/lisp/erc/erc-track-tests.el
@@ -1,6 +1,6 @@
 ;;; erc-track-tests.el --- Tests for erc-track.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Author: Vivek Dasmohapatra <vivek@etla.org>
diff --git a/test/lisp/erc/resources/erc-d/erc-d-i.el 
b/test/lisp/erc/resources/erc-d/erc-d-i.el
index 15a0b16bfd1..05302e4f0be 100644
--- a/test/lisp/erc/resources/erc-d/erc-d-i.el
+++ b/test/lisp/erc/resources/erc-d/erc-d-i.el
@@ -1,6 +1,6 @@
 ;;; erc-d-i.el --- IRC helpers for ERC test server -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/resources/erc-d/erc-d-t.el 
b/test/lisp/erc/resources/erc-d/erc-d-t.el
index 6d68608a4f3..282c193b707 100644
--- a/test/lisp/erc/resources/erc-d/erc-d-t.el
+++ b/test/lisp/erc/resources/erc-d/erc-d-t.el
@@ -1,6 +1,6 @@
 ;;; erc-d-t.el --- ERT helpers for ERC test server -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/resources/erc-d/erc-d-tests.el 
b/test/lisp/erc/resources/erc-d/erc-d-tests.el
index feddc4c062b..a501cd55494 100644
--- a/test/lisp/erc/resources/erc-d/erc-d-tests.el
+++ b/test/lisp/erc/resources/erc-d/erc-d-tests.el
@@ -1,6 +1,6 @@
 ;;; erc-d-tests.el --- tests for erc-d -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/resources/erc-d/erc-d-u.el 
b/test/lisp/erc/resources/erc-d/erc-d-u.el
index 60181cdc8bd..e26fa8b47dd 100644
--- a/test/lisp/erc/resources/erc-d/erc-d-u.el
+++ b/test/lisp/erc/resources/erc-d/erc-d-u.el
@@ -1,6 +1,6 @@
 ;;; erc-d-u.el --- Helpers for ERC test server -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/resources/erc-d/erc-d.el 
b/test/lisp/erc/resources/erc-d/erc-d.el
index f8704834b9f..f4491bbb834 100644
--- a/test/lisp/erc/resources/erc-d/erc-d.el
+++ b/test/lisp/erc/resources/erc-d/erc-d.el
@@ -1,6 +1,6 @@
 ;;; erc-d.el --- A dumb test server for ERC -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/resources/erc-d/resources/proxy-subprocess.el 
b/test/lisp/erc/resources/erc-d/resources/proxy-subprocess.el
index f675f675018..541c222dc21 100644
--- a/test/lisp/erc/resources/erc-d/resources/proxy-subprocess.el
+++ b/test/lisp/erc/resources/erc-d/resources/proxy-subprocess.el
@@ -1,6 +1,6 @@
 ;;; proxy-subprocess.el --- Example setup file for erc-d  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/resources/erc-scenarios-common.el 
b/test/lisp/erc/resources/erc-scenarios-common.el
index 57d4658e75a..0d9a79ae9ce 100644
--- a/test/lisp/erc/resources/erc-scenarios-common.el
+++ b/test/lisp/erc/resources/erc-scenarios-common.el
@@ -1,6 +1,6 @@
 ;;; erc-scenarios-common.el --- Common helpers for ERC scenarios -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/erc/resources/networks/no-module/basic.eld 
b/test/lisp/erc/resources/networks/no-module/basic.eld
new file mode 100644
index 00000000000..f1bdbd1219f
--- /dev/null
+++ b/test/lisp/erc/resources/networks/no-module/basic.eld
@@ -0,0 +1,44 @@
+;; -*- mode: lisp-data; -*-
+((nick 10 "NICK tester"))
+((user 1 "USER tester 0 * :tester")
+ (0.00 ":irc.foonet.org 001 tester :Welcome to the foonet IRC Network tester")
+ (0.00 ":irc.foonet.org 002 tester :Your host is irc.foonet.org, running 
version ergo-v2.8.0")
+ (0.00 ":irc.foonet.org 003 tester :This server was created Mon, 12 Dec 2022 
01:25:38 UTC")
+ (0.00 ":irc.foonet.org 004 tester irc.foonet.org ergo-v2.8.0 BERTZios 
CEIMRUabefhiklmnoqstuv Iabefhkloqv")
+ (0.00 ":irc.foonet.org 005 tester AWAYLEN=390 BOT=B CASEMAPPING=ascii 
CHANLIMIT=#:100 CHANMODES=Ibe,k,fl,CEMRUimnstu CHANNELLEN=64 CHANTYPES=# 
ELIST=U EXCEPTS EXTBAN=,m FORWARD=f INVEX KICKLEN=390 :are supported by this 
server")
+ (0.00 ":irc.foonet.org 005 tester MAXLIST=beI:60 MAXTARGETS=4 MODES 
MONITOR=100 NETWORK=foonet NICKLEN=32 PREFIX=(qaohv)~&@%+ STATUSMSG=~&@%+ 
TARGMAX=NAMES:1,LIST:1,KICK:,WHOIS:1,USERHOST:10,PRIVMSG:4,TAGMSG:4,NOTICE:4,MONITOR:100
 TOPICLEN=390 UTF8MAPPING=rfc8265 UTF8ONLY WHOX :are supported by this server")
+ (0.01 ":irc.foonet.org 005 tester draft/CHATHISTORY=100 :are supported by 
this server")
+ (0.00 ":irc.foonet.org 251 tester :There are 0 users and 4 invisible on 1 
server(s)")
+ (0.00 ":irc.foonet.org 252 tester 0 :IRC Operators online")
+ (0.00 ":irc.foonet.org 253 tester 0 :unregistered connections")
+ (0.00 ":irc.foonet.org 254 tester 1 :channels formed")
+ (0.00 ":irc.foonet.org 255 tester :I have 4 clients and 0 servers")
+ (0.00 ":irc.foonet.org 265 tester 4 4 :Current local users 4, max 4")
+ (0.01 ":irc.foonet.org 266 tester 4 4 :Current global users 4, max 4")
+ (0.00 ":irc.foonet.org 422 tester :MOTD File is missing"))
+
+((mode 10 "MODE tester +i")
+ (0.00 ":irc.foonet.org 221 tester +i")
+ (0.00 ":irc.foonet.org NOTICE tester :This server is in debug mode and is 
logging all user I/O. If you do not wish for everything you send to be readable 
by the server owner(s), please disconnect."))
+
+((join 10 "JOIN #chan")
+ (0.03 ":tester!~u@z5d6jyn8pwxge.irc JOIN #chan"))
+
+((~nick 10 "NICK dummy")
+ (0.01 ":tester!~u@z5d6jyn8pwxge.irc NICK dummy"))
+
+((mode-1 10 "MODE #chan")
+ (0.01 ":irc.foonet.org 353 tester = #chan :@alice bob foonet tester")
+ (0.00 ":irc.foonet.org 366 tester #chan :End of NAMES list")
+ (0.03 ":irc.foonet.org 324 tester #chan +nt")
+ (0.00 ":irc.foonet.org 329 tester #chan 1670808354")
+ (0.00 ":bob!~u@d6ftaiqzk8x2k.irc PRIVMSG #chan :tester, welcome!")
+ (0.00 ":alice!~u@d6ftaiqzk8x2k.irc PRIVMSG #chan :tester, welcome!")
+ (0.03 ":bob!~u@d6ftaiqzk8x2k.irc PRIVMSG #chan :alice: Forbear it therefore; 
give your cause to heaven.")
+ (0.01 ":alice!~u@d6ftaiqzk8x2k.irc PRIVMSG #chan :bob: Even at thy teat thou 
hadst thy tyranny."))
+
+((privmsg 10 "PRIVMSG alice :hi")
+ (0.00 ":alice!~u@d6ftaiqzk8x2k.irc PRIVMSG dummy :bye"))
+
+((quit 10 "QUIT :\2ERC\2")
+ (0.03 ":dummy!~u@z5d6jyn8pwxge.irc QUIT :Quit: \2ERC\2"))
diff --git a/test/lisp/eshell/em-alias-tests.el 
b/test/lisp/eshell/em-alias-tests.el
index 0a26e8d2011..ec1704545a4 100644
--- a/test/lisp/eshell/em-alias-tests.el
+++ b/test/lisp/eshell/em-alias-tests.el
@@ -1,6 +1,6 @@
 ;;; em-alias-tests.el --- em-alias test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/eshell/em-basic-tests.el 
b/test/lisp/eshell/em-basic-tests.el
index bc8baeaa035..6ac7226ffa0 100644
--- a/test/lisp/eshell/em-basic-tests.el
+++ b/test/lisp/eshell/em-basic-tests.el
@@ -1,6 +1,6 @@
 ;;; em-basic-tests.el --- em-basic test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/eshell/em-dirs-tests.el 
b/test/lisp/eshell/em-dirs-tests.el
index f72d708dcae..d30b3d7d73f 100644
--- a/test/lisp/eshell/em-dirs-tests.el
+++ b/test/lisp/eshell/em-dirs-tests.el
@@ -1,6 +1,6 @@
 ;;; em-dirs-tests.el --- em-dirs test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/eshell/em-extpipe-tests.el 
b/test/lisp/eshell/em-extpipe-tests.el
index 04e78279427..1184b5df5f8 100644
--- a/test/lisp/eshell/em-extpipe-tests.el
+++ b/test/lisp/eshell/em-extpipe-tests.el
@@ -1,6 +1,6 @@
 ;;; em-extpipe-tests.el --- em-extpipe test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Sean Whitton <spwhitton@spwhitton.name>
 
@@ -42,7 +42,7 @@
                    (shell-command-switch "-c"))
                ;; Strip `eshell-trap-errors'.
                (should (equal ,expected
-                              (cadr (eshell-parse-command input))))))
+                              (cadadr (eshell-parse-command input))))))
           (with-substitute-for-temp (&rest body)
             ;; Substitute name of an actual temporary file and/or
             ;; buffer into `input'.  The substitution logic is
diff --git a/test/lisp/eshell/em-glob-tests.el 
b/test/lisp/eshell/em-glob-tests.el
index b733be35d9a..c33af88a374 100644
--- a/test/lisp/eshell/em-glob-tests.el
+++ b/test/lisp/eshell/em-glob-tests.el
@@ -1,6 +1,6 @@
 ;;; em-glob-tests.el --- em-glob test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/eshell/em-hist-tests.el 
b/test/lisp/eshell/em-hist-tests.el
index 634e9819839..35ae6bdc239 100644
--- a/test/lisp/eshell/em-hist-tests.el
+++ b/test/lisp/eshell/em-hist-tests.el
@@ -1,6 +1,6 @@
 ;;; em-hist-tests.el --- em-hist test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/eshell/em-ls-tests.el b/test/lisp/eshell/em-ls-tests.el
index 272280e81c7..862a6dfd9f8 100644
--- a/test/lisp/eshell/em-ls-tests.el
+++ b/test/lisp/eshell/em-ls-tests.el
@@ -1,6 +1,6 @@
 ;;; em-ls-tests.el --- em-ls test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Tino Calancha <tino.calancha@gmail.com>
 
diff --git a/test/lisp/eshell/em-pred-tests.el 
b/test/lisp/eshell/em-pred-tests.el
index 0d6351ec826..adc4ac01eb1 100644
--- a/test/lisp/eshell/em-pred-tests.el
+++ b/test/lisp/eshell/em-pred-tests.el
@@ -1,6 +1,6 @@
 ;;; em-pred-tests.el --- em-pred test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/eshell/em-script-tests.el 
b/test/lisp/eshell/em-script-tests.el
index b837d464ccd..74328844778 100644
--- a/test/lisp/eshell/em-script-tests.el
+++ b/test/lisp/eshell/em-script-tests.el
@@ -1,6 +1,6 @@
 ;;; em-script-tests.el --- em-script test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -35,21 +35,43 @@
 ;;; Tests:
 
 (ert-deftest em-script-test/source-script ()
-  "Test sourcing script with no argumentss"
+  "Test sourcing a simple script."
   (ert-with-temp-file temp-file :text "echo hi"
     (with-temp-eshell
      (eshell-match-command-output (format "source %s" temp-file)
                                   "hi\n"))))
 
-(ert-deftest em-script-test/source-script-arg-vars ()
-  "Test sourcing script with $0, $1, ... variables"
+(ert-deftest em-script-test/source-script/redirect ()
+  "Test sourcing a script and redirecting its output."
+  (ert-with-temp-file temp-file
+    :text "echo hi\necho bye"
+    (eshell-with-temp-buffer bufname "old"
+      (with-temp-eshell
+       (eshell-match-command-output
+        (format "source %s > #<%s>" temp-file bufname)
+        "\\`\\'"))
+      (should (equal (buffer-string) "hibye")))))
+
+(ert-deftest em-script-test/source-script/redirect/dev-null ()
+  "Test sourcing a script and redirecting its output, including to /dev/null."
+  (ert-with-temp-file temp-file
+    :text "echo hi\necho bad > /dev/null\necho bye"
+    (eshell-with-temp-buffer bufname "old"
+      (with-temp-eshell
+       (eshell-match-command-output
+        (format "source %s > #<%s>" temp-file bufname)
+        "\\`\\'"))
+      (should (equal (buffer-string) "hibye")))))
+
+(ert-deftest em-script-test/source-script/arg-vars ()
+  "Test sourcing script with $0, $1, ... variables."
   (ert-with-temp-file temp-file :text "printnl $0 \"$1 $2\""
     (with-temp-eshell
      (eshell-match-command-output (format "source %s one two" temp-file)
                                   (format "%s\none two\n" temp-file)))))
 
-(ert-deftest em-script-test/source-script-all-args-var ()
-  "Test sourcing script with the $* variable"
+(ert-deftest em-script-test/source-script/all-args-var ()
+  "Test sourcing script with the $* variable."
   (ert-with-temp-file temp-file :text "printnl $*"
     (with-temp-eshell
      (eshell-match-command-output (format "source %s" temp-file)
diff --git a/test/lisp/eshell/em-tramp-tests.el 
b/test/lisp/eshell/em-tramp-tests.el
index 6cc35ecdb1b..a3bda970b63 100644
--- a/test/lisp/eshell/em-tramp-tests.el
+++ b/test/lisp/eshell/em-tramp-tests.el
@@ -1,6 +1,6 @@
 ;;; em-tramp-tests.el --- em-tramp test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -23,37 +23,41 @@
 (require 'em-tramp)
 (require 'tramp)
 
+(defmacro em-tramp-test/should-replace-command (form replacement)
+  "Check that calling FORM results in it being replaced with REPLACEMENT."
+  (declare (indent 1))
+  `(should (equal
+            (catch 'eshell-replace-command ,form)
+            (list 'eshell-with-copied-handles
+                  (list 'eshell-trap-errors
+                        ,replacement)
+                  t))))
+
 (ert-deftest em-tramp-test/su-default ()
   "Test Eshell `su' command with no arguments."
-  (should (equal
-           (catch 'eshell-replace-command (eshell/su))
-           `(eshell-trap-errors
-             (eshell-named-command
-              "cd"
-              (list ,(format "/su:root@%s:%s"
-                             tramp-default-host default-directory)))))))
+  (em-tramp-test/should-replace-command (eshell/su)
+    `(eshell-named-command
+      "cd"
+      (list ,(format "/su:root@%s:%s"
+                     tramp-default-host default-directory)))))
 
 (ert-deftest em-tramp-test/su-user ()
   "Test Eshell `su' command with USER argument."
-  (should (equal
-           (catch 'eshell-replace-command (eshell/su "USER"))
-           `(eshell-trap-errors
-             (eshell-named-command
-              "cd"
-              (list ,(format "/su:USER@%s:%s"
-                             tramp-default-host default-directory)))))))
+  (em-tramp-test/should-replace-command (eshell/su "USER")
+    `(eshell-named-command
+      "cd"
+      (list ,(format "/su:USER@%s:%s"
+                     tramp-default-host default-directory)))))
 
 (ert-deftest em-tramp-test/su-login ()
   "Test Eshell `su' command with -/-l/--login option."
   (dolist (args '(("--login")
                   ("-l")
                   ("-")))
-    (should (equal
-             (catch 'eshell-replace-command (apply #'eshell/su args))
-             `(eshell-trap-errors
-               (eshell-named-command
-                "cd"
-                (list ,(format "/su:root@%s:~/" tramp-default-host))))))))
+    (em-tramp-test/should-replace-command (apply #'eshell/su args)
+      `(eshell-named-command
+        "cd"
+        (list ,(format "/su:root@%s:~/" tramp-default-host))))))
 
 (defun mock-eshell-named-command (&rest args)
   "Dummy function to test Eshell `sudo' command rewriting."
@@ -89,23 +93,19 @@
   "Test Eshell `sudo' command with -s/--shell option."
   (dolist (args '(("--shell")
                   ("-s")))
-    (should (equal
-             (catch 'eshell-replace-command (apply #'eshell/sudo args))
-             `(eshell-trap-errors
-               (eshell-named-command
-                "cd"
-                (list ,(format "/sudo:root@%s:%s"
-                               tramp-default-host default-directory))))))))
+    (em-tramp-test/should-replace-command (apply #'eshell/sudo args)
+      `(eshell-named-command
+        "cd"
+        (list ,(format "/sudo:root@%s:%s"
+                       tramp-default-host default-directory))))))
 
 (ert-deftest em-tramp-test/sudo-user-shell ()
   "Test Eshell `sudo' command with -s and -u options."
-  (should (equal
-           (catch 'eshell-replace-command (eshell/sudo "-u" "USER" "-s"))
-           `(eshell-trap-errors
-             (eshell-named-command
-              "cd"
-              (list ,(format "/sudo:USER@%s:%s"
-                             tramp-default-host default-directory)))))))
+  (em-tramp-test/should-replace-command (eshell/sudo "-u" "USER" "-s")
+    `(eshell-named-command
+      "cd"
+      (list ,(format "/sudo:USER@%s:%s"
+                     tramp-default-host default-directory)))))
 
 (ert-deftest em-tramp-test/doas-basic ()
   "Test Eshell `doas' command with default user."
@@ -142,22 +142,18 @@
   "Test Eshell `doas' command with -s/--shell option."
   (dolist (args '(("--shell")
                   ("-s")))
-    (should (equal
-             (catch 'eshell-replace-command (apply #'eshell/doas args))
-             `(eshell-trap-errors
-               (eshell-named-command
-                "cd"
-                (list ,(format "/doas:root@%s:%s"
-                               tramp-default-host default-directory))))))))
+    (em-tramp-test/should-replace-command (apply #'eshell/doas args)
+      `(eshell-named-command
+        "cd"
+        (list ,(format "/doas:root@%s:%s"
+                       tramp-default-host default-directory))))))
 
 (ert-deftest em-tramp-test/doas-user-shell ()
   "Test Eshell `doas' command with -s and -u options."
-  (should (equal
-           (catch 'eshell-replace-command (eshell/doas "-u" "USER" "-s"))
-           `(eshell-trap-errors
-             (eshell-named-command
-              "cd"
-              (list ,(format "/doas:USER@%s:%s"
-                             tramp-default-host default-directory)))))))
+  (em-tramp-test/should-replace-command (eshell/doas "-u" "USER" "-s")
+    `(eshell-named-command
+      "cd"
+      (list ,(format "/doas:USER@%s:%s"
+                     tramp-default-host default-directory)))))
 
 ;;; em-tramp-tests.el ends here
diff --git a/test/lisp/eshell/esh-arg-tests.el 
b/test/lisp/eshell/esh-arg-tests.el
index 77f9404d4c7..918ad3a949f 100644
--- a/test/lisp/eshell/esh-arg-tests.el
+++ b/test/lisp/eshell/esh-arg-tests.el
@@ -1,6 +1,6 @@
 ;;; esh-arg-tests.el --- esh-arg test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/eshell/esh-cmd-tests.el 
b/test/lisp/eshell/esh-cmd-tests.el
index 92d785d7fdf..bcecc9a531f 100644
--- a/test/lisp/eshell/esh-cmd-tests.el
+++ b/test/lisp/eshell/esh-cmd-tests.el
@@ -1,6 +1,6 @@
 ;;; esh-cmd-tests.el --- esh-cmd test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -148,14 +148,21 @@ e.g. \"{(+ 1 2)} 3\" => 3"
       "echo $name; for name in 3 { echo $name }; echo $name"
       "env-value\n3\nenv-value\n"))))
 
+(ert-deftest esh-cmd-test/for-loop-pipe ()
+  "Test invocation of a for loop piped to another command."
+  (skip-unless (executable-find "rev"))
+  (with-temp-eshell
+   (eshell-match-command-output "for i in foo bar baz { echo $i } | rev"
+                                "zabraboof")))
+
 (ert-deftest esh-cmd-test/while-loop ()
   "Test invocation of a while loop."
   (with-temp-eshell
    (let ((eshell-test-value '(0 1 2)))
      (eshell-match-command-output
       (concat "while $eshell-test-value "
-              "{ setq eshell-test-value (cdr eshell-test-value) }")
-      "(1 2)\n(2)\n"))))
+              "{ (pop eshell-test-value) }")
+      "0\n1\n2\n"))))
 
 (ert-deftest esh-cmd-test/while-loop-lisp-form ()
   "Test invocation of a while loop using a Lisp form."
@@ -176,6 +183,17 @@ e.g. \"{(+ 1 2)} 3\" => 3"
               "{ setq eshell-test-value (1+ eshell-test-value) }")
       "1\n2\n3\n"))))
 
+(ert-deftest esh-cmd-test/while-loop-pipe ()
+  "Test invocation of a while loop piped to another command."
+  (skip-unless (executable-find "rev"))
+  (with-temp-eshell
+   (let ((eshell-test-value '("foo" "bar" "baz")))
+     (eshell-match-command-output
+      (concat "while $eshell-test-value "
+              "{ (pop eshell-test-value) }"
+              " | rev")
+      "zabraboof"))))
+
 (ert-deftest esh-cmd-test/until-loop ()
   "Test invocation of an until loop."
   (with-temp-eshell
@@ -253,6 +271,30 @@ This tests when `eshell-lisp-form-nil-is-failure' is nil."
   (eshell-command-result-equal "if {[ foo = bar ]} {echo yes} {echo no}"
                                "no"))
 
+(ert-deftest esh-cmd-test/if-statement-pipe ()
+  "Test invocation of an if statement piped to another command."
+  (skip-unless (executable-find "rev"))
+  (with-temp-eshell
+   (let ((eshell-test-value t))
+     (eshell-match-command-output "if $eshell-test-value {echo yes} | rev"
+                                  "\\`sey\n?"))
+   (let ((eshell-test-value nil))
+     (eshell-match-command-output "if $eshell-test-value {echo yes} | rev"
+                                  "\\`\n?"))))
+
+(ert-deftest esh-cmd-test/if-else-statement-pipe ()
+  "Test invocation of an if/else statement piped to another command."
+  (skip-unless (executable-find "rev"))
+  (with-temp-eshell
+   (let ((eshell-test-value t))
+     (eshell-match-command-output
+      "if $eshell-test-value {echo yes} {echo no} | rev"
+      "\\`sey\n?"))
+   (let ((eshell-test-value nil))
+     (eshell-match-command-output
+      "if $eshell-test-value {echo yes} {echo no} | rev"
+      "\\`on\n?"))))
+
 (ert-deftest esh-cmd-test/unless-statement ()
   "Test invocation of an unless statement."
   (let ((eshell-test-value t))
diff --git a/test/lisp/eshell/esh-ext-tests.el 
b/test/lisp/eshell/esh-ext-tests.el
index 54191e9409e..ef073d3487d 100644
--- a/test/lisp/eshell/esh-ext-tests.el
+++ b/test/lisp/eshell/esh-ext-tests.el
@@ -1,6 +1,6 @@
 ;;; esh-ext-tests.el --- esh-ext test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/eshell/esh-io-tests.el b/test/lisp/eshell/esh-io-tests.el
index 37b234eaf06..ed350a9691c 100644
--- a/test/lisp/eshell/esh-io-tests.el
+++ b/test/lisp/eshell/esh-io-tests.el
@@ -1,6 +1,6 @@
 ;;; esh-io-tests.el --- esh-io test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -146,6 +146,45 @@
      (should (equal (buffer-string) "new"))
      (should (equal eshell-test-value "new")))))
 
+(ert-deftest esh-io-test/redirect-subcommands ()
+  "Check that redirecting subcommands applies to all subcommands."
+  (eshell-with-temp-buffer bufname "old"
+    (with-temp-eshell
+     (eshell-insert-command (format "{echo foo; echo bar} > #<%s>" bufname)))
+    (should (equal (buffer-string) "foobar"))))
+
+(ert-deftest esh-io-test/redirect-subcommands/override ()
+  "Check that redirecting subcommands applies to all subcommands.
+Include a redirect to another location in the subcommand to
+ensure only its statement is redirected."
+  (eshell-with-temp-buffer bufname "old"
+    (eshell-with-temp-buffer bufname-2 "also old"
+      (with-temp-eshell
+       (eshell-insert-command
+        (format "{echo foo; echo bar > #<%s>; echo baz} > #<%s>"
+                bufname-2 bufname)))
+      (should (equal (buffer-string) "bar")))
+    (should (equal (buffer-string) "foobaz"))))
+
+(ert-deftest esh-io-test/redirect-subcommands/dev-null ()
+  "Check that redirecting subcommands applies to all subcommands.
+Include a redirect to /dev/null to ensure it only applies to its
+statement."
+  (eshell-with-temp-buffer bufname "old"
+    (with-temp-eshell
+     (eshell-insert-command
+      (format "{echo foo; echo bar > /dev/null; echo baz} > #<%s>"
+              bufname)))
+    (should (equal (buffer-string) "foobaz"))))
+
+(ert-deftest esh-io-test/redirect-subcommands/interpolated ()
+  "Check that redirecting interpolated subcommands applies to all subcommands."
+  (eshell-with-temp-buffer bufname "old"
+    (with-temp-eshell
+     (eshell-insert-command
+      (format "echo ${echo foo; echo bar} > #<%s>" bufname)))
+    (should (equal (buffer-string) "foobar"))))
+
 
 ;; Redirecting specific handles
 
@@ -262,24 +301,56 @@ stdout originally pointed (the terminal)."
                                   "stderr\n"))
     (should (equal (buffer-string) "stdout\n"))))
 
-(ert-deftest esh-io-test/redirect-pipe ()
-  "Check that \"redirecting\" to a pipe works."
-  ;; `|' should only redirect stdout.
+
+;; Pipelines
+
+(ert-deftest esh-io-test/pipeline/default ()
+  "Check that `|' only pipes stdout."
+  (skip-unless (executable-find "rev"))
   (eshell-command-result-equal "test-output | rev"
-                               "stderr\ntuodts\n")
-  ;; `|&' should redirect stdout and stderr.
+                               "stderr\ntuodts\n"))
+
+
+(ert-deftest esh-io-test/pipeline/all ()
+  "Check that `|&' only pipes stdout and stderr."
+  (skip-unless (executable-find "rev"))
   (eshell-command-result-equal "test-output |& rev"
                                "tuodts\nrredts\n"))
 
+(ert-deftest esh-io-test/pipeline/subcommands ()
+  "Chek that all commands in a subcommand are properly piped."
+  (skip-unless (executable-find "rev"))
+  (with-temp-eshell
+   (eshell-match-command-output "{echo foo; echo bar} | rev"
+                                "\\`raboof\n?")))
+
 
 ;; Virtual targets
 
-(ert-deftest esh-io-test/virtual-dev-eshell ()
+(ert-deftest esh-io-test/virtual/dev-null ()
+  "Check that redirecting to /dev/null works."
+  (with-temp-eshell
+   (eshell-match-command-output "echo hi > /dev/null" "\\`\\'")))
+
+(ert-deftest esh-io-test/virtual/dev-null/multiple ()
+  "Check that redirecting to /dev/null works alongside other redirections."
+  (eshell-with-temp-buffer bufname "old"
+    (with-temp-eshell
+     (eshell-match-command-output
+      (format "echo new > /dev/null > #<%s>" bufname) "\\`\\'"))
+    (should (equal (buffer-string) "new")))
+  (eshell-with-temp-buffer bufname "old"
+    (with-temp-eshell
+     (eshell-match-command-output
+      (format "echo new > #<%s> > /dev/null" bufname) "\\`\\'"))
+    (should (equal (buffer-string) "new"))))
+
+(ert-deftest esh-io-test/virtual/dev-eshell ()
   "Check that redirecting to /dev/eshell works."
   (with-temp-eshell
    (eshell-match-command-output "echo hi > /dev/eshell" "hi")))
 
-(ert-deftest esh-io-test/virtual-dev-kill ()
+(ert-deftest esh-io-test/virtual/dev-kill ()
   "Check that redirecting to /dev/kill works."
   (with-temp-eshell
    (eshell-insert-command "echo one > /dev/kill")
diff --git a/test/lisp/eshell/esh-opt-tests.el 
b/test/lisp/eshell/esh-opt-tests.el
index 5b30de414a3..f4529ed4f22 100644
--- a/test/lisp/eshell/esh-opt-tests.el
+++ b/test/lisp/eshell/esh-opt-tests.el
@@ -1,6 +1,6 @@
 ;;; esh-opt-tests.el --- esh-opt test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/eshell/esh-proc-tests.el 
b/test/lisp/eshell/esh-proc-tests.el
index abe363bee0d..ae7b1dddd69 100644
--- a/test/lisp/eshell/esh-proc-tests.el
+++ b/test/lisp/eshell/esh-proc-tests.el
@@ -1,6 +1,6 @@
 ;;; esh-proc-tests.el --- esh-proc test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/eshell/esh-util-tests.el 
b/test/lisp/eshell/esh-util-tests.el
index 1cbd015999f..afaf1b77f2b 100644
--- a/test/lisp/eshell/esh-util-tests.el
+++ b/test/lisp/eshell/esh-util-tests.el
@@ -1,6 +1,6 @@
 ;;; esh-util-tests.el --- esh-util test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/eshell/esh-var-tests.el 
b/test/lisp/eshell/esh-var-tests.el
index d95669fdaf8..3f602798dbe 100644
--- a/test/lisp/eshell/esh-var-tests.el
+++ b/test/lisp/eshell/esh-var-tests.el
@@ -1,6 +1,6 @@
 ;;; esh-var-tests.el --- esh-var test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/eshell/eshell-tests-helpers.el 
b/test/lisp/eshell/eshell-tests-helpers.el
index 1d9674070c0..2c913d71cb4 100644
--- a/test/lisp/eshell/eshell-tests-helpers.el
+++ b/test/lisp/eshell/eshell-tests-helpers.el
@@ -1,6 +1,6 @@
 ;;; eshell-tests-helpers.el --- Eshell test suite helpers  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -33,9 +33,9 @@
 (defvar eshell-history-file-name nil)
 (defvar eshell-last-dir-ring-file-name nil)
 
-(defvar eshell-test--max-subprocess-time 5
-  "The maximum amount of time to wait for a subprocess to finish, in seconds.
-See `eshell-wait-for-subprocess'.")
+(defvar eshell-test--max-wait-time 5
+  "The maximum amount of time to wait for a condition to resolve, in seconds.
+See `eshell-wait-for'.")
 
 (defun eshell-tests-remote-accessible-p ()
   "Return if a test involving remote files can proceed.
@@ -73,19 +73,28 @@ BUFNAME will be set to the name of the temporary buffer."
      (let ((,bufname (buffer-name)))
        ,@body)))
 
+(defun eshell-wait-for (predicate &optional message)
+  "Wait until PREDICATE returns non-nil.
+If this takes longer than `eshell-test--max-wait-time', raise an
+error.  MESSAGE is an optional message to use if this times out."
+  (let ((start (current-time))
+        (message (or message "timed out waiting for condition")))
+    (while (not (funcall predicate))
+      (when (> (float-time (time-since start))
+               eshell-test--max-wait-time)
+        (error message))
+      (sit-for 0.1))))
+
 (defun eshell-wait-for-subprocess (&optional all)
   "Wait until there is no interactive subprocess running in Eshell.
 If ALL is non-nil, wait until there are no Eshell subprocesses at
 all running.
 
-If this takes longer than `eshell-test--max-subprocess-time',
+If this takes longer than `eshell-test--max-wait-time',
 raise an error."
-  (let ((start (current-time)))
-    (while (if all eshell-process-list (eshell-interactive-process-p))
-      (when (> (float-time (time-since start))
-               eshell-test--max-subprocess-time)
-        (error "timed out waiting for subprocess(es)"))
-      (sit-for 0.1))))
+  (eshell-wait-for
+   (lambda ()
+     (not (if all eshell-process-list (eshell-interactive-process-p))))))
 
 (defun eshell-insert-command (command &optional func)
   "Insert a COMMAND at the end of the buffer.
diff --git a/test/lisp/eshell/eshell-tests.el b/test/lisp/eshell/eshell-tests.el
index c67ac67fd36..be968e1558f 100644
--- a/test/lisp/eshell/eshell-tests.el
+++ b/test/lisp/eshell/eshell-tests.el
@@ -1,6 +1,6 @@
 ;;; eshell-tests.el --- Eshell test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2023 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -128,16 +128,17 @@
        (delete-region (point) (point-max))))))
 
 (ert-deftest eshell-test/queue-input ()
-  "Test queuing command input"
+  "Test queuing command input.
+This should let the current command finish, then automatically
+insert the queued one at the next prompt, and finally run it."
   (with-temp-eshell
-   (eshell-insert-command "sleep 2")
-   (eshell-insert-command "echo alpha" 'eshell-queue-input)
-   (let ((count 10))
-     (while (and eshell-current-command
-                 (> count 0))
-       (sit-for 1)
-       (setq count (1- count))))
-   (should (eshell-match-output "alpha\n"))))
+   (eshell-insert-command "sleep 1; echo slept")
+   (eshell-insert-command "echo alpha" #'eshell-queue-input)
+   (let ((start (marker-position (eshell-beginning-of-output))))
+     (eshell-wait-for (lambda () (not eshell-current-command)))
+     (should (string-match "^slept\n.*echo alpha\nalpha\n$"
+                           (buffer-substring-no-properties
+                            start (eshell-end-of-output)))))))
 
 (ert-deftest eshell-test/flush-output ()
   "Test flushing of previous output"
diff --git a/test/lisp/faces-resources/faces-test-dark-theme.el 
b/test/lisp/faces-resources/faces-test-dark-theme.el
index 37f793a16ef..c73a8823a09 100644
--- a/test/lisp/faces-resources/faces-test-dark-theme.el
+++ b/test/lisp/faces-resources/faces-test-dark-theme.el
@@ -1,6 +1,6 @@
 ;;; faces-test-dark-theme.el --- A dark theme from tests ;;; -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/faces-resources/faces-test-light-theme.el 
b/test/lisp/faces-resources/faces-test-light-theme.el
index f89ccf36c5a..acbc54d769b 100644
--- a/test/lisp/faces-resources/faces-test-light-theme.el
+++ b/test/lisp/faces-resources/faces-test-light-theme.el
@@ -1,6 +1,6 @@
 ;;; faces-test-light-theme.el --- A dark theme from tests ;;; -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/faces-tests.el b/test/lisp/faces-tests.el
index f28f9e6aed4..2c772a27f74 100644
--- a/test/lisp/faces-tests.el
+++ b/test/lisp/faces-tests.el
@@ -1,6 +1,6 @@
 ;;; faces-tests.el --- Tests for faces.el            -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/ffap-tests.el b/test/lisp/ffap-tests.el
index 076d8256421..a47e1900ae4 100644
--- a/test/lisp/ffap-tests.el
+++ b/test/lisp/ffap-tests.el
@@ -1,6 +1,6 @@
 ;;; ffap-tests.el --- Test suite for ffap.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Tino Calancha <tino.calancha@gmail.com>
 
diff --git a/test/lisp/filenotify-tests.el b/test/lisp/filenotify-tests.el
index 724cd63e222..bc094345ffe 100644
--- a/test/lisp/filenotify-tests.el
+++ b/test/lisp/filenotify-tests.el
@@ -1,6 +1,6 @@
 ;;; filenotify-tests.el --- Tests of file notifications  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
diff --git a/test/lisp/files-tests.el b/test/lisp/files-tests.el
index 011bfa67cc2..aadb60e1de7 100644
--- a/test/lisp/files-tests.el
+++ b/test/lisp/files-tests.el
@@ -1,6 +1,6 @@
 ;;; files-tests.el --- tests for files.el.  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/files-x-tests.el b/test/lisp/files-x-tests.el
index b1555a02664..f79118fd564 100644
--- a/test/lisp/files-x-tests.el
+++ b/test/lisp/files-x-tests.el
@@ -1,6 +1,6 @@
 ;;; files-x-tests.el --- tests for files-x.el.  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
diff --git a/test/lisp/find-cmd-tests.el b/test/lisp/find-cmd-tests.el
index 853ac9e27b4..a0b9a80ef47 100644
--- a/test/lisp/find-cmd-tests.el
+++ b/test/lisp/find-cmd-tests.el
@@ -1,6 +1,6 @@
 ;;; find-cmd-tests.el --- tests for find-cmd.el.  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/font-lock-tests.el b/test/lisp/font-lock-tests.el
index acdfc5a63da..a4cfc19a770 100644
--- a/test/lisp/font-lock-tests.el
+++ b/test/lisp/font-lock-tests.el
@@ -1,6 +1,6 @@
 ;;; font-lock-tests.el --- Test suite for font-lock. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/format-spec-tests.el b/test/lisp/format-spec-tests.el
index bd493ae1d71..31399f37250 100644
--- a/test/lisp/format-spec-tests.el
+++ b/test/lisp/format-spec-tests.el
@@ -1,6 +1,6 @@
 ;;; format-spec-tests.el --- tests for format-spec.el -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/gnus/gnus-group-tests.el 
b/test/lisp/gnus/gnus-group-tests.el
index 4ae5fea3eb7..e12f42711ea 100644
--- a/test/lisp/gnus/gnus-group-tests.el
+++ b/test/lisp/gnus/gnus-group-tests.el
@@ -1,6 +1,6 @@
 ;;; gnus-group-tests.el --- Tests for gnus-group.el  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/gnus/gnus-icalendar-tests.el 
b/test/lisp/gnus/gnus-icalendar-tests.el
index 348ddf9f056..8f89e8f00ab 100644
--- a/test/lisp/gnus/gnus-icalendar-tests.el
+++ b/test/lisp/gnus/gnus-icalendar-tests.el
@@ -1,6 +1,6 @@
 ;;; gnus-icalendar-tests.el --- tests                -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Jan Tatarik <jan.tatarik@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/gnus/gnus-search-tests.el 
b/test/lisp/gnus/gnus-search-tests.el
index 4a5def97d3c..dbbe5089817 100644
--- a/test/lisp/gnus/gnus-search-tests.el
+++ b/test/lisp/gnus/gnus-search-tests.el
@@ -1,6 +1,6 @@
 ;;; gnus-search-tests.el --- Tests for Gnus' search routines  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2017, 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017, 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Abrahamsen <eric@ericabrahamsen.net>
 ;; Keywords:
diff --git a/test/lisp/gnus/gnus-test-headers.el 
b/test/lisp/gnus/gnus-test-headers.el
index 730c10f9818..936665fd1f8 100644
--- a/test/lisp/gnus/gnus-test-headers.el
+++ b/test/lisp/gnus/gnus-test-headers.el
@@ -1,6 +1,6 @@
 ;;; gnus-test-headers.el --- Tests for Gnus header-related functions  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric Abrahamsen <eric@ericabrahamsen.net>
 
diff --git a/test/lisp/gnus/gnus-tests.el b/test/lisp/gnus/gnus-tests.el
index 4c5a6a8191c..f50888e2077 100644
--- a/test/lisp/gnus/gnus-tests.el
+++ b/test/lisp/gnus/gnus-tests.el
@@ -1,6 +1,6 @@
 ;;; gnus-tests.el --- Wrapper for the Gnus tests  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <tzz@lifelogs.com>
 
diff --git a/test/lisp/gnus/gnus-util-tests.el 
b/test/lisp/gnus/gnus-util-tests.el
index 464567061f6..4b904ca6f1d 100644
--- a/test/lisp/gnus/gnus-util-tests.el
+++ b/test/lisp/gnus/gnus-util-tests.el
@@ -1,5 +1,5 @@
 ;;; gnus-util-tests.el --- Selectived tests only.  -*- lexical-binding:t -*-
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Jens Lechtenbörger <jens.lechtenboerger@fsfe.org>
 
diff --git a/test/lisp/gnus/message-tests.el b/test/lisp/gnus/message-tests.el
index a724428ecb4..0844839c366 100644
--- a/test/lisp/gnus/message-tests.el
+++ b/test/lisp/gnus/message-tests.el
@@ -1,6 +1,6 @@
 ;;; message-tests.el --- Tests for message-mode  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: João Távora <joaotavora@gmail.com>
 
diff --git a/test/lisp/gnus/mm-decode-tests.el 
b/test/lisp/gnus/mm-decode-tests.el
index 5f39a32b0de..e60295e21e7 100644
--- a/test/lisp/gnus/mm-decode-tests.el
+++ b/test/lisp/gnus/mm-decode-tests.el
@@ -1,6 +1,6 @@
 ;;; mm-decode-tests.el ---  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/gnus/mml-sec-resources/trustlist.txt 
b/test/lisp/gnus/mml-sec-resources/trustlist.txt
index f886572d283..947ec526199 100644
--- a/test/lisp/gnus/mml-sec-resources/trustlist.txt
+++ b/test/lisp/gnus/mml-sec-resources/trustlist.txt
@@ -2,7 +2,7 @@
 # well as empty lines are ignored.  Lines have a length limit but this
 # is not a serious limitation as the format of the entries is fixed and
 # checked by gpg-agent.  A non-comment line starts with optional white
-# space, followed by the SHA-1 fingerpint in hex, followed by a flag
+# space, followed by the SHA-1 fingerprint in hex, followed by a flag
 # which may be one of 'P', 'S' or '*' and optionally followed by a list of
 # other flags.  The fingerprint may be prefixed with a '!' to mark the
 # key as not trusted.  You should give the gpg-agent a HUP or run the
diff --git a/test/lisp/gnus/mml-sec-tests.el b/test/lisp/gnus/mml-sec-tests.el
index f8ebf2f3a99..37e84c148af 100644
--- a/test/lisp/gnus/mml-sec-tests.el
+++ b/test/lisp/gnus/mml-sec-tests.el
@@ -1,6 +1,6 @@
 ;;; mml-sec-tests.el --- Tests mml-sec.el, see README-mml-secure.txt.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2015, 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015, 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Jens Lechtenbörger <jens.lechtenboerger@fsfe.org>
 
diff --git a/test/lisp/gnus/nnrss-tests.el b/test/lisp/gnus/nnrss-tests.el
index 47d208cb160..57ef8797475 100644
--- a/test/lisp/gnus/nnrss-tests.el
+++ b/test/lisp/gnus/nnrss-tests.el
@@ -1,6 +1,6 @@
 ;;; nnrss-tests.el --- tests for gnus/nnrss.el    -*- lexical-binding:t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/help-fns-tests.el b/test/lisp/help-fns-tests.el
index 7ff7aa1ccd7..4d715cde1d5 100644
--- a/test/lisp/help-fns-tests.el
+++ b/test/lisp/help-fns-tests.el
@@ -1,6 +1,6 @@
 ;;; help-fns-tests.el --- tests for help-fns.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
diff --git a/test/lisp/help-mode-tests.el b/test/lisp/help-mode-tests.el
index 04241f31383..30e944f6c80 100644
--- a/test/lisp/help-mode-tests.el
+++ b/test/lisp/help-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; help-mode-tests.el --- Tests for help-mode.el    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/help-tests.el b/test/lisp/help-tests.el
index 0fcaacb6443..6c440f9e238 100644
--- a/test/lisp/help-tests.el
+++ b/test/lisp/help-tests.el
@@ -1,6 +1,6 @@
 ;;; help-tests.el --- Tests for help.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Juanma Barranquero <lekktu@gmail.com>
 ;;         Eli Zaretskii <eliz@gnu.org>
diff --git a/test/lisp/hfy-cmap-tests.el b/test/lisp/hfy-cmap-tests.el
index fa9c51df4c6..0d135aa8c36 100644
--- a/test/lisp/hfy-cmap-tests.el
+++ b/test/lisp/hfy-cmap-tests.el
@@ -1,6 +1,6 @@
 ;;; hfy-cmap-tests.el --- tests for hfy-cmap.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/hi-lock-tests.el b/test/lisp/hi-lock-tests.el
index 760b319a926..aeb08ecbb29 100644
--- a/test/lisp/hi-lock-tests.el
+++ b/test/lisp/hi-lock-tests.el
@@ -1,6 +1,6 @@
 ;;; hi-lock-tests.el --- Tests for hi-lock.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Tino Calancha <tino.calancha@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/hl-line-tests.el b/test/lisp/hl-line-tests.el
index 888351addac..56924ff8e3e 100644
--- a/test/lisp/hl-line-tests.el
+++ b/test/lisp/hl-line-tests.el
@@ -1,6 +1,6 @@
 ;;; hl-line-tests.el --- Test suite for hl-line. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/htmlfontify-tests.el b/test/lisp/htmlfontify-tests.el
index 5c1f053066b..0a351f0a8a5 100644
--- a/test/lisp/htmlfontify-tests.el
+++ b/test/lisp/htmlfontify-tests.el
@@ -1,6 +1,6 @@
 ;;; htmlfontify-tests.el --- Test suite. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/ibuffer-tests.el b/test/lisp/ibuffer-tests.el
index d54718e297a..83bfa1f68af 100644
--- a/test/lisp/ibuffer-tests.el
+++ b/test/lisp/ibuffer-tests.el
@@ -1,6 +1,6 @@
 ;;; ibuffer-tests.el --- Test suite. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/ido-tests.el b/test/lisp/ido-tests.el
index 56ef6cde358..4f753479a06 100644
--- a/test/lisp/ido-tests.el
+++ b/test/lisp/ido-tests.el
@@ -1,6 +1,6 @@
 ;;; ido-tests.el --- unit tests for ido.el           -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Philipp Stephani <phst@google.com>
 
diff --git a/test/lisp/image-file-tests.el b/test/lisp/image-file-tests.el
index 59af6ba909a..d934867c1cb 100644
--- a/test/lisp/image-file-tests.el
+++ b/test/lisp/image-file-tests.el
@@ -1,6 +1,6 @@
 ;;; image-file-tests.el --- Test suite for image-files  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/image-tests.el b/test/lisp/image-tests.el
index bc8c3636c3c..cb4821adefc 100644
--- a/test/lisp/image-tests.el
+++ b/test/lisp/image-tests.el
@@ -1,6 +1,6 @@
 ;;; image-tests.el --- tests for image.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/image/exif-tests.el b/test/lisp/image/exif-tests.el
index d62eef4798d..f803565dd62 100644
--- a/test/lisp/image/exif-tests.el
+++ b/test/lisp/image/exif-tests.el
@@ -1,6 +1,6 @@
 ;;; exif-tests.el --- tests for exif.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/image/gravatar-tests.el 
b/test/lisp/image/gravatar-tests.el
index 3b3a0ad4643..8965be13c5d 100644
--- a/test/lisp/image/gravatar-tests.el
+++ b/test/lisp/image/gravatar-tests.el
@@ -1,6 +1,6 @@
 ;;; gravatar-tests.el --- tests for gravatar.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/image/image-dired-tests.el 
b/test/lisp/image/image-dired-tests.el
index 00df72487fd..8a4acf6bd88 100644
--- a/test/lisp/image/image-dired-tests.el
+++ b/test/lisp/image/image-dired-tests.el
@@ -1,6 +1,6 @@
 ;;; image-dired-tests.el --- Tests for image-dired.el  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/image/image-dired-util-tests.el 
b/test/lisp/image/image-dired-util-tests.el
index 63d42f56dea..bd3d65bdd3a 100644
--- a/test/lisp/image/image-dired-util-tests.el
+++ b/test/lisp/image/image-dired-util-tests.el
@@ -1,6 +1,6 @@
 ;;; image-dired-util-tests.el --- Tests for image-dired.el  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/image/wallpaper-tests.el 
b/test/lisp/image/wallpaper-tests.el
index a5d3343bd4d..94b4d8b2dbb 100644
--- a/test/lisp/image/wallpaper-tests.el
+++ b/test/lisp/image/wallpaper-tests.el
@@ -1,6 +1,6 @@
 ;;; wallpaper-tests.el --- tests for wallpaper.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/imenu-tests.el b/test/lisp/imenu-tests.el
index 9667f0566c2..cc6fdd41005 100644
--- a/test/lisp/imenu-tests.el
+++ b/test/lisp/imenu-tests.el
@@ -1,6 +1,6 @@
 ;;; imenu-tests.el --- Test suite for imenu.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Masatake YAMATO <yamato@redhat.com>
 ;; Keywords: tools convenience
diff --git a/test/lisp/info-tests.el b/test/lisp/info-tests.el
index 11ac25555de..9ab00b4b82b 100644
--- a/test/lisp/info-tests.el
+++ b/test/lisp/info-tests.el
@@ -1,6 +1,6 @@
 ;;; info-tests.el --- Tests for info.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/info-xref-tests.el b/test/lisp/info-xref-tests.el
index 117170ba338..0d98a242b7e 100644
--- a/test/lisp/info-xref-tests.el
+++ b/test/lisp/info-xref-tests.el
@@ -1,6 +1,6 @@
 ;;; info-xref-tests.el --- tests for info-xref.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/international/ccl-tests.el 
b/test/lisp/international/ccl-tests.el
index cf472415c7a..dfc090b3320 100644
--- a/test/lisp/international/ccl-tests.el
+++ b/test/lisp/international/ccl-tests.el
@@ -1,6 +1,6 @@
 ;;; ccl-tests.el --- unit tests for ccl.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/international/mule-tests.el 
b/test/lisp/international/mule-tests.el
index 94e864817f0..4f70b275848 100644
--- a/test/lisp/international/mule-tests.el
+++ b/test/lisp/international/mule-tests.el
@@ -1,6 +1,6 @@
 ;;; mule-tests.el --- unit tests for mule.el         -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/international/mule-util-tests.el 
b/test/lisp/international/mule-util-tests.el
index cf29e0e290e..848909985b2 100644
--- a/test/lisp/international/mule-util-tests.el
+++ b/test/lisp/international/mule-util-tests.el
@@ -1,6 +1,6 @@
 ;;; mule-util-tests.el --- tests for international/mule-util.el  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/international/textsec-tests.el 
b/test/lisp/international/textsec-tests.el
index 1f7fb97a6be..b9243cff875 100644
--- a/test/lisp/international/textsec-tests.el
+++ b/test/lisp/international/textsec-tests.el
@@ -1,6 +1,6 @@
 ;;; textsec-tests.el --- Tests for textsec.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/international/ucs-normalize-tests.el 
b/test/lisp/international/ucs-normalize-tests.el
index 380140308aa..97b8fa66cd3 100644
--- a/test/lisp/international/ucs-normalize-tests.el
+++ b/test/lisp/international/ucs-normalize-tests.el
@@ -1,6 +1,6 @@
 ;;; ucs-normalize-tests.el --- tests for international/ucs-normalize.el -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/isearch-tests.el b/test/lisp/isearch-tests.el
index 8cb5e5e4542..e71f0a5785f 100644
--- a/test/lisp/isearch-tests.el
+++ b/test/lisp/isearch-tests.el
@@ -1,6 +1,6 @@
 ;;; isearch-tests.el --- Tests for isearch.el        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
 
diff --git a/test/lisp/jit-lock-tests.el b/test/lisp/jit-lock-tests.el
index 190825d325e..6944068828a 100644
--- a/test/lisp/jit-lock-tests.el
+++ b/test/lisp/jit-lock-tests.el
@@ -1,6 +1,6 @@
 ;;; jit-lock-tests.el --- tests for jit-lock  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Dmitry Gutov <dgutov@yandex.ru>
 
diff --git a/test/lisp/json-tests.el b/test/lisp/json-tests.el
index ab1f19fb6e7..92edb6e13f1 100644
--- a/test/lisp/json-tests.el
+++ b/test/lisp/json-tests.el
@@ -1,6 +1,6 @@
 ;;; json-tests.el --- Test suite for json.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Dmitry Gutov <dgutov@yandex.ru>
 
diff --git a/test/lisp/jsonrpc-tests.el b/test/lisp/jsonrpc-tests.el
index e02cb154235..a595167d130 100644
--- a/test/lisp/jsonrpc-tests.el
+++ b/test/lisp/jsonrpc-tests.el
@@ -1,6 +1,6 @@
 ;;; jsonrpc-tests.el --- tests for jsonrpc.el        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: João Távora <joaotavora@gmail.com>
 ;; Keywords: tests
diff --git a/test/lisp/kmacro-tests.el b/test/lisp/kmacro-tests.el
index 75d700070aa..551fd8b60fc 100644
--- a/test/lisp/kmacro-tests.el
+++ b/test/lisp/kmacro-tests.el
@@ -1,6 +1,6 @@
 ;;; kmacro-tests.el --- Tests for kmacro.el       -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Gemini Lasswell <gazally@runbox.com>
 
diff --git a/test/lisp/loadhist-resources/loadhist--bar.el 
b/test/lisp/loadhist-resources/loadhist--bar.el
index 94e82c1b189..882d073ab56 100644
--- a/test/lisp/loadhist-resources/loadhist--bar.el
+++ b/test/lisp/loadhist-resources/loadhist--bar.el
@@ -1,6 +1,6 @@
 ;;; loadhist--bar.el --- Dummy package for loadhist-tests  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022  Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 
diff --git a/test/lisp/loadhist-resources/loadhist--foo.el 
b/test/lisp/loadhist-resources/loadhist--foo.el
index 8d48c3683d2..239066b6def 100644
--- a/test/lisp/loadhist-resources/loadhist--foo.el
+++ b/test/lisp/loadhist-resources/loadhist--foo.el
@@ -1,6 +1,6 @@
 ;;; loadhist--foo.el --- Dummy package for loadhist-tests  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2022  Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 
diff --git a/test/lisp/loadhist-tests.el b/test/lisp/loadhist-tests.el
index ef5fc164d34..28f6607d95c 100644
--- a/test/lisp/loadhist-tests.el
+++ b/test/lisp/loadhist-tests.el
@@ -1,6 +1,6 @@
 ;;; loadhist-tests.el --- Tests for loadhist.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/lpr-tests.el b/test/lisp/lpr-tests.el
index 8e8179446d6..382b3ae905f 100644
--- a/test/lisp/lpr-tests.el
+++ b/test/lisp/lpr-tests.el
@@ -1,6 +1,6 @@
 ;;; lpr-tests.el --- Tests for lpr.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/ls-lisp-tests.el b/test/lisp/ls-lisp-tests.el
index 39843defc2e..8c6262819c4 100644
--- a/test/lisp/ls-lisp-tests.el
+++ b/test/lisp/ls-lisp-tests.el
@@ -1,6 +1,6 @@
 ;;; ls-lisp-tests.el --- tests for ls-lisp.el  -*- lexical-binding: t-*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Tino Calancha <tino.calancha@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/mail/flow-fill-tests.el 
b/test/lisp/mail/flow-fill-tests.el
index 8436a9627a8..f6e92199814 100644
--- a/test/lisp/mail/flow-fill-tests.el
+++ b/test/lisp/mail/flow-fill-tests.el
@@ -1,6 +1,6 @@
 ;;; flow-fill-tests.el --- Tests for flow-fill.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/mail/footnote-tests.el b/test/lisp/mail/footnote-tests.el
index f3a35e3dfc6..1415d2944a7 100644
--- a/test/lisp/mail/footnote-tests.el
+++ b/test/lisp/mail/footnote-tests.el
@@ -1,6 +1,6 @@
 ;;; footnote-tests.el --- Tests for footnote-mode    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
diff --git a/test/lisp/mail/ietf-drums-date-tests.el 
b/test/lisp/mail/ietf-drums-date-tests.el
index 781d72d3529..822b5bd041d 100644
--- a/test/lisp/mail/ietf-drums-date-tests.el
+++ b/test/lisp/mail/ietf-drums-date-tests.el
@@ -1,6 +1,6 @@
 ;;; ietf-drums-date-tests.el --- Test suite for ietf-drums-date.el  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Bob Rogers <rogers@rgrjr.com>
 
diff --git a/test/lisp/mail/ietf-drums-tests.el 
b/test/lisp/mail/ietf-drums-tests.el
index b13937bf736..c55c5467f60 100644
--- a/test/lisp/mail/ietf-drums-tests.el
+++ b/test/lisp/mail/ietf-drums-tests.el
@@ -1,6 +1,6 @@
 ;;; ietf-drums-tests.el --- Test suite for ietf-drums.el  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; Author: Bob Rogers <rogers@rgrjr.com>
 
diff --git a/test/lisp/mail/mail-extr-tests.el 
b/test/lisp/mail/mail-extr-tests.el
index a8f0c605cb0..1013b9e2058 100644
--- a/test/lisp/mail/mail-extr-tests.el
+++ b/test/lisp/mail/mail-extr-tests.el
@@ -1,6 +1,6 @@
 ;;; mail-extr-tests.el --- Tests for mail-extr.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/mail/mail-parse-tests.el 
b/test/lisp/mail/mail-parse-tests.el
index f5e6f1fb034..c4abbaa93ca 100644
--- a/test/lisp/mail/mail-parse-tests.el
+++ b/test/lisp/mail/mail-parse-tests.el
@@ -1,6 +1,6 @@
 ;;; mail-parse-tests.el --- tests for mail-parse.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/mail/mail-utils-tests.el 
b/test/lisp/mail/mail-utils-tests.el
index 29a9b9eeb96..3bf5f2065e1 100644
--- a/test/lisp/mail/mail-utils-tests.el
+++ b/test/lisp/mail/mail-utils-tests.el
@@ -1,6 +1,6 @@
 ;;; mail-utils-tests.el --- tests for mail-utils.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/mail/qp-tests.el b/test/lisp/mail/qp-tests.el
index e8e58063b9c..9f0857a0ba6 100644
--- a/test/lisp/mail/qp-tests.el
+++ b/test/lisp/mail/qp-tests.el
@@ -1,6 +1,6 @@
 ;;; qp-tests.el --- Tests for qp.el  -*- lexical-binding:t; coding:utf-8 -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/mail/rfc2045-tests.el b/test/lisp/mail/rfc2045-tests.el
index c65a0011c70..0982e057609 100644
--- a/test/lisp/mail/rfc2045-tests.el
+++ b/test/lisp/mail/rfc2045-tests.el
@@ -1,6 +1,6 @@
 ;;; rfc2045-tests.el --- Tests for rfc2045.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/mail/rfc2047-tests.el b/test/lisp/mail/rfc2047-tests.el
index 6e50ce2f320..3ce3bc10614 100644
--- a/test/lisp/mail/rfc2047-tests.el
+++ b/test/lisp/mail/rfc2047-tests.el
@@ -1,6 +1,6 @@
 ;;; rfc2047-tests.el --- tests for rfc2047.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/mail/rfc6068-tests.el b/test/lisp/mail/rfc6068-tests.el
index 0efbb68cc2f..6b7de3dfedd 100644
--- a/test/lisp/mail/rfc6068-tests.el
+++ b/test/lisp/mail/rfc6068-tests.el
@@ -1,6 +1,6 @@
 ;;; rfc6068-tests.el --- Tests for rfc6068.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/mail/rfc822-tests.el b/test/lisp/mail/rfc822-tests.el
index ff29dac4277..53175fef079 100644
--- a/test/lisp/mail/rfc822-tests.el
+++ b/test/lisp/mail/rfc822-tests.el
@@ -1,6 +1,6 @@
 ;;; rfc822-tests.el --- Tests for rfc822.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/mail/rmail-tests.el b/test/lisp/mail/rmail-tests.el
index 44394cd52ed..ae810c2e8df 100644
--- a/test/lisp/mail/rmail-tests.el
+++ b/test/lisp/mail/rmail-tests.el
@@ -1,6 +1,6 @@
 ;;; rmail-tests.el --- Test suite. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/mail/rmailmm-tests.el b/test/lisp/mail/rmailmm-tests.el
index 5d1ac6d6306..0daaf2954dd 100644
--- a/test/lisp/mail/rmailmm-tests.el
+++ b/test/lisp/mail/rmailmm-tests.el
@@ -1,6 +1,6 @@
 ;;; rmailmm-tests.el --- Tests for rmailmm.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/mail/undigest-tests.el b/test/lisp/mail/undigest-tests.el
index d52c9f9c5ab..4fe65258b1e 100644
--- a/test/lisp/mail/undigest-tests.el
+++ b/test/lisp/mail/undigest-tests.el
@@ -1,6 +1,6 @@
 ;;; undigest-tests.el --- Tests for undigest.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/mail/uudecode-tests.el b/test/lisp/mail/uudecode-tests.el
index 7946e99dbc9..6cfbc5e1b53 100644
--- a/test/lisp/mail/uudecode-tests.el
+++ b/test/lisp/mail/uudecode-tests.el
@@ -1,6 +1,6 @@
 ;;; uudecode-tests.el --- Tests for uudecode.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/man-tests.el b/test/lisp/man-tests.el
index 82714f15668..e3657d7df8a 100644
--- a/test/lisp/man-tests.el
+++ b/test/lisp/man-tests.el
@@ -1,6 +1,6 @@
 ;;; man-tests.el --- Test suite for man.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Wolfgang Jenkner <wjenkner@inode.at>
 ;; Keywords: help, internal, unix
diff --git a/test/lisp/md4-tests.el b/test/lisp/md4-tests.el
index d1f227cb90a..50d1a7feabc 100644
--- a/test/lisp/md4-tests.el
+++ b/test/lisp/md4-tests.el
@@ -1,6 +1,6 @@
 ;;; md4-tests.el --- tests for md4.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Mark Oteiza <mvoteiza@udel.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/test/lisp/mh-e/mh-limit-tests.el b/test/lisp/mh-e/mh-limit-tests.el
index 5aedb890546..1fab3e1d9cc 100644
--- a/test/lisp/mh-e/mh-limit-tests.el
+++ b/test/lisp/mh-e/mh-limit-tests.el
@@ -1,6 +1,6 @@
 ;;; mh-limit-tests.el --- tests for mh-limit.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/mh-e/mh-thread-tests.el 
b/test/lisp/mh-e/mh-thread-tests.el
index ea8d441e2d1..3cc21f45ab9 100644
--- a/test/lisp/mh-e/mh-thread-tests.el
+++ b/test/lisp/mh-e/mh-thread-tests.el
@@ -1,6 +1,6 @@
 ;;; mh-thread-tests.el --- tests for mh-thread.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/mh-e/mh-utils-tests.el b/test/lisp/mh-e/mh-utils-tests.el
index 72ee2fc4745..25be86070b8 100644
--- a/test/lisp/mh-e/mh-utils-tests.el
+++ b/test/lisp/mh-e/mh-utils-tests.el
@@ -1,6 +1,6 @@
 ;;; mh-utils-tests.el --- tests for mh-utils.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/mh-e/mh-xface-tests.el b/test/lisp/mh-e/mh-xface-tests.el
index 6c9c7ea1bf1..0630c018f60 100644
--- a/test/lisp/mh-e/mh-xface-tests.el
+++ b/test/lisp/mh-e/mh-xface-tests.el
@@ -1,6 +1,6 @@
 ;;; mh-xface-tests.el --- tests for mh-xface.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/mh-e/test-all-mh-variants.sh 
b/test/lisp/mh-e/test-all-mh-variants.sh
index 3789a5fdedc..5e6b26fd2ec 100755
--- a/test/lisp/mh-e/test-all-mh-variants.sh
+++ b/test/lisp/mh-e/test-all-mh-variants.sh
@@ -1,7 +1,7 @@
 #! /bin/bash
 # Run the mh-utils-tests against all MH variants found on this system.
 
-# Copyright (C) 2021-2022 Free Software Foundation, Inc.
+# Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/test/lisp/minibuffer-tests.el b/test/lisp/minibuffer-tests.el
index ec93c8f42a5..1de8e56cbd4 100644
--- a/test/lisp/minibuffer-tests.el
+++ b/test/lisp/minibuffer-tests.el
@@ -1,6 +1,6 @@
 ;;; minibuffer-tests.el --- Tests for completion functions  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
diff --git a/test/lisp/misc-tests.el b/test/lisp/misc-tests.el
index f84827ab025..f1d22e099b9 100644
--- a/test/lisp/misc-tests.el
+++ b/test/lisp/misc-tests.el
@@ -1,6 +1,6 @@
 ;;; misc-tests.el --- Tests for misc.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/mouse-tests.el b/test/lisp/mouse-tests.el
index 03ecbc19858..2af6cac6325 100644
--- a/test/lisp/mouse-tests.el
+++ b/test/lisp/mouse-tests.el
@@ -1,6 +1,6 @@
 ;;; mouse-tests.el --- unit tests for mouse.el       -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Philipp Stephani <phst@google.com>
 
diff --git a/test/lisp/mwheel-tests.el b/test/lisp/mwheel-tests.el
index 947dfdbb5e8..3255b5de200 100644
--- a/test/lisp/mwheel-tests.el
+++ b/test/lisp/mwheel-tests.el
@@ -1,6 +1,6 @@
 ;;; mwheel-tests.el --- tests for mwheel.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/net/browse-url-tests.el 
b/test/lisp/net/browse-url-tests.el
index dc819768211..0fe2fa788b9 100644
--- a/test/lisp/net/browse-url-tests.el
+++ b/test/lisp/net/browse-url-tests.el
@@ -1,6 +1,6 @@
 ;;; browse-url-tests.el --- Tests for browse-url.el  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/net/dbus-tests.el b/test/lisp/net/dbus-tests.el
index c808e6350ea..418ae61bb42 100644
--- a/test/lisp/net/dbus-tests.el
+++ b/test/lisp/net/dbus-tests.el
@@ -1,6 +1,6 @@
 ;;; dbus-tests.el --- Tests of D-Bus integration into Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
diff --git a/test/lisp/net/dig-tests.el b/test/lisp/net/dig-tests.el
index c3bdc43d3fd..b264fd40ae1 100644
--- a/test/lisp/net/dig-tests.el
+++ b/test/lisp/net/dig-tests.el
@@ -1,6 +1,6 @@
 ;;; dig-tests.el --- Tests for dig.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/net/eudc-tests.el b/test/lisp/net/eudc-tests.el
index 0da51b7c36e..431d7c46231 100644
--- a/test/lisp/net/eudc-tests.el
+++ b/test/lisp/net/eudc-tests.el
@@ -1,6 +1,6 @@
 ;;; eudc-tests.el --- tests for eudc.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/net/gnutls-tests.el b/test/lisp/net/gnutls-tests.el
index f14ee20a302..cb911577385 100644
--- a/test/lisp/net/gnutls-tests.el
+++ b/test/lisp/net/gnutls-tests.el
@@ -1,6 +1,6 @@
 ;;; gnutls-tests.el --- Test suite for gnutls.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <tzz@lifelogs.com>
 
diff --git a/test/lisp/net/hmac-md5-tests.el b/test/lisp/net/hmac-md5-tests.el
index 09bbb8015e9..0caa6c46952 100644
--- a/test/lisp/net/hmac-md5-tests.el
+++ b/test/lisp/net/hmac-md5-tests.el
@@ -1,6 +1,6 @@
 ;;; hmac-md5-tests.el --- Tests for hmac-md5.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/net/mailcap-tests.el b/test/lisp/net/mailcap-tests.el
index 04462dbc8ba..e47ead98f42 100644
--- a/test/lisp/net/mailcap-tests.el
+++ b/test/lisp/net/mailcap-tests.el
@@ -1,6 +1,6 @@
 ;;; mailcap-tests.el --- tests for mailcap.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Mark Oteiza <mvoteiza@udel.edu>
 
diff --git a/test/lisp/net/network-stream-tests.el 
b/test/lisp/net/network-stream-tests.el
index 1bdc35da195..0fd9549c305 100644
--- a/test/lisp/net/network-stream-tests.el
+++ b/test/lisp/net/network-stream-tests.el
@@ -1,6 +1,6 @@
 ;;; network-stream-tests.el --- tests for network processes       -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 
diff --git a/test/lisp/net/newsticker-tests.el 
b/test/lisp/net/newsticker-tests.el
index 2dc92566a61..3ed4b7b1dd5 100644
--- a/test/lisp/net/newsticker-tests.el
+++ b/test/lisp/net/newsticker-tests.el
@@ -1,6 +1,6 @@
 ;;; newsticker-tests.el --- Test suite for newsticker.  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; Keywords:    News, RSS, Atom
diff --git a/test/lisp/net/nsm-tests.el b/test/lisp/net/nsm-tests.el
index e0536320cc9..391015dae9a 100644
--- a/test/lisp/net/nsm-tests.el
+++ b/test/lisp/net/nsm-tests.el
@@ -1,6 +1,6 @@
 ;;; nsm-tests.el --- tests for network security manager  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Robert Pluim <rpluim@gmail.com>
 
diff --git a/test/lisp/net/ntlm-tests.el b/test/lisp/net/ntlm-tests.el
index a02d97f19a8..625c5e902bb 100644
--- a/test/lisp/net/ntlm-tests.el
+++ b/test/lisp/net/ntlm-tests.el
@@ -1,6 +1,6 @@
 ;;; ntlm-tests.el --- tests for ntlm.el            -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/net/puny-tests.el b/test/lisp/net/puny-tests.el
index 1b0cf56895e..48d03791853 100644
--- a/test/lisp/net/puny-tests.el
+++ b/test/lisp/net/puny-tests.el
@@ -1,6 +1,6 @@
 ;;; puny-tests.el --- tests for net/puny.el  -*- coding: utf-8; 
lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/net/rcirc-tests.el b/test/lisp/net/rcirc-tests.el
index 0ba4f2b86e5..0a49951b410 100644
--- a/test/lisp/net/rcirc-tests.el
+++ b/test/lisp/net/rcirc-tests.el
@@ -1,6 +1,6 @@
 ;;; rcirc-tests.el --- Tests for rcirc -*- lexical-binding:t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 ;;
diff --git a/test/lisp/net/rfc2104-tests.el b/test/lisp/net/rfc2104-tests.el
index 9cce2aa4b35..713a08d6dde 100644
--- a/test/lisp/net/rfc2104-tests.el
+++ b/test/lisp/net/rfc2104-tests.el
@@ -1,6 +1,6 @@
 ;;; rfc2104-tests.el --- Tests of RFC2104 hashes  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 
diff --git a/test/lisp/net/sasl-cram-tests.el b/test/lisp/net/sasl-cram-tests.el
index e8dbeca0908..be703685fc3 100644
--- a/test/lisp/net/sasl-cram-tests.el
+++ b/test/lisp/net/sasl-cram-tests.el
@@ -1,6 +1,6 @@
 ;;; sasl-cram-tests.el --- tests for sasl-cram.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/net/sasl-scram-rfc-tests.el 
b/test/lisp/net/sasl-scram-rfc-tests.el
index b61b437c75a..8b624f9123f 100644
--- a/test/lisp/net/sasl-scram-rfc-tests.el
+++ b/test/lisp/net/sasl-scram-rfc-tests.el
@@ -1,6 +1,6 @@
 ;;; sasl-scram-rfc-tests.el --- tests for SCRAM       -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Magnus Henoch <magnus.henoch@gmail.com>
 
diff --git a/test/lisp/net/sasl-tests.el b/test/lisp/net/sasl-tests.el
index f0e99e8f09e..2abbfd559f0 100644
--- a/test/lisp/net/sasl-tests.el
+++ b/test/lisp/net/sasl-tests.el
@@ -1,6 +1,6 @@
 ;;; sasl-tests.el --- tests for sasl.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/net/secrets-tests.el b/test/lisp/net/secrets-tests.el
index 7e66774701c..6307390aad5 100644
--- a/test/lisp/net/secrets-tests.el
+++ b/test/lisp/net/secrets-tests.el
@@ -1,6 +1,6 @@
 ;;; secrets-tests.el --- Tests of Secret Service API -*- lexical-binding: t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
diff --git a/test/lisp/net/shr-tests.el b/test/lisp/net/shr-tests.el
index 2254f9bc860..64ed070f851 100644
--- a/test/lisp/net/shr-tests.el
+++ b/test/lisp/net/shr-tests.el
@@ -1,6 +1,6 @@
 ;;; shr-tests.el --- tests for shr.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 
diff --git a/test/lisp/net/socks-tests.el b/test/lisp/net/socks-tests.el
index 461796bdf99..958e2ff44a8 100644
--- a/test/lisp/net/socks-tests.el
+++ b/test/lisp/net/socks-tests.el
@@ -1,6 +1,6 @@
 ;;; socks-tests.el --- tests for SOCKS -*- coding: utf-8; lexical-binding: t; 
-*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/net/tramp-archive-tests.el 
b/test/lisp/net/tramp-archive-tests.el
index d9eafc47ad7..96c1e78e37a 100644
--- a/test/lisp/net/tramp-archive-tests.el
+++ b/test/lisp/net/tramp-archive-tests.el
@@ -1,6 +1,6 @@
 ;;; tramp-archive-tests.el --- Tests of file archive access  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index 79b2fc803d6..6fb9fa1fae9 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -1,6 +1,6 @@
 ;;; tramp-tests.el --- Tests of remote file access  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
@@ -2857,6 +2857,7 @@ This checks also `file-name-as-directory', 
`file-name-directory',
 This tests also `file-directory-p' and `file-accessible-directory-p'."
   (skip-unless (tramp--test-enabled))
 
+  ;; Since Emacs 29.1, `make-directory' has defined return values.
   (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
           (tmp-name2 (expand-file-name "foo/bar" tmp-name1))
@@ -2865,7 +2866,9 @@ This tests also `file-directory-p' and 
`file-accessible-directory-p'."
       (unwind-protect
          (progn
            (with-file-modes unusual-file-mode-1
-             (make-directory tmp-name1))
+             (if (tramp--test-emacs29-p)
+                 (should-not (make-directory tmp-name1))
+               (make-directory tmp-name1)))
            (should-error
             (make-directory tmp-name1)
             :type 'file-already-exists)
@@ -2878,15 +2881,19 @@ This tests also `file-directory-p' and 
`file-accessible-directory-p'."
             (make-directory tmp-name2)
             :type 'file-error)
            (with-file-modes unusual-file-mode-2
-             (make-directory tmp-name2 'parents))
+             (if (tramp--test-emacs29-p)
+                 (should-not (make-directory tmp-name2 'parents))
+               (make-directory tmp-name2 'parents)))
            (should (file-directory-p tmp-name2))
            (should (file-accessible-directory-p tmp-name2))
            (when (tramp--test-supports-set-file-modes-p)
              (should (equal (format "%#o" unusual-file-mode-2)
                             (format "%#o" (file-modes tmp-name2)))))
            ;; If PARENTS is non-nil, `make-directory' shall not
-           ;; signal an error when DIR exists already.
-           (make-directory tmp-name2 'parents))
+           ;; signal an error when DIR exists already.  It returns t.
+           (if (tramp--test-emacs29-p)
+               (should (make-directory tmp-name2 'parents))
+             (make-directory tmp-name2 'parents)))
 
        ;; Cleanup.
        (ignore-errors (delete-directory tmp-name1 'recursive))))))
@@ -5503,15 +5510,11 @@ INPUT, if non-nil, is a string sent to the process."
               ;; String to be sent.
               (format "%s\n" (file-name-nondirectory tmp-name)))
              (should
-              (string-equal
-               ;; tramp-adb.el echoes, so we must add the string.
-               (if (and (tramp--test-adb-p)
-                        (not (tramp-direct-async-process-p)))
-                   (format
-                    "%s\n%s\n"
-                    (file-name-nondirectory tmp-name)
-                    (file-name-nondirectory tmp-name))
-                 (format "%s\n" (file-name-nondirectory tmp-name)))
+              (string-match-p
+               ;; Some shells echo, for example the "adb" or "docker" methods.
+               (tramp-compat-rx
+                bos (** 1 2 (literal (file-name-nondirectory tmp-name)) "\n")
+                eos)
                (buffer-string))))
 
          ;; Cleanup.
diff --git a/test/lisp/net/webjump-tests.el b/test/lisp/net/webjump-tests.el
index 457e4659914..42fa346a869 100644
--- a/test/lisp/net/webjump-tests.el
+++ b/test/lisp/net/webjump-tests.el
@@ -1,6 +1,6 @@
 ;;; webjump-tests.el --- Tests for webjump.el        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/newcomment-tests.el b/test/lisp/newcomment-tests.el
index a4e28471411..cb0f304c463 100644
--- a/test/lisp/newcomment-tests.el
+++ b/test/lisp/newcomment-tests.el
@@ -1,6 +1,6 @@
 ;;; newcomment-tests.el --- Tests for newcomment.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/nxml/nxml-mode-tests.el 
b/test/lisp/nxml/nxml-mode-tests.el
index 04346e0f4f9..973f2ebb67e 100644
--- a/test/lisp/nxml/nxml-mode-tests.el
+++ b/test/lisp/nxml/nxml-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; nxml-mode-tests.el --- Test NXML Mode -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/nxml/xsd-regexp-tests.el 
b/test/lisp/nxml/xsd-regexp-tests.el
index bd43889a5ae..6258e6c0fb0 100644
--- a/test/lisp/nxml/xsd-regexp-tests.el
+++ b/test/lisp/nxml/xsd-regexp-tests.el
@@ -1,6 +1,6 @@
 ;;; xsd-regexp-tests.el --- Test NXML Mode -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/obarray-tests.el b/test/lisp/obarray-tests.el
index f34109af242..1831dc07a6d 100644
--- a/test/lisp/obarray-tests.el
+++ b/test/lisp/obarray-tests.el
@@ -1,6 +1,6 @@
 ;;; obarray-tests.el --- Tests for obarray -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Przemysław Wojnowski <esperanto@cumego.com>
 
diff --git a/test/lisp/obsolete/cl-tests.el b/test/lisp/obsolete/cl-tests.el
index 5a701a1e550..f52c4749c9a 100644
--- a/test/lisp/obsolete/cl-tests.el
+++ b/test/lisp/obsolete/cl-tests.el
@@ -1,6 +1,6 @@
 ;;; cl-tests.el --- tests for emacs-lisp/cl.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/obsolete/inversion-tests.el 
b/test/lisp/obsolete/inversion-tests.el
index 8af91d7d147..728362eae0e 100644
--- a/test/lisp/obsolete/inversion-tests.el
+++ b/test/lisp/obsolete/inversion-tests.el
@@ -1,6 +1,6 @@
 ;;; inversion-tests.el --- Tests for inversion.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/obsolete/makesum-tests.el 
b/test/lisp/obsolete/makesum-tests.el
index e5317be847b..280a43f77d5 100644
--- a/test/lisp/obsolete/makesum-tests.el
+++ b/test/lisp/obsolete/makesum-tests.el
@@ -1,6 +1,6 @@
 ;;; makesum-tests.el --- Tests for makesum.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/obsolete/rfc2368-tests.el 
b/test/lisp/obsolete/rfc2368-tests.el
index 28fac3785cd..a7f80a689f8 100644
--- a/test/lisp/obsolete/rfc2368-tests.el
+++ b/test/lisp/obsolete/rfc2368-tests.el
@@ -1,6 +1,6 @@
 ;;; rfc2368-tests.el --- Tests for rfc2368.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/obsolete/thumbs-tests.el 
b/test/lisp/obsolete/thumbs-tests.el
index a8972394fa5..87f8227c978 100644
--- a/test/lisp/obsolete/thumbs-tests.el
+++ b/test/lisp/obsolete/thumbs-tests.el
@@ -1,6 +1,6 @@
 ;;; thumbs-tests.el --- tests for thumbs.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/org/org-tests.el b/test/lisp/org/org-tests.el
index 91c8ffc48de..a498164f2f4 100644
--- a/test/lisp/org/org-tests.el
+++ b/test/lisp/org/org-tests.el
@@ -1,6 +1,6 @@
 ;;; org-tests.el --- tests for org/org.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
diff --git a/test/lisp/paren-tests.el b/test/lisp/paren-tests.el
index baf5590cb94..5e8b906a37f 100644
--- a/test/lisp/paren-tests.el
+++ b/test/lisp/paren-tests.el
@@ -1,6 +1,6 @@
 ;;; paren-tests.el --- Tests for paren.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/password-cache-tests.el 
b/test/lisp/password-cache-tests.el
index ca760c2fb3c..45d2ec76f7b 100644
--- a/test/lisp/password-cache-tests.el
+++ b/test/lisp/password-cache-tests.el
@@ -1,6 +1,6 @@
 ;;; password-cache-tests.el --- Tests for password-cache.el  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/pcmpl-linux-tests.el b/test/lisp/pcmpl-linux-tests.el
index a02c535fd5a..eaceb216d38 100644
--- a/test/lisp/pcmpl-linux-tests.el
+++ b/test/lisp/pcmpl-linux-tests.el
@@ -1,6 +1,6 @@
 ;;; pcmpl-linux-tests.el --- Tests for pcmpl-linux.el  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/pcomplete-tests.el b/test/lisp/pcomplete-tests.el
index 00a82502f30..805a645198a 100644
--- a/test/lisp/pcomplete-tests.el
+++ b/test/lisp/pcomplete-tests.el
@@ -1,6 +1,6 @@
 ;;; pcomplete-tests.el --- Tests for pcomplete.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/play/animate-tests.el b/test/lisp/play/animate-tests.el
index 1c7bb0f0819..a11ac6f1730 100644
--- a/test/lisp/play/animate-tests.el
+++ b/test/lisp/play/animate-tests.el
@@ -1,6 +1,6 @@
 ;;; animate-tests.el --- Tests for animate.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/play/cookie1-tests.el b/test/lisp/play/cookie1-tests.el
index 5f3ad6d8f8c..0432ffb0f7e 100644
--- a/test/lisp/play/cookie1-tests.el
+++ b/test/lisp/play/cookie1-tests.el
@@ -1,6 +1,6 @@
 ;;; cookie1-tests.el --- Tests for cookie1.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/play/dissociate-tests.el 
b/test/lisp/play/dissociate-tests.el
index 7af7e425c47..7bc15bb9827 100644
--- a/test/lisp/play/dissociate-tests.el
+++ b/test/lisp/play/dissociate-tests.el
@@ -1,6 +1,6 @@
 ;;; dissociate-tests.el --- Tests for dissociate.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/play/fortune-tests.el b/test/lisp/play/fortune-tests.el
index b79b1f27010..5f0ee6d0d6a 100644
--- a/test/lisp/play/fortune-tests.el
+++ b/test/lisp/play/fortune-tests.el
@@ -1,6 +1,6 @@
 ;;; fortune-tests.el --- Tests for fortune.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/play/life-tests.el b/test/lisp/play/life-tests.el
index c1dcc9d40f5..98ab11a886a 100644
--- a/test/lisp/play/life-tests.el
+++ b/test/lisp/play/life-tests.el
@@ -1,6 +1,6 @@
 ;;; life-tests.el --- Tests for life.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/play/morse-tests.el b/test/lisp/play/morse-tests.el
index 82ac9101005..3fe4c9335c2 100644
--- a/test/lisp/play/morse-tests.el
+++ b/test/lisp/play/morse-tests.el
@@ -1,6 +1,6 @@
 ;;; morse-tests.el --- Tests for morse.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/play/studly-tests.el b/test/lisp/play/studly-tests.el
index ea241bfbe8d..c563023ad12 100644
--- a/test/lisp/play/studly-tests.el
+++ b/test/lisp/play/studly-tests.el
@@ -1,6 +1,6 @@
 ;;; studly-tests.el --- Tests for studly.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/progmodes/asm-mode-tests.el 
b/test/lisp/progmodes/asm-mode-tests.el
index e321224c543..f4191493b27 100644
--- a/test/lisp/progmodes/asm-mode-tests.el
+++ b/test/lisp/progmodes/asm-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; asm-mode-tests.el --- Tests for asm-mode.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/progmodes/autoconf-tests.el 
b/test/lisp/progmodes/autoconf-tests.el
index 7c609f3c2a7..3b67e6483d9 100644
--- a/test/lisp/progmodes/autoconf-tests.el
+++ b/test/lisp/progmodes/autoconf-tests.el
@@ -1,6 +1,6 @@
 ;;; autoconf-tests.el --- Tests for autoconf.el      -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/progmodes/bat-mode-tests.el 
b/test/lisp/progmodes/bat-mode-tests.el
index 5ef4158ec94..8b80956c9af 100644
--- a/test/lisp/progmodes/bat-mode-tests.el
+++ b/test/lisp/progmodes/bat-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; bat-mode-tests.el --- Tests for bat-mode.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Vladimir Panteleev <vladimir@thecybershadow.net>
 ;; Keywords:
diff --git a/test/lisp/progmodes/bug-reference-tests.el 
b/test/lisp/progmodes/bug-reference-tests.el
index fa06d7a1cd0..790582aed4c 100644
--- a/test/lisp/progmodes/bug-reference-tests.el
+++ b/test/lisp/progmodes/bug-reference-tests.el
@@ -1,6 +1,6 @@
 ;;; bug-reference-tests.el --- Tests for bug-reference.el  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/cc-mode-tests.el 
b/test/lisp/progmodes/cc-mode-tests.el
index 2220721ccf6..7158b8f9e45 100644
--- a/test/lisp/progmodes/cc-mode-tests.el
+++ b/test/lisp/progmodes/cc-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; cc-mode-tests.el --- Test suite for cc-mode.  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Michal Nazarewicz <mina86@mina86.com>
 ;; Keywords:       internal
diff --git a/test/lisp/progmodes/compile-tests.el 
b/test/lisp/progmodes/compile-tests.el
index 36bdbe4c91b..53dc7f2a133 100644
--- a/test/lisp/progmodes/compile-tests.el
+++ b/test/lisp/progmodes/compile-tests.el
@@ -1,6 +1,6 @@
 ;;; compile-tests.el --- Test suite for compile.el.  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <cyd@stupidchicken.com>
 ;; Keywords:       internal
diff --git 
a/test/lisp/progmodes/cperl-mode-resources/fontify-punctuation-vars.pl 
b/test/lisp/progmodes/cperl-mode-resources/fontify-punctuation-vars.pl
index fa328438cb1..6d3f478595e 100644
--- a/test/lisp/progmodes/cperl-mode-resources/fontify-punctuation-vars.pl
+++ b/test/lisp/progmodes/cperl-mode-resources/fontify-punctuation-vars.pl
@@ -1,4 +1,4 @@
-# The following Perl punctiation variables contain characters which
+# The following Perl punctuation variables contain characters which
 # are classified as string delimiters in the syntax table.  The mode
 # should not be confused by these.
 # The corresponding tests check that two consecutive '#' characters
diff --git a/test/lisp/progmodes/cperl-mode-tests.el 
b/test/lisp/progmodes/cperl-mode-tests.el
index 1bb206e7040..9bd250a38b5 100644
--- a/test/lisp/progmodes/cperl-mode-tests.el
+++ b/test/lisp/progmodes/cperl-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; cperl-mode-tests.el --- Test for cperl-mode  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Harald Jörg <haj@posteo.de>
 ;; Maintainer: Harald Jörg
@@ -114,7 +114,7 @@ end of the statement."
 ;;; Fontification tests
 
 (ert-deftest cperl-test-fontify-punct-vars ()
-  "Test fontification of Perl's punctiation variables.
+  "Test fontification of Perl's punctuation variables.
 Perl has variable names containing unbalanced quotes for the list
 separator $\" and pre- and postmatch $` and $'.  A reference to
 these variables, for example \\$\", should not cause the dollar
diff --git a/test/lisp/progmodes/eglot-tests.el 
b/test/lisp/progmodes/eglot-tests.el
index d8c9560f5bd..4b6528351b2 100644
--- a/test/lisp/progmodes/eglot-tests.el
+++ b/test/lisp/progmodes/eglot-tests.el
@@ -1,6 +1,6 @@
 ;;; eglot-tests.el --- Tests for eglot.el            -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: João Távora <joaotavora@gmail.com>
 ;; Keywords: tests
diff --git a/test/lisp/progmodes/elisp-mode-tests.el 
b/test/lisp/progmodes/elisp-mode-tests.el
index e73be0db504..57b39a49801 100644
--- a/test/lisp/progmodes/elisp-mode-tests.el
+++ b/test/lisp/progmodes/elisp-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; elisp-mode-tests.el --- Tests for emacs-lisp-mode  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Dmitry Gutov <dgutov@yandex.ru>
 ;; Author: Stephen Leake <stephen_leake@member.fsf.org>
diff --git a/test/lisp/progmodes/etags-tests.el 
b/test/lisp/progmodes/etags-tests.el
index 673c582cc7a..2e1a73d977e 100644
--- a/test/lisp/progmodes/etags-tests.el
+++ b/test/lisp/progmodes/etags-tests.el
@@ -1,6 +1,6 @@
 ;;; etags-tests.el --- Test suite for etags.el.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Eli Zaretskii <eliz@gnu.org>
 
diff --git a/test/lisp/progmodes/executable-tests.el 
b/test/lisp/progmodes/executable-tests.el
index 6988fef87de..406762fe4de 100644
--- a/test/lisp/progmodes/executable-tests.el
+++ b/test/lisp/progmodes/executable-tests.el
@@ -1,6 +1,6 @@
 ;;; executable-tests.el --- Tests for executable.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/f90-tests.el b/test/lisp/progmodes/f90-tests.el
index b857a25bf2a..6028b58bb9e 100644
--- a/test/lisp/progmodes/f90-tests.el
+++ b/test/lisp/progmodes/f90-tests.el
@@ -1,6 +1,6 @@
 ;;; f90-tests.el --- tests for progmodes/f90.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Glenn Morris <rgm@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/test/lisp/progmodes/flymake-tests.el 
b/test/lisp/progmodes/flymake-tests.el
index 71b03b21e5c..f6608dffca2 100644
--- a/test/lisp/progmodes/flymake-tests.el
+++ b/test/lisp/progmodes/flymake-tests.el
@@ -1,6 +1,6 @@
 ;;; flymake-tests.el --- Test suite for flymake -*- lexical-binding: t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Eduard Wiebe <usenet@pusto.de>
 
diff --git a/test/lisp/progmodes/gdb-mi-tests.el 
b/test/lisp/progmodes/gdb-mi-tests.el
index b91eab77057..b75de1a9d45 100644
--- a/test/lisp/progmodes/gdb-mi-tests.el
+++ b/test/lisp/progmodes/gdb-mi-tests.el
@@ -1,6 +1,6 @@
 ;;; gdb-mi-tests.el --- tests for gdb-mi.el    -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/glasses-tests.el 
b/test/lisp/progmodes/glasses-tests.el
index 915fb60d3c8..a577d9a46d8 100644
--- a/test/lisp/progmodes/glasses-tests.el
+++ b/test/lisp/progmodes/glasses-tests.el
@@ -1,6 +1,6 @@
 ;;; glasses-tests.el --- Tests for glasses.el        -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/progmodes/grep-tests.el 
b/test/lisp/progmodes/grep-tests.el
index 101052c5adc..39307999d6d 100644
--- a/test/lisp/progmodes/grep-tests.el
+++ b/test/lisp/progmodes/grep-tests.el
@@ -1,6 +1,6 @@
 ;;; grep-tests.el --- Test suite for grep.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/hideshow-tests.el 
b/test/lisp/progmodes/hideshow-tests.el
index 22d73fb3c46..ce3efb6dc95 100644
--- a/test/lisp/progmodes/hideshow-tests.el
+++ b/test/lisp/progmodes/hideshow-tests.el
@@ -1,6 +1,6 @@
 ;;; hideshow-tests.el --- Test suite for hideshow.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/js-tests.el b/test/lisp/progmodes/js-tests.el
index 2ce9db65d47..00fa78e8891 100644
--- a/test/lisp/progmodes/js-tests.el
+++ b/test/lisp/progmodes/js-tests.el
@@ -1,6 +1,6 @@
 ;;; js-tests.el --- Test suite for js-mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/octave-tests.el 
b/test/lisp/progmodes/octave-tests.el
index 76dd5c9e5f7..bb7e3cd6531 100644
--- a/test/lisp/progmodes/octave-tests.el
+++ b/test/lisp/progmodes/octave-tests.el
@@ -1,6 +1,6 @@
 ;;; octave-tests.el --- Test suite for octave.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/opascal-tests.el 
b/test/lisp/progmodes/opascal-tests.el
index cf6bd376142..25eb2b4c1cd 100644
--- a/test/lisp/progmodes/opascal-tests.el
+++ b/test/lisp/progmodes/opascal-tests.el
@@ -1,6 +1,6 @@
 ;;; opascal-tests.el --- tests for opascal.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/pascal-tests.el 
b/test/lisp/progmodes/pascal-tests.el
index fb9b52fb864..db14a320a70 100644
--- a/test/lisp/progmodes/pascal-tests.el
+++ b/test/lisp/progmodes/pascal-tests.el
@@ -1,6 +1,6 @@
 ;;; pascal-tests.el --- tests for pascal.el    -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/perl-mode-tests.el 
b/test/lisp/progmodes/perl-mode-tests.el
index 91f1db23d62..3757ac25547 100644
--- a/test/lisp/progmodes/perl-mode-tests.el
+++ b/test/lisp/progmodes/perl-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; perl-mode-tests.el --- Test for perl-mode  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/project-tests.el 
b/test/lisp/progmodes/project-tests.el
index 8814f30b047..aea0666629d 100644
--- a/test/lisp/progmodes/project-tests.el
+++ b/test/lisp/progmodes/project-tests.el
@@ -1,6 +1,6 @@
 ;;; project-tests.el --- tests for project.el -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Keywords:
 
diff --git a/test/lisp/progmodes/ps-mode-tests.el 
b/test/lisp/progmodes/ps-mode-tests.el
index 7fa40eb0cb4..3d7408cda10 100644
--- a/test/lisp/progmodes/ps-mode-tests.el
+++ b/test/lisp/progmodes/ps-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; ps-mode-tests.el --- Test suite for ps-mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/python-tests.el 
b/test/lisp/progmodes/python-tests.el
index 17d6d8aa706..eac558db10f 100644
--- a/test/lisp/progmodes/python-tests.el
+++ b/test/lisp/progmodes/python-tests.el
@@ -1,6 +1,6 @@
 ;;; python-tests.el --- Test suite for python.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -4456,6 +4456,70 @@ def foo():
                      (point-max))
                     "# -*- coding: utf-8 -*-\n\nif True:\n        # 
Whitespace\n\n    print ('a')\n\n"))))
 
+(ert-deftest python-shell-buffer-substring-13 ()
+  "Check substring from indented single statement."
+  (python-tests-with-temp-buffer
+   "
+def foo():
+    a = 1
+"
+   (should (string= (python-shell-buffer-substring
+                     (python-tests-look-at "a = 1")
+                     (pos-eol))
+                    "# -*- coding: utf-8 -*-\n\na = 1"))))
+
+(ert-deftest python-shell-buffer-substring-14 ()
+  "Check substring from indented single statement spanning multiple lines."
+  (python-tests-with-temp-buffer
+   "
+def foo():
+    a = \"\"\"Some
+    string\"\"\"
+"
+   (should (string= (python-shell-buffer-substring
+                     (python-tests-look-at "a = \"\"\"Some")
+                     (pos-eol 2))
+                    "# -*- coding: utf-8 -*-\n\na = \"\"\"Some\n    
string\"\"\""))))
+
+(ert-deftest python-shell-buffer-substring-15 ()
+  "Check substring from partial statement."
+  (python-tests-with-temp-buffer
+   "
+def foo():
+    a = 1
+"
+   (should (string= (python-shell-buffer-substring
+                     (python-tests-look-at "    a = 1")
+                     (python-tests-look-at " = 1"))
+                    "# -*- coding: utf-8 -*-\n\na"))))
+
+(ert-deftest python-shell-buffer-substring-16 ()
+  "Check substring from partial statement."
+  (python-tests-with-temp-buffer
+   "
+def foo():
+    a = 1
+"
+   (should (string= (python-shell-buffer-substring
+                     (python-tests-look-at "1")
+                     (1+ (point)))
+                    "# -*- coding: utf-8 -*-\n\n1"))))
+
+(ert-deftest python-shell-buffer-substring-17 ()
+  "Check substring from multiline string."
+  (python-tests-with-temp-buffer
+   "
+def foo():
+    s = \"\"\"
+    a = 1
+    b = 2
+\"\"\"
+"
+   (should (string= (python-shell-buffer-substring
+                     (python-tests-look-at "a = 1")
+                     (python-tests-look-at "\"\"\""))
+                    "# -*- coding: utf-8 -*-\n\nif True:\n    a = 1\n    b = 
2\n\n"))))
+
 
 
 ;;; Shell completion
diff --git 
a/test/lisp/progmodes/ruby-mode-resources/ruby-after-operator-indent.rb 
b/test/lisp/progmodes/ruby-mode-resources/ruby-after-operator-indent.rb
new file mode 100644
index 00000000000..25cd8736f97
--- /dev/null
+++ b/test/lisp/progmodes/ruby-mode-resources/ruby-after-operator-indent.rb
@@ -0,0 +1,29 @@
+4 +
+  5 +
+  6 +
+  7
+
+qux = 4 + 5 *
+  6 +
+  7
+
+foo = obj.bar { |m| tee(m) } +
+  obj.qux { |m| hum(m) }
+
+foo.
+  bar
+  .baz
+
+qux = foo.fee ?
+  bar :
+  tee
+
+# Endless methods.
+class Bar
+  def foo(abc) = bar +
+    baz
+end
+
+# Local Variables:
+# ruby-after-operator-indent: nil
+# End:
diff --git a/test/lisp/progmodes/ruby-mode-resources/ruby-block-indent.rb 
b/test/lisp/progmodes/ruby-mode-resources/ruby-block-indent.rb
new file mode 100644
index 00000000000..32882814b7e
--- /dev/null
+++ b/test/lisp/progmodes/ruby-mode-resources/ruby-block-indent.rb
@@ -0,0 +1,33 @@
+foo
+  .asdasd
+  .proc do |**args|
+    p(**args)
+  end
+
+foo
+  .asdasd
+  .proc { |**args|
+    p(**args)
+  }
+
+bar.foo do
+  bar
+end
+
+bar.foo(tee) do
+  bar
+end
+
+bar.foo(tee) {
+  bar
+}
+
+x.foo do
+  foo
+end.bar do
+  bar
+end
+
+# Local Variables:
+# ruby-block-indent: nil
+# End:
diff --git a/test/lisp/progmodes/ruby-mode-resources/ruby-method-call-indent.rb 
b/test/lisp/progmodes/ruby-mode-resources/ruby-method-call-indent.rb
new file mode 100644
index 00000000000..1a8285ee919
--- /dev/null
+++ b/test/lisp/progmodes/ruby-mode-resources/ruby-method-call-indent.rb
@@ -0,0 +1,15 @@
+foo2 =
+  subject.
+  update(
+    2
+  )
+
+foo3 =
+  subject
+  .update(
+    2
+  )
+
+# Local Variables:
+# ruby-method-call-indent: nil
+# End:
diff --git 
a/test/lisp/progmodes/ruby-mode-resources/ruby-method-params-indent.rb 
b/test/lisp/progmodes/ruby-mode-resources/ruby-method-params-indent.rb
new file mode 100644
index 00000000000..2b665797397
--- /dev/null
+++ b/test/lisp/progmodes/ruby-mode-resources/ruby-method-params-indent.rb
@@ -0,0 +1,18 @@
+class C
+  def self.foo(
+    baz,
+    bar
+  ) =
+    what
+
+  def foo=(
+    baz,
+    bar
+  )
+    hello
+  end
+end
+
+# Local Variables:
+# ruby-method-params-indent: 0
+# End:
diff --git 
a/test/lisp/progmodes/ruby-mode-resources/ruby-parenless-call-arguments-indent.rb
 
b/test/lisp/progmodes/ruby-mode-resources/ruby-parenless-call-arguments-indent.rb
new file mode 100644
index 00000000000..58e08810c4c
--- /dev/null
+++ 
b/test/lisp/progmodes/ruby-mode-resources/ruby-parenless-call-arguments-indent.rb
@@ -0,0 +1,23 @@
+method arg1,
+  method2 arg2,
+  arg3, [
+    arg4,
+    arg5
+  ]
+
+zzz = method (a + b),
+  c, :d => :e,
+  f: g
+
+return render json: {
+    errors: { base: [message] },
+    copying: copying
+  },
+  status: 400
+
+foo(a,
+    b)
+
+# Local Variables:
+# ruby-parenless-call-arguments-indent: nil
+# End:
diff --git a/test/lisp/progmodes/ruby-mode-resources/ruby.rb 
b/test/lisp/progmodes/ruby-mode-resources/ruby.rb
index 2451edaee22..bfae948b259 100644
--- a/test/lisp/progmodes/ruby-mode-resources/ruby.rb
+++ b/test/lisp/progmodes/ruby-mode-resources/ruby.rb
@@ -226,6 +226,7 @@ desc "foo foo" \
 
 foo.
   bar
+  .baz
 
 # 
https://github.com/rails/rails/blob/17f5d8e062909f1fcae25351834d8e89967b645e/activesupport/lib/active_support/time_with_zone.rb#L206
 foo # comment intended to confuse the tokenizer
@@ -380,6 +381,18 @@ foo = [1, 2, 3].map do |i|
   i + 1
 end
 
+m1 = foo
+       .asdasd
+       .proc do |**args|
+  p(**args)
+end
+
+m2 = foo
+       .asdasd
+       .proc { |**args|
+  p(**args)
+}
+
 bar.foo do
   bar
 end
@@ -398,6 +411,12 @@ bar 1 do
   end
 end
 
+x.foo do
+  foo
+end.bar do
+  bar
+end
+
 foo |
   bar
 
@@ -538,3 +557,11 @@ class Bar
     baz
   end
 end
+
+# Local Variables:
+# ruby-after-operator-indent: t
+# ruby-block-indent: t
+# ruby-method-call-indent: t
+# ruby-method-params-indent: t
+# ruby-parenless-call-arguments-indent: t
+# End:
diff --git a/test/lisp/progmodes/ruby-mode-tests.el 
b/test/lisp/progmodes/ruby-mode-tests.el
index 9be01dc78f9..8a75c83d2c3 100644
--- a/test/lisp/progmodes/ruby-mode-tests.el
+++ b/test/lisp/progmodes/ruby-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; ruby-mode-tests.el --- Test suite for ruby-mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -537,9 +537,12 @@ VALUES-PLIST is a list with alternating index and value 
elements."
                           |    def foo
                           |    end
                           |    _
+                          |    def bar
+                          |    end
                           |  end
                           |end")
     (search-backward "_")
+    (delete-char 1)
     (should (string= (ruby-add-log-current-method)"M::C"))))
 
 (ert-deftest ruby-add-log-current-method-in-singleton-class ()
@@ -943,16 +946,24 @@ VALUES-PLIST is a list with alternating index and value 
elements."
                      "Blub#bye"
                      "Blub#hiding")))))
 
-(ert-deftest ruby--indent/converted-from-manual-test ()
-  :tags '(:expensive-test)
-  ;; Converted from manual test.
-  (let ((buf (find-file-noselect (ert-resource-file "ruby.rb"))))
-    (unwind-protect
-        (with-current-buffer buf
-          (let ((orig (buffer-string)))
-            (indent-region (point-min) (point-max))
-            (should (equal (buffer-string) orig))))
-      (kill-buffer buf))))
+(defmacro ruby-deftest-indent (file)
+  `(ert-deftest ,(intern (format "ruby-indent-test/%s" file)) ()
+     ;; :tags '(:expensive-test)
+     (let ((buf (find-file-noselect (ert-resource-file ,file))))
+       (unwind-protect
+           (with-current-buffer buf
+             (let ((orig (buffer-string)))
+               ;; Indent and check that we get the original text.
+               (indent-region (point-min) (point-max))
+               (should (equal (buffer-string) orig))))
+         (kill-buffer buf)))))
+
+(ruby-deftest-indent "ruby.rb")
+(ruby-deftest-indent "ruby-after-operator-indent.rb")
+(ruby-deftest-indent "ruby-block-indent.rb")
+(ruby-deftest-indent "ruby-method-call-indent.rb")
+(ruby-deftest-indent "ruby-method-params-indent.rb")
+(ruby-deftest-indent "ruby-parenless-call-arguments-indent.rb")
 
 (ert-deftest ruby--test-chained-indentation ()
   (with-temp-buffer
diff --git a/test/lisp/progmodes/ruby-ts-mode-tests.el 
b/test/lisp/progmodes/ruby-ts-mode-tests.el
new file mode 100644
index 00000000000..b2c990f8e56
--- /dev/null
+++ b/test/lisp/progmodes/ruby-ts-mode-tests.el
@@ -0,0 +1,257 @@
+;;; ruby-mode-tests.el --- Test suite for ruby-mode  -*- lexical-binding:t -*-
+
+;; Copyright (C) 2023 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/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'ert)
+(require 'ert-x)
+(require 'ruby-ts-mode)
+
+(defmacro ruby-ts-with-temp-buffer (contents &rest body)
+  (declare (indent 1) (debug t))
+  `(with-temp-buffer
+     (insert ,contents)
+     (ruby-ts-mode)
+     ,@body))
+
+(defun ruby-ts-should-indent-buffer (expected content)
+  "Assert that CONTENT turns into EXPECTED after the buffer is re-indented.
+
+The whitespace before and including \"|\" on each line is removed."
+  (ruby-ts-with-temp-buffer (ruby-ts-test-string content)
+    (indent-region (point-min) (point-max))
+    (should (string= (ruby-ts-test-string expected) (buffer-string)))))
+
+(defun ruby-ts-test-string (s &rest args)
+  (apply 'format (replace-regexp-in-string "^[ \t]*|" "" s) args))
+
+(ert-deftest ruby-ts-indent-simple ()
+  (skip-unless (treesit-ready-p 'ruby t))
+  (ruby-ts-should-indent-buffer
+   "if foo
+   |  bar
+   |end
+   |zot
+   |"
+   "if foo
+   |bar
+   |  end
+   |    zot
+   |"))
+
+(ert-deftest ruby-ts-align-to-stmt-keywords-t ()
+  (skip-unless (treesit-ready-p 'ruby t))
+  (let ((ruby-align-to-stmt-keywords t))
+    (ruby-ts-should-indent-buffer
+     "foo = if bar?
+     |  1
+     |else
+     |  2
+     |end
+     |
+     |foo || begin
+     |  bar
+     |end
+     |
+     |foo ||
+     |  begin
+     |    bar
+     |  end
+     |"
+     "foo = if bar?
+     |       1
+     |else
+     |  2
+     | end
+     |
+     | foo || begin
+     |    bar
+     |end
+     |
+     |  foo ||
+     | begin
+     |bar
+     |  end
+     |")
+    ))
+
+(ert-deftest ruby-ts-align-to-stmt-keywords-case ()
+  (skip-unless (treesit-ready-p 'ruby t))
+  (let ((ruby-align-to-stmt-keywords '(case)))
+    (ruby-ts-should-indent-buffer
+     "b = case a
+     |when 13
+     |  6
+     |else
+     |  42
+     |end"
+     "b = case a
+     |    when 13
+     |  6
+     |    else
+     |      42
+     |    end")))
+
+(ert-deftest ruby-ts-add-log-current-method-examples ()
+  (skip-unless (treesit-ready-p 'ruby t))
+  (let ((pairs '(("foo" . "#foo")
+                 ("C.foo" . ".foo")
+                 ("self.foo" . ".foo")
+                 ("<<" . "#<<"))))
+    (dolist (pair pairs)
+      (let ((name  (car pair))
+            (value (cdr pair)))
+        (ruby-ts-with-temp-buffer (ruby-ts-test-string
+                                   "module M
+                                   |  class C
+                                   |    def %s
+                                   |      _
+                                   |    end
+                                   |  end
+                                   |end"
+                                name)
+          (search-backward "_")
+          (forward-line)
+          (should (string= (ruby-ts-add-log-current-function)
+                           (format "M::C%s" value))))))))
+
+(ert-deftest ruby-ts-add-log-current-method-outside-of-method ()
+  (skip-unless (treesit-ready-p 'ruby t))
+  (ruby-ts-with-temp-buffer (ruby-ts-test-string
+                             "module M
+                             |  class C
+                             |    def foo
+                             |    end
+                             |    _
+                             |    def bar
+                             |    end
+                             |  end
+                             |end")
+    (search-backward "_")
+    (delete-char 1)
+    (should (string= (ruby-ts-add-log-current-function) "M::C"))))
+
+(ert-deftest ruby-ts-add-log-current-method-in-singleton-class ()
+  (skip-unless (treesit-ready-p 'ruby t))
+  (ruby-ts-with-temp-buffer (ruby-ts-test-string
+                             "class C
+                             |  class << self
+                             |    def foo
+                             |      _
+                             |    end
+                             |  end
+                             |end")
+    (search-backward "_")
+    (should (string= (ruby-ts-add-log-current-function) "C.foo"))))
+
+(ert-deftest ruby-ts-add-log-current-method-namespace-shorthand ()
+  (skip-unless (treesit-ready-p 'ruby t))
+  (ruby-ts-with-temp-buffer (ruby-ts-test-string
+                             "class C::D
+                             |  def foo
+                             |    _
+                             |  end
+                             |end")
+    (search-backward "_")
+    (should (string= (ruby-ts-add-log-current-function) "C::D#foo"))))
+
+(ert-deftest ruby-ts-add-log-current-method-after-inner-class ()
+  (skip-unless (treesit-ready-p 'ruby t))
+  (ruby-ts-with-temp-buffer (ruby-ts-test-string
+                             "module M
+                             |  class C
+                             |    class D
+                             |    end
+                             |    def foo
+                             |      _
+                             |    end
+                             |  end
+                             |end")
+    (search-backward "_")
+    (should (string= (ruby-ts-add-log-current-function) "M::C#foo"))))
+
+(ert-deftest ruby-ts-add-log-current-method-after-inner-class-outside-methods 
()
+  (skip-unless (treesit-ready-p 'ruby t))
+  (ruby-ts-with-temp-buffer (ruby-ts-test-string
+                             "module M
+                             |  class C
+                             |    class D
+                             |    end
+                             |
+                             |_
+                             |  end
+                             |end")
+    (search-backward "_")
+    (delete-char 1)
+    (should (string= (ruby-ts-add-log-current-function) "M::C"))))
+
+(ert-deftest 
ruby-ts-add-log-current-method-after-inner-class-outside-methods-with-text ()
+  (skip-unless (treesit-ready-p 'ruby t))
+  (ruby-ts-with-temp-buffer (ruby-ts-test-string
+                             "module M
+                             |  class C
+                             |    class D
+                             |    end
+                             |
+                             |    FOO = 5
+                             |  end
+                             |end")
+    (search-backward "FOO")
+    (should (string= (ruby-ts-add-log-current-function) "M::C"))))
+
+(ert-deftest ruby-ts-add-log-current-method-after-endless-method ()
+  (skip-unless (treesit-ready-p 'ruby t))
+  (ruby-ts-with-temp-buffer (ruby-ts-test-string
+                             "module M
+                             |  class C
+                             |    def foo =
+                             |      4_
+                             |  end
+                             |end")
+    (search-backward "_")
+    (delete-char 1)
+    (should (string= (ruby-ts-add-log-current-function) "M::C#foo"))))
+
+(defmacro ruby-ts-resource-file (file)
+  `(when-let ((testfile ,(or (macroexp-file-name)
+                             buffer-file-name)))
+     (let ((default-directory (file-name-directory testfile)))
+       (file-truename
+        (expand-file-name (format "ruby-mode-resources/%s" ,file))))))
+
+(defmacro ruby-ts-deftest-indent (file)
+  `(ert-deftest ,(intern (format "ruby-ts-indent-test/%s" file)) ()
+     ;; :tags '(:expensive-test)
+     (skip-unless (treesit-ready-p 'ruby t))
+     (let ((buf (find-file-noselect (ruby-ts-resource-file ,file))))
+       (unwind-protect
+           (with-current-buffer buf
+             (let ((orig (buffer-string)))
+               ;; Indent and check that we get the original text.
+               (indent-region (point-min) (point-max))
+               (should (equal (buffer-string) orig))))
+         (kill-buffer buf)))))
+
+(ruby-ts-deftest-indent "ruby-method-params-indent.rb")
+
+(provide 'ruby-ts-mode-tests)
+
+;;; ruby-ts-mode-tests.el ends here
diff --git a/test/lisp/progmodes/scheme-tests.el 
b/test/lisp/progmodes/scheme-tests.el
index b36e85c770d..ce41413e949 100644
--- a/test/lisp/progmodes/scheme-tests.el
+++ b/test/lisp/progmodes/scheme-tests.el
@@ -1,6 +1,6 @@
 ;;; scheme-tests.el --- Test suite for scheme.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/sh-script-tests.el 
b/test/lisp/progmodes/sh-script-tests.el
index 5d01cc1c226..c850a5d8af7 100644
--- a/test/lisp/progmodes/sh-script-tests.el
+++ b/test/lisp/progmodes/sh-script-tests.el
@@ -1,6 +1,6 @@
 ;;; sh-script-tests.el --- Tests for sh-script.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/sql-tests.el b/test/lisp/progmodes/sql-tests.el
index c644d115df6..b0a1f8b0519 100644
--- a/test/lisp/progmodes/sql-tests.el
+++ b/test/lisp/progmodes/sql-tests.el
@@ -1,6 +1,6 @@
 ;;; sql-tests.el --- Tests for sql.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/progmodes/subword-tests.el 
b/test/lisp/progmodes/subword-tests.el
index 7ce27e4df4f..278db9287ef 100644
--- a/test/lisp/progmodes/subword-tests.el
+++ b/test/lisp/progmodes/subword-tests.el
@@ -1,6 +1,6 @@
 ;;; subword-tests.el --- Testing the subword rules  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
diff --git a/test/lisp/progmodes/tcl-tests.el b/test/lisp/progmodes/tcl-tests.el
index d2346606c27..7d3a67d1610 100644
--- a/test/lisp/progmodes/tcl-tests.el
+++ b/test/lisp/progmodes/tcl-tests.el
@@ -1,6 +1,6 @@
 ;;; tcl-tests.el --- Test suite for tcl-mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/xref-tests.el 
b/test/lisp/progmodes/xref-tests.el
index f7af5055c78..e74f38cb616 100644
--- a/test/lisp/progmodes/xref-tests.el
+++ b/test/lisp/progmodes/xref-tests.el
@@ -1,6 +1,6 @@
 ;;; xref-tests.el --- tests for xref  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Dmitry Gutov <dgutov@yandex.ru>
 
diff --git a/test/lisp/ps-print-tests.el b/test/lisp/ps-print-tests.el
index 35aa1a9bd19..05a74ebf241 100644
--- a/test/lisp/ps-print-tests.el
+++ b/test/lisp/ps-print-tests.el
@@ -1,6 +1,6 @@
 ;;; ps-print-tests.el --- Test suite for ps-print.el  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Phillip Lord <phillip.lord@russet.org.uk>
 
diff --git a/test/lisp/register-tests.el b/test/lisp/register-tests.el
index 881a2f90e1e..6283d1c31e0 100644
--- a/test/lisp/register-tests.el
+++ b/test/lisp/register-tests.el
@@ -1,6 +1,6 @@
 ;;; register-tests.el --- tests for register.el  -*- lexical-binding: t-*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Tino Calancha <tino.calancha@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/repeat-tests.el b/test/lisp/repeat-tests.el
index 1382d003599..64a7ba2cde9 100644
--- a/test/lisp/repeat-tests.el
+++ b/test/lisp/repeat-tests.el
@@ -1,6 +1,6 @@
 ;;; repeat-tests.el --- Tests for repeat.el          -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <juri@linkov.net>
 
@@ -76,27 +76,27 @@
         "C-x w a b a c"
         '((1 a) (1 b) (1 a)) "c")
        (repeat-tests--check
-        "M-C-a b a c"
+        "C-M-a b a c"
         '((1 a) (1 b) (1 a)) "c")
        (repeat-tests--check
-        "M-C-z b a c"
+        "C-M-z b a c"
         '((1 a)) "bac")
        (unwind-protect
            (progn
              (put 'repeat-tests-call-a 'repeat-check-key 'no)
              (repeat-tests--check
-              "M-C-z b a c"
+              "C-M-z b a c"
               '((1 a) (1 b) (1 a)) "c"))
          (put 'repeat-tests-call-a 'repeat-check-key nil)))
      (let ((repeat-check-key nil))
        (repeat-tests--check
-        "M-C-z b a c"
+        "C-M-z b a c"
         '((1 a) (1 b) (1 a)) "c")
        (unwind-protect
            (progn
              (put 'repeat-tests-call-a 'repeat-check-key t)
              (repeat-tests--check
-              "M-C-z b a c"
+              "C-M-z b a c"
               '((1 a)) "bac"))
          (put 'repeat-tests-call-a 'repeat-check-key nil))))))
 
@@ -125,15 +125,17 @@
        (repeat-tests--check
         "C-2 C-x w a C-3 c"
         '((2 a)) "ccc"))
-     ;; TODO: fix and uncomment
-     ;; (let ((repeat-keep-prefix t))
-     ;;   (repeat-tests--check
-     ;;    "C-2 C-x w a b a b c"
-     ;;    '((2 a) (2 b) (2 a) (2 b)) "c")
-     ;;   (repeat-tests--check
-     ;;    "C-2 C-x w a C-1 C-2 b a C-3 C-4 b c"
-     ;;    '((2 a) (12 b) (12 a) (34 b)) "c"))
-     )))
+     ;; Fixed in bug#51281 and bug#55986
+     (let ((repeat-keep-prefix t))
+       ;; Re-enable to take effect.
+       (repeat-mode -1) (repeat-mode +1)
+       (repeat-tests--check
+        "C-2 C-x w a b a b c"
+        '((2 a) (2 b) (2 a) (2 b)) "c")
+       ;; (repeat-tests--check
+       ;;  "C-2 C-x w a C-1 C-2 b a C-3 C-4 b c"
+       ;;  '((2 a) (12 b) (12 a) (34 b)) "c")
+       ))))
 
 ;; TODO: :tags '(:expensive-test)  for repeat-exit-timeout
 
diff --git a/test/lisp/replace-tests.el b/test/lisp/replace-tests.el
index 23ec24840fb..899c3cb3c6c 100644
--- a/test/lisp/replace-tests.el
+++ b/test/lisp/replace-tests.el
@@ -1,6 +1,6 @@
 ;;; replace-tests.el --- tests for replace.el.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Richard <youngfrog@members.fsf.org>
 ;; Author: Juri Linkov <juri@jurta.org>
diff --git a/test/lisp/rot13-tests.el b/test/lisp/rot13-tests.el
index bbe95316660..788a80f368c 100644
--- a/test/lisp/rot13-tests.el
+++ b/test/lisp/rot13-tests.el
@@ -1,6 +1,6 @@
 ;;; rot13-tests.el --- Tests for rot13.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/saveplace-tests.el b/test/lisp/saveplace-tests.el
index 99318d295dd..3c0b14c8c03 100644
--- a/test/lisp/saveplace-tests.el
+++ b/test/lisp/saveplace-tests.el
@@ -1,6 +1,6 @@
 ;;; saveplace-tests.el --- Tests for saveplace.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/scroll-lock-tests.el b/test/lisp/scroll-lock-tests.el
index 2bad8e7d48f..b8d3d82bd5b 100644
--- a/test/lisp/scroll-lock-tests.el
+++ b/test/lisp/scroll-lock-tests.el
@@ -1,6 +1,6 @@
 ;;; scroll-lock-tests.el --- Test suite for scroll-lock -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/server-tests.el b/test/lisp/server-tests.el
index 5ef66052c80..ffafa74925f 100644
--- a/test/lisp/server-tests.el
+++ b/test/lisp/server-tests.el
@@ -1,6 +1,6 @@
 ;;; server-tests.el --- Emacs server test suite  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/ses-tests.el b/test/lisp/ses-tests.el
index ea3f9d05d70..a941605a4d8 100644
--- a/test/lisp/ses-tests.el
+++ b/test/lisp/ses-tests.el
@@ -1,6 +1,6 @@
 ;;; ses-tests.el --- Tests for ses.el              -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Vincent Belaïche <vincentb1@users.sourceforge.net>
 
diff --git a/test/lisp/shadowfile-tests.el b/test/lisp/shadowfile-tests.el
index 0916f7ce688..5edba039032 100644
--- a/test/lisp/shadowfile-tests.el
+++ b/test/lisp/shadowfile-tests.el
@@ -1,6 +1,6 @@
 ;;; shadowfile-tests.el --- Tests of shadowfile  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
diff --git a/test/lisp/shell-tests.el b/test/lisp/shell-tests.el
index f2cd2f6aead..db9124e2435 100644
--- a/test/lisp/shell-tests.el
+++ b/test/lisp/shell-tests.el
@@ -1,6 +1,6 @@
 ;;; shell-tests.el --- Tests for shell.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/simple-tests.el b/test/lisp/simple-tests.el
index 6e48f11fc02..28d8120f143 100644
--- a/test/lisp/simple-tests.el
+++ b/test/lisp/simple-tests.el
@@ -1,6 +1,6 @@
 ;;; simple-tests.el --- Tests for simple.el           -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
 
diff --git a/test/lisp/so-long-tests/autoload-longlines-mode-tests.el 
b/test/lisp/so-long-tests/autoload-longlines-mode-tests.el
index 11c018b36c4..f015103eecb 100644
--- a/test/lisp/so-long-tests/autoload-longlines-mode-tests.el
+++ b/test/lisp/so-long-tests/autoload-longlines-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; autoload-longlines-mode-tests.el --- Test suite for so-long.el  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Phil Sainty <psainty@orcon.net.nz>
 ;; Keywords: convenience
diff --git a/test/lisp/so-long-tests/autoload-major-mode-tests.el 
b/test/lisp/so-long-tests/autoload-major-mode-tests.el
index 2cde241d0b8..a3bed852f60 100644
--- a/test/lisp/so-long-tests/autoload-major-mode-tests.el
+++ b/test/lisp/so-long-tests/autoload-major-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; autoload-major-mode-tests.el --- Test suite for so-long.el  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Phil Sainty <psainty@orcon.net.nz>
 ;; Keywords: convenience
diff --git a/test/lisp/so-long-tests/autoload-minor-mode-tests.el 
b/test/lisp/so-long-tests/autoload-minor-mode-tests.el
index cf89cff558a..c4545c8dd0b 100644
--- a/test/lisp/so-long-tests/autoload-minor-mode-tests.el
+++ b/test/lisp/so-long-tests/autoload-minor-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; autoload-minor-mode-tests.el --- Test suite for so-long.el  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Phil Sainty <psainty@orcon.net.nz>
 ;; Keywords: convenience
diff --git a/test/lisp/so-long-tests/so-long-tests-helpers.el 
b/test/lisp/so-long-tests/so-long-tests-helpers.el
index 79df532f899..21f96602fbe 100644
--- a/test/lisp/so-long-tests/so-long-tests-helpers.el
+++ b/test/lisp/so-long-tests/so-long-tests-helpers.el
@@ -1,6 +1,6 @@
 ;;; so-long-tests-helpers.el --- Test suite for so-long.el  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Phil Sainty <psainty@orcon.net.nz>
 ;; Keywords: convenience
diff --git a/test/lisp/so-long-tests/so-long-tests.el 
b/test/lisp/so-long-tests/so-long-tests.el
index bf619f453d2..d725c07d881 100644
--- a/test/lisp/so-long-tests/so-long-tests.el
+++ b/test/lisp/so-long-tests/so-long-tests.el
@@ -1,6 +1,6 @@
 ;;; so-long-tests.el --- Test suite for so-long.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Phil Sainty <psainty@orcon.net.nz>
 ;; Keywords: convenience
diff --git a/test/lisp/so-long-tests/spelling-tests.el 
b/test/lisp/so-long-tests/spelling-tests.el
index 7bd06395535..5e5d1d34c71 100644
--- a/test/lisp/so-long-tests/spelling-tests.el
+++ b/test/lisp/so-long-tests/spelling-tests.el
@@ -1,6 +1,6 @@
 ;;; spelling-tests.el --- Test suite for so-long.el  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Phil Sainty <psainty@orcon.net.nz>
 ;; Keywords: convenience
diff --git a/test/lisp/sort-tests.el b/test/lisp/sort-tests.el
index d8d42452ec8..d8af5595a5e 100644
--- a/test/lisp/sort-tests.el
+++ b/test/lisp/sort-tests.el
@@ -1,6 +1,6 @@
 ;;; sort-tests.el --- Tests for sort.el              -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
 
diff --git a/test/lisp/soundex-tests.el b/test/lisp/soundex-tests.el
index 0ac0ddd666b..47d6394df03 100644
--- a/test/lisp/soundex-tests.el
+++ b/test/lisp/soundex-tests.el
@@ -1,6 +1,6 @@
 ;;; soundex-tests.el --- tests for soundex.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
diff --git a/test/lisp/startup-tests.el b/test/lisp/startup-tests.el
index 01ed3a69fd8..3e71d8ccec5 100644
--- a/test/lisp/startup-tests.el
+++ b/test/lisp/startup-tests.el
@@ -1,6 +1,6 @@
 ;;; startup-tests.el --- unit tests for startup.el   -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Philipp Stephani <phst@google.com>
 
diff --git a/test/lisp/subr-tests.el b/test/lisp/subr-tests.el
index e22d1c7be0e..1abd3be4ea1 100644
--- a/test/lisp/subr-tests.el
+++ b/test/lisp/subr-tests.el
@@ -1,6 +1,6 @@
 ;;; subr-tests.el --- Tests for subr.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Oleh Krehel <ohwoeowho@gmail.com>,
 ;;         Nicolas Petton <nicolas@petton.fr>
diff --git a/test/lisp/tab-bar-tests.el b/test/lisp/tab-bar-tests.el
index 6d57146cd02..543bb8717fe 100644
--- a/test/lisp/tab-bar-tests.el
+++ b/test/lisp/tab-bar-tests.el
@@ -1,6 +1,6 @@
 ;;; tab-bar-tests.el --- Tests for tab-bar.el          -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <juri@linkov.net>
 
diff --git a/test/lisp/tabify-tests.el b/test/lisp/tabify-tests.el
index 1c8940c30fe..5ff2f311296 100644
--- a/test/lisp/tabify-tests.el
+++ b/test/lisp/tabify-tests.el
@@ -1,6 +1,6 @@
 ;;; tabify-tests.el --- tests for tabify.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/tar-mode-tests.el b/test/lisp/tar-mode-tests.el
index 47c658eb9ad..919602ecef2 100644
--- a/test/lisp/tar-mode-tests.el
+++ b/test/lisp/tar-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; tar-mode-tests.el --- Test suite for tar-mode. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/tempo-tests.el b/test/lisp/tempo-tests.el
index 52553d791f2..89edccf4fa7 100644
--- a/test/lisp/tempo-tests.el
+++ b/test/lisp/tempo-tests.el
@@ -1,6 +1,6 @@
 ;;; tempo-tests.el --- Test suite for tempo.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Federico Tedin <federicotedin@gmail.com>
 ;; Keywords: abbrev
diff --git a/test/lisp/term-tests.el b/test/lisp/term-tests.el
index f60d2ff5747..ee2bb6574ae 100644
--- a/test/lisp/term-tests.el
+++ b/test/lisp/term-tests.el
@@ -1,6 +1,6 @@
 ;;; term-tests.el --- tests for term.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017, 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017, 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/term/tty-colors-tests.el 
b/test/lisp/term/tty-colors-tests.el
index e55b10511ee..934e635183c 100644
--- a/test/lisp/term/tty-colors-tests.el
+++ b/test/lisp/term/tty-colors-tests.el
@@ -1,6 +1,6 @@
 ;;; tty-colors-tests.el --- tests for tty-colors.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/textmodes/bibtex-tests.el 
b/test/lisp/textmodes/bibtex-tests.el
index 1bf15d17294..5e53cab3515 100644
--- a/test/lisp/textmodes/bibtex-tests.el
+++ b/test/lisp/textmodes/bibtex-tests.el
@@ -1,6 +1,6 @@
 ;;; bibtex-tests.el --- Test suite for bibtex.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Keywords: bibtex
 
diff --git a/test/lisp/textmodes/conf-mode-tests.el 
b/test/lisp/textmodes/conf-mode-tests.el
index 097b25f1144..5e21d2cfacb 100644
--- a/test/lisp/textmodes/conf-mode-tests.el
+++ b/test/lisp/textmodes/conf-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; conf-mode-tests.el --- Test suite for conf mode  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: J. Alexander Branham <alex.branham@gmail.com>
 ;; Keywords: internal
diff --git a/test/lisp/textmodes/css-mode-tests.el 
b/test/lisp/textmodes/css-mode-tests.el
index 1d2d556992b..9a5f4fcc92a 100644
--- a/test/lisp/textmodes/css-mode-tests.el
+++ b/test/lisp/textmodes/css-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; css-mode-tests.el --- Test suite for CSS mode  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords: internal
diff --git a/test/lisp/textmodes/dns-mode-tests.el 
b/test/lisp/textmodes/dns-mode-tests.el
index 40896cf2f38..f9c81b7f842 100644
--- a/test/lisp/textmodes/dns-mode-tests.el
+++ b/test/lisp/textmodes/dns-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; dns-mode-tests.el --- Test suite for dns-mode  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Peder O. Klingenberg <peder@klingenberg.no>
 ;; Keywords: dns zone
diff --git a/test/lisp/textmodes/emacs-news-mode-tests.el 
b/test/lisp/textmodes/emacs-news-mode-tests.el
index d2da5eda906..e1152265a45 100644
--- a/test/lisp/textmodes/emacs-news-mode-tests.el
+++ b/test/lisp/textmodes/emacs-news-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; emacs-news-mode-tests.el --- Tests for emacs-news-mode.el  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/textmodes/fill-tests.el 
b/test/lisp/textmodes/fill-tests.el
index f2a0daf8122..ef822ba805b 100644
--- a/test/lisp/textmodes/fill-tests.el
+++ b/test/lisp/textmodes/fill-tests.el
@@ -1,6 +1,6 @@
 ;;; fill-tests.el --- ERT tests for fill.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author:     Marcin Borkowski <mbork@mbork.pl>
 ;; Keywords:   text, wp
diff --git a/test/lisp/textmodes/mhtml-mode-tests.el 
b/test/lisp/textmodes/mhtml-mode-tests.el
index f09a768f985..ec48188fc11 100644
--- a/test/lisp/textmodes/mhtml-mode-tests.el
+++ b/test/lisp/textmodes/mhtml-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; mhtml-mode-tests.el --- Tests for mhtml-mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Keywords: tests
 
diff --git a/test/lisp/textmodes/page-tests.el 
b/test/lisp/textmodes/page-tests.el
index b7217e69f0c..4bfa8d9941c 100644
--- a/test/lisp/textmodes/page-tests.el
+++ b/test/lisp/textmodes/page-tests.el
@@ -1,6 +1,6 @@
 ;;; page-tests.el --- Tests for page.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/textmodes/paragraphs-tests.el 
b/test/lisp/textmodes/paragraphs-tests.el
index e54b459b20e..81e88113c2a 100644
--- a/test/lisp/textmodes/paragraphs-tests.el
+++ b/test/lisp/textmodes/paragraphs-tests.el
@@ -1,6 +1,6 @@
 ;;; paragraphs-tests.el --- Tests for paragraphs.el  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/textmodes/po-tests.el b/test/lisp/textmodes/po-tests.el
index 982d3404ff8..2bfb0dd5330 100644
--- a/test/lisp/textmodes/po-tests.el
+++ b/test/lisp/textmodes/po-tests.el
@@ -1,6 +1,6 @@
 ;;; po-tests.el --- Tests for po.el                  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/textmodes/reftex-tests.el 
b/test/lisp/textmodes/reftex-tests.el
index 67e01004755..5a137ba8a67 100644
--- a/test/lisp/textmodes/reftex-tests.el
+++ b/test/lisp/textmodes/reftex-tests.el
@@ -1,6 +1,6 @@
 ;;; reftex-tests.el --- Test suite for reftex. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Rüdiger Sonderfeld <ruediger@c-plusplus.de>
 ;; Keywords:       internal
diff --git a/test/lisp/textmodes/sgml-mode-tests.el 
b/test/lisp/textmodes/sgml-mode-tests.el
index d08851eb41c..57467483bfe 100644
--- a/test/lisp/textmodes/sgml-mode-tests.el
+++ b/test/lisp/textmodes/sgml-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; sgml-mode-tests.el --- Tests for sgml-mode  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Przemysław Wojnowski <esperanto@cumego.com>
 ;; Keywords: tests
diff --git a/test/lisp/textmodes/texinfo-tests.el 
b/test/lisp/textmodes/texinfo-tests.el
index 48cc5fece2c..37a461167e9 100644
--- a/test/lisp/textmodes/texinfo-tests.el
+++ b/test/lisp/textmodes/texinfo-tests.el
@@ -1,6 +1,6 @@
 ;;; texinfo-tests.el --- Tests for texinfo.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/textmodes/tildify-tests.el 
b/test/lisp/textmodes/tildify-tests.el
index a663bc29962..962aeb4747c 100644
--- a/test/lisp/textmodes/tildify-tests.el
+++ b/test/lisp/textmodes/tildify-tests.el
@@ -1,6 +1,6 @@
 ;;; tildify-tests.el --- ERT tests for tildify.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author:     Michal Nazarewicz <mina86@mina86.com>
 ;; Version:    4.5
diff --git a/test/lisp/textmodes/underline-tests.el 
b/test/lisp/textmodes/underline-tests.el
index acc72a78a0f..d0f899f8f5c 100644
--- a/test/lisp/textmodes/underline-tests.el
+++ b/test/lisp/textmodes/underline-tests.el
@@ -1,6 +1,6 @@
 ;;; underline-tests.el --- Tests for underline.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/thingatpt-tests.el b/test/lisp/thingatpt-tests.el
index 67dd00104b0..0daf27f32ec 100644
--- a/test/lisp/thingatpt-tests.el
+++ b/test/lisp/thingatpt-tests.el
@@ -1,6 +1,6 @@
 ;;; thingatpt-tests.el --- tests for thing-at-point.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/thread-tests.el b/test/lisp/thread-tests.el
index 108fa8cb983..4ba7b99719c 100644
--- a/test/lisp/thread-tests.el
+++ b/test/lisp/thread-tests.el
@@ -1,6 +1,6 @@
 ;;; thread-tests.el --- Test suite for thread.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Gemini Lasswell <gazally@runbox.com>
 ;; Keywords: threads
diff --git a/test/lisp/time-stamp-tests.el b/test/lisp/time-stamp-tests.el
index 1b5ef04436d..341c40b617b 100644
--- a/test/lisp/time-stamp-tests.el
+++ b/test/lisp/time-stamp-tests.el
@@ -1,6 +1,6 @@
 ;;; time-stamp-tests.el --- tests for time-stamp.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/time-tests.el b/test/lisp/time-tests.el
index a95871eb56b..359f3ea3313 100644
--- a/test/lisp/time-tests.el
+++ b/test/lisp/time-tests.el
@@ -1,6 +1,6 @@
 ;;; time-tests.el --- Tests for time.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/timezone-tests.el b/test/lisp/timezone-tests.el
index a87f2623767..5f8896656cc 100644
--- a/test/lisp/timezone-tests.el
+++ b/test/lisp/timezone-tests.el
@@ -1,6 +1,6 @@
 ;;; timezone-tests.el --- Tests for timezone.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/url/url-auth-tests.el b/test/lisp/url/url-auth-tests.el
index fa6ecdce390..5527d3a3bfc 100644
--- a/test/lisp/url/url-auth-tests.el
+++ b/test/lisp/url/url-auth-tests.el
@@ -1,6 +1,6 @@
 ;;; url-auth-tests.el --- Test suite for url-auth.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Jarno Malmari <jarno@malmari.fi>
 
diff --git a/test/lisp/url/url-domsuf-tests.el 
b/test/lisp/url/url-domsuf-tests.el
index 33962846820..09fd6240065 100644
--- a/test/lisp/url/url-domsuf-tests.el
+++ b/test/lisp/url/url-domsuf-tests.el
@@ -1,6 +1,6 @@
 ;;; url-domsuf-tests.el --- Tests for url-domsuf.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/url/url-expand-tests.el 
b/test/lisp/url/url-expand-tests.el
index a9695c6a192..651bd690811 100644
--- a/test/lisp/url/url-expand-tests.el
+++ b/test/lisp/url/url-expand-tests.el
@@ -1,6 +1,6 @@
 ;;; url-expand-tests.el --- Test suite for relative URI/URL resolution.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Alain Schneble <a.s@realize.ch>
 ;; Version: 1.0
diff --git a/test/lisp/url/url-file-tests.el b/test/lisp/url/url-file-tests.el
index 9fe3cb38ebb..4c3bcc9163e 100644
--- a/test/lisp/url/url-file-tests.el
+++ b/test/lisp/url/url-file-tests.el
@@ -1,6 +1,6 @@
 ;;; url-file-tests.el --- Test suite for url-file. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/url/url-future-tests.el 
b/test/lisp/url/url-future-tests.el
index ec1796f7670..18e6e31c8ce 100644
--- a/test/lisp/url/url-future-tests.el
+++ b/test/lisp/url/url-future-tests.el
@@ -1,6 +1,6 @@
 ;;; url-future-tests.el --- Test suite for url-future.  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <tzz@lifelogs.com>
 ;; Keywords: data
diff --git a/test/lisp/url/url-handlers-tests.el 
b/test/lisp/url/url-handlers-tests.el
index f43e9651f5e..68afee4ce93 100644
--- a/test/lisp/url/url-handlers-tests.el
+++ b/test/lisp/url/url-handlers-tests.el
@@ -1,6 +1,6 @@
 ;;; url-handlers-tests.el --- Test suite for url-handlers.el  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Petton <nicolas@petton.fr>
 
diff --git a/test/lisp/url/url-misc-tests.el b/test/lisp/url/url-misc-tests.el
index df561eb8887..8d2e20f11d0 100644
--- a/test/lisp/url/url-misc-tests.el
+++ b/test/lisp/url/url-misc-tests.el
@@ -1,6 +1,6 @@
 ;;; url-misc-tests.el --- Test suite for url-misc. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/url/url-parse-tests.el b/test/lisp/url/url-parse-tests.el
index c115da1e4ba..cf75738d00a 100644
--- a/test/lisp/url/url-parse-tests.el
+++ b/test/lisp/url/url-parse-tests.el
@@ -1,6 +1,6 @@
 ;;; url-parse-tests.el --- Test suite for URI/URL parsing.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Alain Schneble <a.s@realize.ch>
 ;; Version: 1.0
diff --git a/test/lisp/url/url-tramp-tests.el b/test/lisp/url/url-tramp-tests.el
index 369de0e2457..b31913c8371 100644
--- a/test/lisp/url/url-tramp-tests.el
+++ b/test/lisp/url/url-tramp-tests.el
@@ -1,6 +1,6 @@
 ;;; url-tramp-tests.el --- Test suite for Tramp / URL conversion.  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
diff --git a/test/lisp/url/url-util-tests.el b/test/lisp/url/url-util-tests.el
index cfc2d93c890..092a25ebfff 100644
--- a/test/lisp/url/url-util-tests.el
+++ b/test/lisp/url/url-util-tests.el
@@ -1,6 +1,6 @@
 ;;; url-util-tests.el --- Test suite for url-util.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <tzz@lifelogs.com>
 ;; Keywords: data
diff --git a/test/lisp/use-package/use-package-tests.el 
b/test/lisp/use-package/use-package-tests.el
index e4586b04f27..6374a0d1037 100644
--- a/test/lisp/use-package/use-package-tests.el
+++ b/test/lisp/use-package/use-package-tests.el
@@ -1,6 +1,6 @@
 ;;; use-package-tests.el --- Tests for use-package.el  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/vc/add-log-tests.el b/test/lisp/vc/add-log-tests.el
index bb6841b6453..07da65c74f6 100644
--- a/test/lisp/vc/add-log-tests.el
+++ b/test/lisp/vc/add-log-tests.el
@@ -1,6 +1,6 @@
 ;;; add-log-tests.el --- Test suite for add-log.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Masatake YAMATO <yamato@redhat.com>
 ;; Keywords: vc tools
diff --git a/test/lisp/vc/diff-mode-tests.el b/test/lisp/vc/diff-mode-tests.el
index 19e3dbb42a6..8033dc9cbbd 100644
--- a/test/lisp/vc/diff-mode-tests.el
+++ b/test/lisp/vc/diff-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; diff-mode-tests.el --- Tests for diff-mode.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Dima Kogan <dima@secretsauce.net>
 ;; Maintainer: emacs-devel@gnu.org
@@ -478,5 +478,84 @@ baz"))))
     (should (equal (diff-hunk-file-names)
                    '("/tmp/ange-ftp1351895K.el" "/tmp/ange-ftp13518wvE.el")))))
 
+(ert-deftest diff-mode-test-fixups-added-lines ()
+  "Check that `diff-fixup-modifs' works well with hunks with added lines."
+  (let ((patch "--- file
++++ file
+@@ -0,0 +1,15 @@
++1
++2
++3
++4
+"))
+    (with-temp-buffer
+      (insert patch)
+      (diff-fixup-modifs (point-min) (point-max))
+      (should (equal (buffer-string) "--- file
++++ file
+@@ -0,0 +1,4 @@
++1
++2
++3
++4
+"))))
+  (let ((patch "--- file
++++ file
+@@ -389,5 +398,6 @@
+        while (1)
+                ;
++       # not needed
+        # at all
+        # stop
+"))
+    (with-temp-buffer
+      (insert patch)
+      (diff-fixup-modifs (point-min) (point-max))
+      (should (equal (buffer-string) "--- file
++++ file
+@@ -389,4 +398,5 @@
+        while (1)
+                ;
++       # not needed
+        # at all
+        # stop
+")))))
+
+(ert-deftest diff-mode-test-fixups-empty-hunks ()
+  "Check that `diff-fixup-modifs' works well with empty hunks."
+  (let ((patch "--- file
++++ file
+@@ -1 +1 @@
+-1
+@@ -10 +10 @@
+-1
++1
+--- otherfile
++++ otherfile
+@@ -1 +1 @@
++2
+@@ -10 +10 @@
+-1
++1
+"))
+    (with-temp-buffer
+      (insert patch)
+      (diff-fixup-modifs (point-min) (point-max))
+      (should (equal (buffer-string) "--- file
++++ file
+@@ -1,1 +1,0 @@
+-1
+@@ -10,1 +10,1 @@
+-1
++1
+--- otherfile
++++ otherfile
+@@ -1,0 +1,1 @@
++2
+@@ -10,1 +10,1 @@
+-1
++1
+")))))
+
 (provide 'diff-mode-tests)
 ;;; diff-mode-tests.el ends here
diff --git a/test/lisp/vc/ediff-diff-tests.el b/test/lisp/vc/ediff-diff-tests.el
index b0ceb4792c3..b250148da8d 100644
--- a/test/lisp/vc/ediff-diff-tests.el
+++ b/test/lisp/vc/ediff-diff-tests.el
@@ -1,6 +1,6 @@
 ;;; ediff-diff-tests.el --- Unit tests for ediff-diff.el  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Philipp Stephani <phst@google.com>
 
diff --git a/test/lisp/vc/ediff-ptch-tests.el b/test/lisp/vc/ediff-ptch-tests.el
index 935046198f3..74701ee1802 100644
--- a/test/lisp/vc/ediff-ptch-tests.el
+++ b/test/lisp/vc/ediff-ptch-tests.el
@@ -1,6 +1,6 @@
 ;;; ediff-ptch-tests.el --- Tests for ediff-ptch.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Tino Calancha <tino.calancha@gmail.com>
 
diff --git a/test/lisp/vc/log-edit-tests.el b/test/lisp/vc/log-edit-tests.el
index e1fe8fcf1c8..237b743aa24 100644
--- a/test/lisp/vc/log-edit-tests.el
+++ b/test/lisp/vc/log-edit-tests.el
@@ -1,6 +1,6 @@
 ;;; log-edit-tests.el --- Unit tests for log-edit.el  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/vc/smerge-mode-tests.el 
b/test/lisp/vc/smerge-mode-tests.el
index 713df4c6e76..a7d41607bc5 100644
--- a/test/lisp/vc/smerge-mode-tests.el
+++ b/test/lisp/vc/smerge-mode-tests.el
@@ -1,6 +1,6 @@
 ;;; smerge-mode-tests.el --- Tests for smerge-mode.el  -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
diff --git a/test/lisp/vc/vc-bzr-tests.el b/test/lisp/vc/vc-bzr-tests.el
index 52f06df5bcd..d8ed1013c38 100644
--- a/test/lisp/vc/vc-bzr-tests.el
+++ b/test/lisp/vc/vc-bzr-tests.el
@@ -1,6 +1,6 @@
 ;;; vc-bzr-tests.el --- tests for vc/vc-bzr.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Glenn Morris <rgm@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/test/lisp/vc/vc-git-tests.el b/test/lisp/vc/vc-git-tests.el
index dc9641ed46b..f12c5d3434b 100644
--- a/test/lisp/vc/vc-git-tests.el
+++ b/test/lisp/vc/vc-git-tests.el
@@ -1,6 +1,6 @@
 ;;; vc-git-tests.el --- tests for vc/vc-git.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Justin Schell <justinmschell@gmail.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/test/lisp/vc/vc-hg-tests.el b/test/lisp/vc/vc-hg-tests.el
index 2cceceb2c80..89d518b2a91 100644
--- a/test/lisp/vc/vc-hg-tests.el
+++ b/test/lisp/vc/vc-hg-tests.el
@@ -1,6 +1,6 @@
 ;;; vc-hg-tests.el --- tests for vc/vc-hg.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Dmitry Gutov <dgutov@yandex.ru>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/test/lisp/vc/vc-tests.el b/test/lisp/vc/vc-tests.el
index c54fe144b7d..11c20d2783c 100644
--- a/test/lisp/vc/vc-tests.el
+++ b/test/lisp/vc/vc-tests.el
@@ -1,6 +1,6 @@
 ;;; vc-tests.el --- Tests of different backends of vc.el  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
diff --git a/test/lisp/version-tests.el b/test/lisp/version-tests.el
index 25dcc3d30cb..95ecf9600b5 100644
--- a/test/lisp/version-tests.el
+++ b/test/lisp/version-tests.el
@@ -1,6 +1,6 @@
 ;;; version-tests.el --- Tests for version.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/wdired-tests.el b/test/lisp/wdired-tests.el
index 58caa1deda8..74c2449076f 100644
--- a/test/lisp/wdired-tests.el
+++ b/test/lisp/wdired-tests.el
@@ -1,6 +1,6 @@
 ;;; wdired-tests.el --- tests for wdired.el          -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/whitespace-tests.el b/test/lisp/whitespace-tests.el
index fb53543c9e1..f059104cdb9 100644
--- a/test/lisp/whitespace-tests.el
+++ b/test/lisp/whitespace-tests.el
@@ -1,6 +1,6 @@
 ;;; whitespace-tests.el --- Test suite for whitespace -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -57,6 +57,24 @@ buffer's content."
     (whitespace-cleanup)
     (buffer-string)))
 
+(ert-deftest whitespace-tests--global ()
+  (let ((backup global-whitespace-mode)
+        (noninteractive nil)
+        (whitespace-enable-predicate (lambda () t)))
+    (unwind-protect
+        (progn
+          (global-whitespace-mode 1)
+          (ert-with-test-buffer-selected ()
+            (normal-mode)
+            (should whitespace-mode)
+            (global-whitespace-mode -1)
+            (should (null whitespace-mode))
+            (whitespace-mode 1)
+            (should whitespace-mode)
+            (global-whitespace-mode 1)
+            (should whitespace-mode)))
+      (global-whitespace-mode (if backup 1 -1)))))
+
 (ert-deftest whitespace-cleanup-eob ()
   (let ((whitespace-style '(empty)))
     (should (equal (whitespace-tests--cleanup-string "a\n")
@@ -327,6 +345,84 @@ buffer's content."
                                         "«:whitespace-empty:\n"
                                         "»")))))
 
+(ert-deftest whitespace-tests--empty-bob-eob-modified ()
+  "Regression test for Bug#60066."
+  (whitespace-tests--with-test-buffer '()
+    (insert "\nx\n\n")
+    (goto-char 2)
+    (set-buffer-modified-p nil)
+    (let ((whitespace-style '(face empty)))
+      (whitespace-mode 1)
+      (should (not (buffer-modified-p))))))
+
+(ert-deftest whitespace-tests--indirect-clone-breaks-base-markers ()
+  "Specific regression test for Bug#59618."
+  (whitespace-tests--with-test-buffer '(face empty)
+    (insert "\nx\n\n")
+    (let ((base (current-buffer))
+          ;; `unwind-protect' is not used to clean up `indirect'
+          ;; because the buffer should only be killed on success.
+          (indirect (clone-indirect-buffer (buffer-name) nil)))
+      (should (eq (marker-buffer whitespace-bob-marker) base))
+      (should (eq (marker-buffer whitespace-eob-marker) base))
+      (ert-with-buffer-selected indirect
+        ;; Mutate the indirect buffer to update its bob/eob markers.
+        (execute-kbd-macro (kbd "z RET M-< a")))
+      ;; With Bug#59618, the above mutation would cause the base
+      ;; buffer's markers to point inside the indirect buffer because
+      ;; the indirect buffer erroneously shared marker objects with
+      ;; the base buffer.  Killing the indirect buffer would then
+      ;; invalidate those markers (make them point nowhere).
+      (kill-buffer indirect)
+      (should (eq (marker-buffer whitespace-bob-marker) base))
+      (should (eq (marker-buffer whitespace-eob-marker) base)))))
+
+(defun whitespace-tests--check-markers (buf bpos epos)
+  (with-current-buffer buf
+    (should (eq (marker-buffer whitespace-bob-marker) buf))
+    (should (eq (marker-position whitespace-bob-marker) bpos))
+    (should (eq (marker-buffer whitespace-eob-marker) buf))
+    (should (eq (marker-position whitespace-eob-marker) epos))))
+
+(ert-deftest whitespace-tests--indirect-clone-markers ()
+  "Test `whitespace--clone' on indirect clones."
+  (whitespace-tests--with-test-buffer '(face empty)
+    (insert "\nx\n\n")
+    (let ((base (current-buffer))
+          ;; `unwind-protect' is not used to clean up `indirect'
+          ;; because the buffer should only be killed on success.
+          (indirect (clone-indirect-buffer nil nil)))
+      (whitespace-tests--check-markers base 2 4)
+      (ert-with-buffer-selected indirect
+        (whitespace-tests--check-markers indirect 2 4)
+        ;; Mutate the buffer to trigger `after-change-functions' and
+        ;; thus `whitespace--update-bob-eob'.
+        (execute-kbd-macro (kbd "z RET M-< a"))
+        (whitespace-tests--check-markers indirect 1 8))
+      (kill-buffer indirect)
+      ;; When the buffer was modified above, the new "a" character at
+      ;; the beginning moved the base buffer's markers by one.  Emacs
+      ;; did not run the base buffer's `after-change-functions' after
+      ;; the indirect buffer was edited (Bug#46982), so the end result
+      ;; is just the shift by one.
+      (whitespace-tests--check-markers base 3 5))))
+
+(ert-deftest whitespace-tests--regular-clone-markers ()
+  "Test `whitespace--clone' on regular clones."
+  (whitespace-tests--with-test-buffer '(face empty)
+    (insert "\nx\n\n")
+    (let ((orig (current-buffer))
+          ;; `unwind-protect' is not used to clean up `clone' because
+          ;; the buffer should only be killed on success.
+          (clone (clone-buffer)))
+      (whitespace-tests--check-markers orig 2 4)
+      (ert-with-buffer-selected clone
+        (whitespace-tests--check-markers clone 2 4)
+        (execute-kbd-macro (kbd "z RET M-< a"))
+        (whitespace-tests--check-markers clone 1 8))
+      (kill-buffer clone)
+      (whitespace-tests--check-markers orig 2 4))))
+
 (provide 'whitespace-tests)
 
 ;;; whitespace-tests.el ends here
diff --git a/test/lisp/wid-edit-tests.el b/test/lisp/wid-edit-tests.el
index 34c96f1c934..3f5fcea0c33 100644
--- a/test/lisp/wid-edit-tests.el
+++ b/test/lisp/wid-edit-tests.el
@@ -1,6 +1,6 @@
 ;;; wid-edit-tests.el --- tests for wid-edit.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/x-dnd-tests.el b/test/lisp/x-dnd-tests.el
index 55994e9b724..2ed4c3e7662 100644
--- a/test/lisp/x-dnd-tests.el
+++ b/test/lisp/x-dnd-tests.el
@@ -1,6 +1,6 @@
 ;;; dnd-tests.el --- Tests for X DND support -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/xdg-tests.el b/test/lisp/xdg-tests.el
index 882160743a2..962f26cd975 100644
--- a/test/lisp/xdg-tests.el
+++ b/test/lisp/xdg-tests.el
@@ -1,6 +1,6 @@
 ;;; xdg-tests.el --- tests for xdg.el -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Author: Mark Oteiza <mvoteiza@udel.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/test/lisp/xml-tests.el b/test/lisp/xml-tests.el
index 0040e5c7bab..8d419765fe6 100644
--- a/test/lisp/xml-tests.el
+++ b/test/lisp/xml-tests.el
@@ -1,6 +1,6 @@
 ;;; xml-tests.el --- Test suite for XML parsing.  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <cyd@stupidchicken.com>
 ;; Keywords:       internal
diff --git a/test/lisp/xt-mouse-tests.el b/test/lisp/xt-mouse-tests.el
index 379ad7bf039..19719c75fc3 100644
--- a/test/lisp/xt-mouse-tests.el
+++ b/test/lisp/xt-mouse-tests.el
@@ -1,6 +1,6 @@
 ;;; xt-mouse-tests.el --- Test suite for xt-mouse.  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Philipp Stephani <phst@google.com>
 
diff --git a/test/lisp/yank-media-tests.el b/test/lisp/yank-media-tests.el
index 4487ae150da..2ce879c418f 100644
--- a/test/lisp/yank-media-tests.el
+++ b/test/lisp/yank-media-tests.el
@@ -1,6 +1,6 @@
 ;;; yank-media-tests.el --- Tests for yank-media.el  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/manual/biditest.el b/test/manual/biditest.el
index d7fa359bf8d..aefd322dede 100644
--- a/test/manual/biditest.el
+++ b/test/manual/biditest.el
@@ -1,6 +1,6 @@
 ;;; biditest.el --- test bidi reordering in GNU Emacs display engine.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Eli Zaretskii
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/test/manual/cedet/cedet-utests.el 
b/test/manual/cedet/cedet-utests.el
index 2c5ba46855d..336e417c44f 100644
--- a/test/manual/cedet/cedet-utests.el
+++ b/test/manual/cedet/cedet-utests.el
@@ -1,6 +1,6 @@
 ;;; cedet-utests.el --- Run all unit tests in the CEDET suite.  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/manual/cedet/ede-tests.el b/test/manual/cedet/ede-tests.el
index c23e0984816..89407108e58 100644
--- a/test/manual/cedet/ede-tests.el
+++ b/test/manual/cedet/ede-tests.el
@@ -1,6 +1,6 @@
 ;;; ede-tests.el --- Some tests for the Emacs Development Environment  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/manual/cedet/semantic-tests.el 
b/test/manual/cedet/semantic-tests.el
index 1d0e668d96f..5eca5fb5c62 100644
--- a/test/manual/cedet/semantic-tests.el
+++ b/test/manual/cedet/semantic-tests.el
@@ -1,6 +1,6 @@
 ;;; semantic-tests.el --- Miscellaneous Semantic tests.  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/manual/cedet/tests/test.c b/test/manual/cedet/tests/test.c
index 6efaa8a75eb..cddbd85b45b 100644
--- a/test/manual/cedet/tests/test.c
+++ b/test/manual/cedet/tests/test.c
@@ -1,6 +1,6 @@
 /* test.c --- Semantic unit test for C.
 
-   Copyright (C) 2001-2022 Free Software Foundation, Inc.
+   Copyright (C) 2001-2023 Free Software Foundation, Inc.
 
    Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/manual/cedet/tests/test.el b/test/manual/cedet/tests/test.el
index a523438f68f..c75ea331223 100644
--- a/test/manual/cedet/tests/test.el
+++ b/test/manual/cedet/tests/test.el
@@ -1,6 +1,6 @@
 ;;; test.el --- Unit test file for Semantic Emacs Lisp support.  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/manual/cedet/tests/test.make 
b/test/manual/cedet/tests/test.make
index 80c0c8051c4..fc171214420 100644
--- a/test/manual/cedet/tests/test.make
+++ b/test/manual/cedet/tests/test.make
@@ -1,6 +1,6 @@
 # test.make --- Semantic unit test for Make -*- makefile -*-
 
-# Copyright (C) 2001-2002, 2010-2022 Free Software Foundation, Inc.
+# Copyright (C) 2001-2002, 2010-2023 Free Software Foundation, Inc.
 
 # Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/manual/cedet/tests/testpolymorph.cpp 
b/test/manual/cedet/tests/testpolymorph.cpp
index cfe44ecc4d3..0cf645c2f43 100644
--- a/test/manual/cedet/tests/testpolymorph.cpp
+++ b/test/manual/cedet/tests/testpolymorph.cpp
@@ -1,6 +1,6 @@
 /** testpolymorph.cpp --- A sequence of polymorphism examples.
  *
- * Copyright (C) 2009-2022 Free Software Foundation, Inc.
+ * Copyright (C) 2009-2023 Free Software Foundation, Inc.
  *
  * Author: Eric M. Ludlam <zappo@gnu.org>
  *
diff --git a/test/manual/cedet/tests/testspp.c 
b/test/manual/cedet/tests/testspp.c
index 74b336172cd..a439cee2a7d 100644
--- a/test/manual/cedet/tests/testspp.c
+++ b/test/manual/cedet/tests/testspp.c
@@ -1,6 +1,6 @@
 /* testspp.cpp --- Semantic unit test for the C preprocessor
 
-   Copyright (C) 2007-2022 Free Software Foundation, Inc.
+   Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
    Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/manual/cedet/tests/testsppreplace.c 
b/test/manual/cedet/tests/testsppreplace.c
index d255c202d35..2c913934bea 100644
--- a/test/manual/cedet/tests/testsppreplace.c
+++ b/test/manual/cedet/tests/testsppreplace.c
@@ -1,5 +1,5 @@
 /* testsppreplace.c --- unit test for CPP/SPP Replacement
-   Copyright (C) 2007-2022 Free Software Foundation, Inc.
+   Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
    Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/manual/cedet/tests/testsppreplaced.c 
b/test/manual/cedet/tests/testsppreplaced.c
index c98349174e5..f0f78ca8dd2 100644
--- a/test/manual/cedet/tests/testsppreplaced.c
+++ b/test/manual/cedet/tests/testsppreplaced.c
@@ -1,5 +1,5 @@
 /* testsppreplaced.c --- unit test for CPP/SPP Replacement
-   Copyright (C) 2007-2022 Free Software Foundation, Inc.
+   Copyright (C) 2007-2023 Free Software Foundation, Inc.
 
    Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/manual/etags/c-src/abbrev.c b/test/manual/etags/c-src/abbrev.c
index 301ca4e9d81..acd5884886c 100644
--- a/test/manual/etags/c-src/abbrev.c
+++ b/test/manual/etags/c-src/abbrev.c
@@ -1,5 +1,5 @@
 /* Primitives for word-abbrev mode.
-   Copyright (C) 1985-1986, 1993, 1996, 1998, 2016-2022 Free Software
+   Copyright (C) 1985-1986, 1993, 1996, 1998, 2016-2023 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/test/manual/etags/c-src/emacs/src/gmalloc.c 
b/test/manual/etags/c-src/emacs/src/gmalloc.c
index 0a28d0c6d37..cf3ad6ee766 100644
--- a/test/manual/etags/c-src/emacs/src/gmalloc.c
+++ b/test/manual/etags/c-src/emacs/src/gmalloc.c
@@ -1,5 +1,5 @@
 /* Declarations for `malloc' and friends.
-   Copyright (C) 1990-1993, 1995-1996, 1999, 2002-2007, 2013-2022 Free
+   Copyright (C) 1990-1993, 1995-1996, 1999, 2002-2007, 2013-2023 Free
    Software Foundation, Inc.
                  Written May 1989 by Mike Haertel.
 
diff --git a/test/manual/etags/c-src/emacs/src/keyboard.c 
b/test/manual/etags/c-src/emacs/src/keyboard.c
index 506bf0d01c4..310dba27c89 100644
--- a/test/manual/etags/c-src/emacs/src/keyboard.c
+++ b/test/manual/etags/c-src/emacs/src/keyboard.c
@@ -1,6 +1,6 @@
 /* Keyboard and mouse input; editor command loop.
 
-Copyright (C) 1985-1989, 1993-1997, 1999-2022 Free Software Foundation,
+Copyright (C) 1985-1989, 1993-1997, 1999-2023 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
diff --git a/test/manual/etags/c-src/emacs/src/lisp.h 
b/test/manual/etags/c-src/emacs/src/lisp.h
index 1fe50f5f93f..aa8dc8c9a66 100644
--- a/test/manual/etags/c-src/emacs/src/lisp.h
+++ b/test/manual/etags/c-src/emacs/src/lisp.h
@@ -1,6 +1,6 @@
 /* Fundamental definitions for GNU Emacs Lisp interpreter.
 
-Copyright (C) 1985-1987, 1993-1995, 1997-2022 Free Software Foundation,
+Copyright (C) 1985-1987, 1993-1995, 1997-2023 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
diff --git a/test/manual/etags/c-src/emacs/src/regex.h 
b/test/manual/etags/c-src/emacs/src/regex.h
index f51e4fc594b..b31fa9982d9 100644
--- a/test/manual/etags/c-src/emacs/src/regex.h
+++ b/test/manual/etags/c-src/emacs/src/regex.h
@@ -1,7 +1,7 @@
 /* Definitions for data structures and routines for the regular
    expression library, version 0.12.
 
-   Copyright (C) 1985, 1989-1993, 1995, 2000-2022 Free Software
+   Copyright (C) 1985, 1989-1993, 1995, 2000-2023 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
diff --git a/test/manual/etags/c-src/etags.c b/test/manual/etags/c-src/etags.c
index efa269d81cf..bd09e75a5d0 100644
--- a/test/manual/etags/c-src/etags.c
+++ b/test/manual/etags/c-src/etags.c
@@ -28,7 +28,7 @@ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
SOFTWARE, EVEN
 IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2022 Free Software
+Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2023 Free Software
 Foundation, Inc.
 
 This file is not considered part of GNU Emacs.
diff --git a/test/manual/etags/c-src/exit.c b/test/manual/etags/c-src/exit.c
index c655b257c9b..8101562c985 100644
--- a/test/manual/etags/c-src/exit.c
+++ b/test/manual/etags/c-src/exit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 2016-2022 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 2016-2023 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
diff --git a/test/manual/etags/c-src/exit.strange_suffix 
b/test/manual/etags/c-src/exit.strange_suffix
index c655b257c9b..8101562c985 100644
--- a/test/manual/etags/c-src/exit.strange_suffix
+++ b/test/manual/etags/c-src/exit.strange_suffix
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 2016-2022 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 2016-2023 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
diff --git a/test/manual/etags/c-src/getopt.h b/test/manual/etags/c-src/getopt.h
index 31e2a03c12d..29536410f29 100644
--- a/test/manual/etags/c-src/getopt.h
+++ b/test/manual/etags/c-src/getopt.h
@@ -1,5 +1,5 @@
 /* Declarations for getopt.
-   Copyright (C) 1989-1992, 2016-2022 Free Software Foundation, Inc.
+   Copyright (C) 1989-1992, 2016-2023 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
diff --git a/test/manual/etags/c-src/sysdep.h b/test/manual/etags/c-src/sysdep.h
index 38edc43df3b..c29ed8b64a6 100644
--- a/test/manual/etags/c-src/sysdep.h
+++ b/test/manual/etags/c-src/sysdep.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992-1993, 2016-2022 Free Software Foundation, Inc.
+/* Copyright (C) 1992-1993, 2016-2023 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
diff --git a/test/manual/etags/el-src/emacs/lisp/progmodes/etags.el 
b/test/manual/etags/el-src/emacs/lisp/progmodes/etags.el
index 9ae80149559..4f4663701f0 100644
--- a/test/manual/etags/el-src/emacs/lisp/progmodes/etags.el
+++ b/test/manual/etags/el-src/emacs/lisp/progmodes/etags.el
@@ -1,6 +1,6 @@
 ;;; etags.el --- etags facility for Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1988-1989, 1992-1996, 1998, 2000-2022 Free
+;; Copyright (C) 1985-1986, 1988-1989, 1992-1996, 1998, 2000-2023 Free
 ;; Software Foundation, Inc.
 
 ;; Author: Roland McGrath <roland@gnu.org>
diff --git a/test/manual/etags/tex-src/texinfo.tex 
b/test/manual/etags/tex-src/texinfo.tex
index e0de6afe96e..f523af7da30 100644
--- a/test/manual/etags/tex-src/texinfo.tex
+++ b/test/manual/etags/tex-src/texinfo.tex
@@ -1,6 +1,6 @@
 %% TeX macros to handle texinfo files
 
-%   Copyright (C) 1985--1986, 1988, 1990--1991, 2016--2022 Free Software
+%   Copyright (C) 1985--1986, 1988, 1990--1991, 2016--2023 Free Software
 %   Foundation, Inc.
 
 %This texinfo.tex file is free software; you can redistribute it and/or
diff --git a/test/manual/etags/y-src/cccp.c b/test/manual/etags/y-src/cccp.c
index 264adfae663..879de5b0d8f 100644
--- a/test/manual/etags/y-src/cccp.c
+++ b/test/manual/etags/y-src/cccp.c
@@ -320,7 +320,7 @@ static const short yycheck[] =
 #line 3 "/usr/share/bison/bison.simple"
 
 /* Skeleton output parser for bison,
-   Copyright (C) 1984, 1989-1990, 2000-2001, 2016-2022 Free Software
+   Copyright (C) 1984, 1989-1990, 2000-2001, 2016-2023 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
diff --git a/test/manual/etags/y-src/parse.c b/test/manual/etags/y-src/parse.c
index 61794f713ed..8ba6b23675d 100644
--- a/test/manual/etags/y-src/parse.c
+++ b/test/manual/etags/y-src/parse.c
@@ -28,7 +28,7 @@
 
 #line 1 "y-src/parse.y"
 
-/*     Copyright (C) 1990, 1992-1993, 2016-2022 Free Software Foundation,
+/*     Copyright (C) 1990, 1992-1993, 2016-2023 Free Software Foundation,
  *     Inc.
 
 This file is part of Oleo, the GNU Spreadsheet.
diff --git a/test/manual/etags/y-src/parse.y b/test/manual/etags/y-src/parse.y
index 0bfa92b6303..c4d4b1e0eac 100644
--- a/test/manual/etags/y-src/parse.y
+++ b/test/manual/etags/y-src/parse.y
@@ -1,5 +1,5 @@
 %{
-/*     Copyright (C) 1990, 1992-1993, 2016-2022 Free Software Foundation,
+/*     Copyright (C) 1990, 1992-1993, 2016-2023 Free Software Foundation,
  *     Inc.
 
 This file is part of Oleo, the GNU Spreadsheet.
diff --git a/test/manual/image-circular-tests.el 
b/test/manual/image-circular-tests.el
index d2187cbbadc..efd96895f84 100644
--- a/test/manual/image-circular-tests.el
+++ b/test/manual/image-circular-tests.el
@@ -1,6 +1,6 @@
 ;;; image-circular-tests.el --- test image functions with circular objects  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019, 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019, 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Pip Cet <pipcet@gmail.com>
 ;; Keywords:       internal
diff --git a/test/manual/image-size-tests.el b/test/manual/image-size-tests.el
index ea7af889431..544a38b6ba3 100644
--- a/test/manual/image-size-tests.el
+++ b/test/manual/image-size-tests.el
@@ -1,6 +1,6 @@
 ;;; image-size-tests.el --- tests for image scaling  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/manual/image-tests.el b/test/manual/image-tests.el
index 400657132c7..a359bb0f91f 100644
--- a/test/manual/image-tests.el
+++ b/test/manual/image-tests.el
@@ -1,6 +1,6 @@
 ;;; image-tests.el --- tests for image.c  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 ;; Keywords: internal
diff --git a/test/manual/image-transforms-tests.el 
b/test/manual/image-transforms-tests.el
index 2f03073ab74..cdf812ee177 100644
--- a/test/manual/image-transforms-tests.el
+++ b/test/manual/image-transforms-tests.el
@@ -1,6 +1,6 @@
 ;;; image-transforms-tests.el --- Test suite for image transforms.  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Alan Third <alan@idiocy.org>
 ;; Keywords:       internal
diff --git a/test/manual/indent/pascal.pas b/test/manual/indent/pascal.pas
index 1efd9b83752..3b35acdc801 100644
--- a/test/manual/indent/pascal.pas
+++ b/test/manual/indent/pascal.pas
@@ -1,6 +1,6 @@
 { GPC demo program for the CRT unit.
 
-Copyright (C) 1999-2006, 2013-2022 Free Software Foundation, Inc.
+Copyright (C) 1999-2006, 2013-2023 Free Software Foundation, Inc.
 
 Author: Frank Heckenbach <frank@pascal.gnu.de>
 
diff --git a/test/manual/noverlay/Makefile.in b/test/manual/noverlay/Makefile.in
index 3c8dba1ce1f..29c7bacd258 100644
--- a/test/manual/noverlay/Makefile.in
+++ b/test/manual/noverlay/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2017-2022 Free Software Foundation, Inc.
+# Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/test/manual/noverlay/check-sanitize.sh 
b/test/manual/noverlay/check-sanitize.sh
index 9a67818dc8f..735b85bbeeb 100755
--- a/test/manual/noverlay/check-sanitize.sh
+++ b/test/manual/noverlay/check-sanitize.sh
@@ -1,7 +1,7 @@
 #!/usr/bin/env bash
 ### check-sanitize.sh - strip confusing parts of Check error output
 
-## Copyright (C) 2017-2022 Free Software Foundation, Inc.
+## Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
diff --git a/test/manual/noverlay/emacs-compat.h 
b/test/manual/noverlay/emacs-compat.h
index d2448b12db3..16fa66e8ae4 100644
--- a/test/manual/noverlay/emacs-compat.h
+++ b/test/manual/noverlay/emacs-compat.h
@@ -1,6 +1,6 @@
 /* Mock necessary parts of lisp.h.
 
-Copyright (C) 2017-2022 Free Software Foundation, Inc.
+Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/test/manual/noverlay/itree-tests.c 
b/test/manual/noverlay/itree-tests.c
index 8cab7bf84d4..0f1e4138954 100644
--- a/test/manual/noverlay/itree-tests.c
+++ b/test/manual/noverlay/itree-tests.c
@@ -1,6 +1,6 @@
 /* Test the interval data-structure in itree.c.
 
-Copyright (c) 2017-2022 Free Software Foundation, Inc.
+Copyright (c) 2017-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/test/manual/noverlay/overlay-perf.el 
b/test/manual/noverlay/overlay-perf.el
index 4d79254a538..970b4541d9a 100644
--- a/test/manual/noverlay/overlay-perf.el
+++ b/test/manual/noverlay/overlay-perf.el
@@ -1,4 +1,24 @@
 ;; -*- lexical-binding:t -*-
+
+;; Copyright (C) 2015-2023 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 'cl-lib)
 (require 'subr-x)
 (require 'seq)
diff --git a/test/manual/process-callout-tests.el 
b/test/manual/process-callout-tests.el
index 0bb960cf909..a284dff50ad 100644
--- a/test/manual/process-callout-tests.el
+++ b/test/manual/process-callout-tests.el
@@ -1,6 +1,6 @@
 ;;; process-callout-tests.el --- Testing the process facilities -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/manual/redisplay-testsuite.el 
b/test/manual/redisplay-testsuite.el
index 01b0a895a42..837f7417582 100644
--- a/test/manual/redisplay-testsuite.el
+++ b/test/manual/redisplay-testsuite.el
@@ -1,6 +1,6 @@
 ;;; redisplay-testsuite.el --- Test suite for redisplay.  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2023 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <cyd@stupidchicken.com>
 ;; Keywords:       internal
diff --git a/test/manual/scroll-tests.el b/test/manual/scroll-tests.el
index e4a9e7cd6f3..c2a4ef17bff 100644
--- a/test/manual/scroll-tests.el
+++ b/test/manual/scroll-tests.el
@@ -1,6 +1,6 @@
 ;;; scroll-tests.el --- tests for scrolling -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/misc/test-custom-deps.el b/test/misc/test-custom-deps.el
index 7836612bd33..9e5ba01fc5b 100644
--- a/test/misc/test-custom-deps.el
+++ b/test/misc/test-custom-deps.el
@@ -1,6 +1,6 @@
 ;;; test-custom-deps.el --- Test custom deps  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/misc/test-custom-libs.el b/test/misc/test-custom-libs.el
index d9aa955ccba..eb565de8eee 100644
--- a/test/misc/test-custom-libs.el
+++ b/test/misc/test-custom-libs.el
@@ -1,6 +1,6 @@
 ;;; test-custom-libs.el --- Test custom loads  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/misc/test-custom-noloads.el b/test/misc/test-custom-noloads.el
index 15cdbc66238..585831aa466 100644
--- a/test/misc/test-custom-noloads.el
+++ b/test/misc/test-custom-noloads.el
@@ -1,6 +1,6 @@
 ;;; test-custom-noloads.el --- Test custom noloads  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/misc/test-custom-opts.el b/test/misc/test-custom-opts.el
index 21809a9a971..f37553382c4 100644
--- a/test/misc/test-custom-opts.el
+++ b/test/misc/test-custom-opts.el
@@ -1,6 +1,6 @@
 ;;; test-custom-opts.el --- Test custom opts  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/alloc-tests.el b/test/src/alloc-tests.el
index 967833e1903..19330e4a79c 100644
--- a/test/src/alloc-tests.el
+++ b/test/src/alloc-tests.el
@@ -1,6 +1,6 @@
 ;;; alloc-tests.el --- alloc tests -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Daniel Colascione <dancol@dancol.org>
 ;; Keywords:
diff --git a/test/src/buffer-tests.el b/test/src/buffer-tests.el
index 0e6d717cbb0..e5de8f3464a 100644
--- a/test/src/buffer-tests.el
+++ b/test/src/buffer-tests.el
@@ -1,6 +1,6 @@
 ;;; buffer-tests.el --- tests for buffer.c functions -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/callint-tests.el b/test/src/callint-tests.el
index 5a633fdc2bd..4f7cceef619 100644
--- a/test/src/callint-tests.el
+++ b/test/src/callint-tests.el
@@ -1,6 +1,6 @@
 ;;; callint-tests.el --- unit tests for callint.c    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
 
 ;; Author: Philipp Stephani <phst@google.com>
 
diff --git a/test/src/callproc-tests.el b/test/src/callproc-tests.el
index f44c7e199f6..8ee40a46c11 100644
--- a/test/src/callproc-tests.el
+++ b/test/src/callproc-tests.el
@@ -1,6 +1,6 @@
 ;;; callproc-tests.el --- callproc.c tests -*- lexical-binding: t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/casefiddle-tests.el b/test/src/casefiddle-tests.el
index 652af417293..e7f4348b0c6 100644
--- a/test/src/casefiddle-tests.el
+++ b/test/src/casefiddle-tests.el
@@ -1,6 +1,6 @@
 ;;; casefiddle-tests.el --- tests for casefiddle.c functions -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2015-2016, 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2016, 2018-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/character-tests.el b/test/src/character-tests.el
index f83bac333d7..76026ffc3a9 100644
--- a/test/src/character-tests.el
+++ b/test/src/character-tests.el
@@ -1,6 +1,6 @@
 ;;; character-tests.el --- tests for character.c  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/charset-tests.el b/test/src/charset-tests.el
index 51eb040e77a..34788ecbc05 100644
--- a/test/src/charset-tests.el
+++ b/test/src/charset-tests.el
@@ -1,6 +1,6 @@
 ;;; charset-tests.el --- Tests for charset.c -*- lexical-binding: t -*-
 
-;; Copyright 2017-2022 Free Software Foundation, Inc.
+;; Copyright 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/chartab-tests.el b/test/src/chartab-tests.el
index e4c4b065376..6433d3d09bb 100644
--- a/test/src/chartab-tests.el
+++ b/test/src/chartab-tests.el
@@ -1,6 +1,6 @@
 ;;; chartab-tests.el --- Tests for char-tab.c -*- lexical-binding: t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Eli Zaretskii <eliz@gnu.org>
 
diff --git a/test/src/cmds-tests.el b/test/src/cmds-tests.el
index 73e933eb372..70d3d09e9d5 100644
--- a/test/src/cmds-tests.el
+++ b/test/src/cmds-tests.el
@@ -1,6 +1,6 @@
 ;;; cmds-tests.el --- Testing some Emacs commands -*- lexical-binding: t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Richard <youngfrog@members.fsf.org>
 ;; Keywords:
diff --git a/test/src/coding-tests.el b/test/src/coding-tests.el
index f65d575d0c2..6bd8d1ae6c4 100644
--- a/test/src/coding-tests.el
+++ b/test/src/coding-tests.el
@@ -1,6 +1,6 @@
 ;;; coding-tests.el --- tests for text encoding and decoding -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Eli Zaretskii <eliz@gnu.org>
 ;; Author: Kenichi Handa <handa@gnu.org>
diff --git a/test/src/comp-resources/comp-test-funcs-dyn.el 
b/test/src/comp-resources/comp-test-funcs-dyn.el
index 07f8671c6d9..7f9daf67019 100644
--- a/test/src/comp-resources/comp-test-funcs-dyn.el
+++ b/test/src/comp-resources/comp-test-funcs-dyn.el
@@ -1,6 +1,6 @@
 ;;; comp-test-funcs-dyn.el --- compilation unit tested by comp-tests.el -*- 
lexical-binding: nil; -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Andrea Corallo <akrl@sdf.org>
 
diff --git a/test/src/comp-resources/comp-test-funcs.el 
b/test/src/comp-resources/comp-test-funcs.el
index 03925d4d2e8..fff881dd595 100644
--- a/test/src/comp-resources/comp-test-funcs.el
+++ b/test/src/comp-resources/comp-test-funcs.el
@@ -1,6 +1,6 @@
 ;;; comp-test-funcs.el --- compilation unit tested by comp-tests.el -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Andrea Corallo <akrl@sdf.org>
 
diff --git a/test/src/comp-resources/comp-test-pure.el 
b/test/src/comp-resources/comp-test-pure.el
index 788739e04cc..9b4c1ee2dae 100644
--- a/test/src/comp-resources/comp-test-pure.el
+++ b/test/src/comp-resources/comp-test-pure.el
@@ -1,6 +1,6 @@
 ;;; comp-test-pure.el --- compilation unit tested by comp-tests.el -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; Author: Andrea Corallo <akrl@sdf.org>
 
diff --git a/test/src/comp-tests.el b/test/src/comp-tests.el
index 4e512098a3d..926ba27e563 100644
--- a/test/src/comp-tests.el
+++ b/test/src/comp-tests.el
@@ -1,6 +1,6 @@
 ;;; comp-tests.el --- unit tests for src/comp.c      -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
 
 ;; Author: Andrea Corallo <akrl@sdf.org>
 
diff --git a/test/src/data-tests.el b/test/src/data-tests.el
index 463a894d095..28cee9d2c5b 100644
--- a/test/src/data-tests.el
+++ b/test/src/data-tests.el
@@ -1,6 +1,6 @@
 ;;; data-tests.el --- tests for src/data.c  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/decompress-tests.el b/test/src/decompress-tests.el
index 47d67b7bda4..1052ecee5c1 100644
--- a/test/src/decompress-tests.el
+++ b/test/src/decompress-tests.el
@@ -1,6 +1,6 @@
 ;;; decompress-tests.el --- Test suite for decompress. -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 
diff --git a/test/src/doc-tests.el b/test/src/doc-tests.el
index ee4f02347ec..79cac8c3d64 100644
--- a/test/src/doc-tests.el
+++ b/test/src/doc-tests.el
@@ -1,6 +1,6 @@
 ;;; doc-tests.el --- tests for doc.c functions  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el
index 5fe896fbbd1..a3353cc25a6 100644
--- a/test/src/editfns-tests.el
+++ b/test/src/editfns-tests.el
@@ -1,6 +1,6 @@
 ;;; editfns-tests.el --- tests for editfns.c  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/emacs-module-resources/mod-test.c 
b/test/src/emacs-module-resources/mod-test.c
index b47a0b7a39b..5dfa6ed4b85 100644
--- a/test/src/emacs-module-resources/mod-test.c
+++ b/test/src/emacs-module-resources/mod-test.c
@@ -1,6 +1,6 @@
 /* Test GNU Emacs modules.
 
-Copyright 2015-2022 Free Software Foundation, Inc.
+Copyright 2015-2023 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/test/src/emacs-module-tests.el b/test/src/emacs-module-tests.el
index a9a45d54632..ac88011b543 100644
--- a/test/src/emacs-module-tests.el
+++ b/test/src/emacs-module-tests.el
@@ -1,6 +1,6 @@
 ;;; emacs-module-tests.el --- Test GNU Emacs modules.  -*- lexical-binding: t; 
-*-
 
-;; Copyright 2015-2022 Free Software Foundation, Inc.
+;; Copyright 2015-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/emacs-tests.el b/test/src/emacs-tests.el
index 52888135c12..0ea197d07f8 100644
--- a/test/src/emacs-tests.el
+++ b/test/src/emacs-tests.el
@@ -1,6 +1,6 @@
 ;;; emacs-tests.el --- unit tests for emacs.c -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/eval-tests.el b/test/src/eval-tests.el
index 0e12e4dbd8a..1e7edca3bac 100644
--- a/test/src/eval-tests.el
+++ b/test/src/eval-tests.el
@@ -1,6 +1,6 @@
 ;;; eval-tests.el --- unit tests for src/eval.c      -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Philipp Stephani <phst@google.com>
 
diff --git a/test/src/fileio-tests.el b/test/src/fileio-tests.el
index 08582c8a862..50642420ce9 100644
--- a/test/src/fileio-tests.el
+++ b/test/src/fileio-tests.el
@@ -1,6 +1,6 @@
 ;;; fileio-tests.el --- unit tests for src/fileio.c      -*- lexical-binding: 
t; -*-
 
-;; Copyright 2017-2022 Free Software Foundation, Inc.
+;; Copyright 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/filelock-tests.el b/test/src/filelock-tests.el
index 97642669a0d..1f055cfebc6 100644
--- a/test/src/filelock-tests.el
+++ b/test/src/filelock-tests.el
@@ -1,6 +1,6 @@
 ;;; filelock-tests.el --- test file locking -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/floatfns-tests.el b/test/src/floatfns-tests.el
index aa709e3c2f5..97c855a43fa 100644
--- a/test/src/floatfns-tests.el
+++ b/test/src/floatfns-tests.el
@@ -1,6 +1,6 @@
 ;;; floatfns-tests.el --- tests for floating point operations -*- 
lexical-binding: t -*-
 
-;; Copyright 2017-2022 Free Software Foundation, Inc.
+;; Copyright 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/fns-tests.el b/test/src/fns-tests.el
index 7568d941d03..e0d6c96b360 100644
--- a/test/src/fns-tests.el
+++ b/test/src/fns-tests.el
@@ -1,6 +1,6 @@
 ;;; fns-tests.el --- tests for src/fns.c  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/font-tests.el b/test/src/font-tests.el
index 683d331d753..2bd20be21dc 100644
--- a/test/src/font-tests.el
+++ b/test/src/font-tests.el
@@ -1,6 +1,6 @@
 ;;; font-tests.el --- Test suite for font-related functions. -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <cyd@stupidchicken.com>
 ;; Keywords:       internal
diff --git a/test/src/image-tests.el b/test/src/image-tests.el
index d1a4dad37b9..317f4d3aab6 100644
--- a/test/src/image-tests.el
+++ b/test/src/image-tests.el
@@ -1,6 +1,6 @@
 ;;; image-tests.el --- Tests for image.c  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/src/indent-tests.el b/test/src/indent-tests.el
index e6b1fde6e18..9e111bf3476 100644
--- a/test/src/indent-tests.el
+++ b/test/src/indent-tests.el
@@ -1,6 +1,6 @@
 ;;; indent-tests.el --- tests for src/indent.c  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/inotify-tests.el b/test/src/inotify-tests.el
index 295b184be0e..cebf4421fd5 100644
--- a/test/src/inotify-tests.el
+++ b/test/src/inotify-tests.el
@@ -1,6 +1,6 @@
 ;;; inotify-tests.el --- Test suite for inotify. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Rüdiger Sonderfeld <ruediger@c-plusplus.de>
 ;; Keywords:       internal
diff --git a/test/src/json-tests.el b/test/src/json-tests.el
index 3560e1abc96..93e1273d7d6 100644
--- a/test/src/json-tests.el
+++ b/test/src/json-tests.el
@@ -1,6 +1,6 @@
 ;;; json-tests.el --- unit tests for json.c          -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/keyboard-tests.el b/test/src/keyboard-tests.el
index d17c9d96a63..3393c1d9018 100644
--- a/test/src/keyboard-tests.el
+++ b/test/src/keyboard-tests.el
@@ -1,6 +1,6 @@
 ;;; keyboard-tests.el --- Tests for keyboard.c -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/keymap-tests.el b/test/src/keymap-tests.el
index ce96be6869e..b7715a280a6 100644
--- a/test/src/keymap-tests.el
+++ b/test/src/keymap-tests.el
@@ -1,6 +1,6 @@
 ;;; keymap-tests.el --- Test suite for src/keymap.c -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Juanma Barranquero <lekktu@gmail.com>
 ;;         Stefan Kangas <stefankangas@gmail.com>
diff --git a/test/src/lcms-tests.el b/test/src/lcms-tests.el
index 7f0f660d13e..e34542b1921 100644
--- a/test/src/lcms-tests.el
+++ b/test/src/lcms-tests.el
@@ -1,6 +1,6 @@
 ;;; lcms-tests.el --- tests for Little CMS interface -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
diff --git a/test/src/lread-tests.el b/test/src/lread-tests.el
index 57143dd81e5..459a06a39b6 100644
--- a/test/src/lread-tests.el
+++ b/test/src/lread-tests.el
@@ -1,6 +1,6 @@
 ;;; lread-tests.el --- tests for lread.c -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; Author: Philipp Stephani <phst@google.com>
 
diff --git a/test/src/marker-tests.el b/test/src/marker-tests.el
index 32e4804fe7d..b766466a38a 100644
--- a/test/src/marker-tests.el
+++ b/test/src/marker-tests.el
@@ -1,6 +1,6 @@
 ;;; marker-tests.el --- tests for marker.c functions -*- lexical-binding: t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/minibuf-tests.el b/test/src/minibuf-tests.el
index 68800729502..f096624cb27 100644
--- a/test/src/minibuf-tests.el
+++ b/test/src/minibuf-tests.el
@@ -1,6 +1,6 @@
 ;;; minibuf-tests.el --- tests for minibuf.c functions -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/print-tests.el b/test/src/print-tests.el
index faab196f22f..a67099c147f 100644
--- a/test/src/print-tests.el
+++ b/test/src/print-tests.el
@@ -1,6 +1,6 @@
 ;;; print-tests.el --- tests for src/print.c         -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/process-tests.el b/test/src/process-tests.el
index 7d3d9eb72b8..e17e1c0d833 100644
--- a/test/src/process-tests.el
+++ b/test/src/process-tests.el
@@ -1,6 +1,6 @@
 ;;; process-tests.el --- Testing the process facilities -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -830,7 +830,7 @@ Return nil if that can't be determined."
   (when (eq process-tests--EMFILE-message :unknown)
     (setq process-tests--EMFILE-message
           (with-temp-buffer
-            (when (eql (ignore-error 'file-error
+            (when (eql (ignore-error file-error
                          (call-process "errno" nil t nil "EMFILE"))
                        0)
               (goto-char (point-min))
diff --git a/test/src/regex-emacs-tests.el b/test/src/regex-emacs-tests.el
index b323f592dca..34fa35e32ff 100644
--- a/test/src/regex-emacs-tests.el
+++ b/test/src/regex-emacs-tests.el
@@ -1,6 +1,6 @@
 ;;; regex-emacs-tests.el --- tests for regex-emacs.c -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -273,7 +273,7 @@ on success"
      string
      (condition-case nil
          (if (string-match pattern string) nil 'search-failed)
-       ('invalid-regexp 'compilation-failed))
+       (invalid-regexp 'compilation-failed))
      bounds-ref substring-ref)))
 
 
@@ -518,7 +518,7 @@ known/benign differences in behavior.")
                what-failed
                (condition-case nil
                    (if (string-match pattern string) nil 'search-failed)
-                 ('invalid-regexp 'compilation-failed))
+                 (invalid-regexp 'compilation-failed))
 
                matches-observed
                (cl-loop for x from 0 to 20
diff --git a/test/src/search-tests.el b/test/src/search-tests.el
index 2fa23842841..293a715f5dc 100644
--- a/test/src/search-tests.el
+++ b/test/src/search-tests.el
@@ -1,6 +1,6 @@
 ;;; search-tests.el --- tests for search.c functions -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2016, 2018-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2016, 2018-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/sqlite-tests.el b/test/src/sqlite-tests.el
index a2472c43dad..460651def78 100644
--- a/test/src/sqlite-tests.el
+++ b/test/src/sqlite-tests.el
@@ -1,6 +1,6 @@
 ;;; sqlite-tests.el --- Tests for sqlite.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/syntax-tests.el b/test/src/syntax-tests.el
index 751a900a23e..0ad3667c060 100644
--- a/test/src/syntax-tests.el
+++ b/test/src/syntax-tests.el
@@ -1,6 +1,6 @@
 ;;; syntax-tests.el --- tests for syntax.c functions -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/textprop-tests.el b/test/src/textprop-tests.el
index d6cee6b6cbe..12349a79497 100644
--- a/test/src/textprop-tests.el
+++ b/test/src/textprop-tests.el
@@ -1,6 +1,6 @@
 ;;; textprop-tests.el --- Test suite for text properties. -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
 
 ;; Author: Wolfgang Jenkner <wjenkner@inode.at>
 ;; Keywords: internal
diff --git a/test/src/thread-tests.el b/test/src/thread-tests.el
index 731fa893c1f..cfa253fb48e 100644
--- a/test/src/thread-tests.el
+++ b/test/src/thread-tests.el
@@ -1,6 +1,6 @@
 ;;; thread-tests.el --- tests for threads. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/timefns-tests.el b/test/src/timefns-tests.el
index 24f9000ffbd..ca4ec308926 100644
--- a/test/src/timefns-tests.el
+++ b/test/src/timefns-tests.el
@@ -1,6 +1,6 @@
 ;;; timefns-tests.el --- tests for timefns.c -*- lexical-binding: t -*-
 
-;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/treesit-tests.el b/test/src/treesit-tests.el
index 48b61cf3dc3..a2ab3be7cd8 100644
--- a/test/src/treesit-tests.el
+++ b/test/src/treesit-tests.el
@@ -1,6 +1,6 @@
 ;;; treesit-tests.el --- tests for src/treesit.c         -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -252,9 +252,7 @@ BODY is the test body."
          (setq parser (treesit-parser-create 'json))
          (setq root (treesit-parser-root-node
                      parser))
-         (setq array (treesit-node-child root 0))
-         ;; First bracket.
-         (setq cursor (treesit-node-child array 0)))
+         (setq array (treesit-node-child root 0)))
        ,@body)))
 
 (ert-deftest treesit-search-forward ()
@@ -335,6 +333,9 @@ BODY is the test body."
 
 ;;; Query
 
+(defun treesit--ert-pred-last-sibling (node)
+  (null (treesit-node-next-sibling node t)))
+
 (ert-deftest treesit-query-api ()
   "Tests for query API."
   (skip-unless (treesit-language-available-p 'json))
@@ -357,13 +358,16 @@ BODY is the test body."
 (pair key: (_) @keyword)
 ((_) @bob (#match \"^B.b$\" @bob))
 (number) @number
-((number) @n3 (#equal \"3\" @n3)) "
+((number) @n3 (#equal \"3\" @n3))
+((number) @n3p (#pred treesit--ert-pred-last-sibling @n3p))"
                  ;; Sexp query.
                  ((string) @string
                   (pair key: (_) @keyword)
                   ((_) @bob (:match "^B.b$" @bob))
                   (number) @number
-                  ((number) @n3 (:equal "3" @n3)))))
+                  ((number) @n3 (:equal "3" @n3))
+                  ((number) @n3p (:pred treesit--ert-pred-last-sibling
+                                        @n3p)))))
         ;; Test `treesit-query-compile'.
         (dolist (query (list query1
                              (treesit-query-compile 'json query1)))
@@ -375,7 +379,8 @@ BODY is the test body."
               (string . "\"Bob\"")
               (bob . "Bob")
               (number . "3")
-              (n3 . "3"))
+              (n3 . "3")
+              (n3p . "3"))
             (mapcar (lambda (entry)
                       (cons (car entry)
                             (treesit-node-text
@@ -831,36 +836,40 @@ OPENING and CLOSING are the same as in
 and \"]\"."
   (with-temp-buffer
     (funcall init)
-    (let* ((opening (or opening "["))
-           (closing (or closing "]"))
-           ;; Insert program and parse marker positions.
-           (marker-alist (treesit--ert-insert-and-parse-marker
-                             opening closing program))
-           ;; Translate marker positions into buffer positions.
-           (decoded-master
-            (cl-loop for record in master
-                     collect
-                     (cl-loop for pos in record
-                              collect (alist-get pos marker-alist))))
-           ;; Collect positions each function returns.
-           (positions
-            (treesit--ert-collect-positions
-             ;; The first column of DECODED-MASTER.
-             (mapcar #'car decoded-master)
-             ;; Four functions: next-end, prev-beg, next-beg, prev-end.
-             (mapcar (lambda (conf)
-                       (lambda ()
-                         (if-let ((pos (funcall
-                                        #'treesit--navigate-defun
-                                        (point) (car conf) (cdr conf))))
-                             (save-excursion
-                               (goto-char pos)
-                               (funcall treesit-defun-skipper)
-                               (point)))))
-                     '((-1 . beg)
-                       (1 . end)
-                       (-1 . end)
-                       (1 . beg))))))
+    (pcase-let*
+        ((opening (or opening "["))
+         (closing (or closing "]"))
+         ;; Insert program and parse marker positions.
+         (marker-alist (treesit--ert-insert-and-parse-marker
+                           opening closing program))
+         ;; Translate marker positions into buffer positions.
+         (decoded-master
+          (cl-loop for record in master
+                   collect
+                   (cl-loop for pos in record
+                            collect (alist-get pos marker-alist))))
+         (`(,regexp . ,pred) (treesit--thing-unpack-pattern
+                              treesit-defun-type-regexp))
+         ;; Collect positions each function returns.
+         (positions
+          (treesit--ert-collect-positions
+           ;; The first column of DECODED-MASTER.
+           (mapcar #'car decoded-master)
+           ;; Four functions: next-end, prev-beg, next-beg, prev-end.
+           (mapcar (lambda (conf)
+                     (lambda ()
+                       (if-let ((pos (funcall
+                                      #'treesit--navigate-thing
+                                      (point) (car conf) (cdr conf)
+                                      regexp pred)))
+                           (save-excursion
+                             (goto-char pos)
+                             (funcall treesit-defun-skipper)
+                             (point)))))
+                   '((-1 . beg)
+                     (1 . end)
+                     (-1 . end)
+                     (1 . beg))))))
       ;; Verify each position.
       (cl-loop for record in decoded-master
                for orig-record in master
@@ -931,7 +940,28 @@ and \"]\"."
 [999]}
 [110]
 "
-  "Javascript source for navigation test.")
+  "Bash source for navigation test.")
+
+(defvar treesit--ert-defun-navigation-elixir-program
+  "[100]
+[101]def bar() do
+[999]end
+[102]
+[103]defmodule Example do[0]
+[999] @impl true
+[104] [1]def bar() do[2]
+[999] end[3]
+[105] [4]
+[106] [5]def baz() do[6]
+[999] end[7]
+[107] [8]
+[999]end[9]
+[108]
+[109]def bar() do
+[999]end
+[110]
+"
+  "Elixir source for navigation test.")
 
 (defvar treesit--ert-defun-navigation-nested-master
   ;; START PREV-BEG NEXT-END PREV-END NEXT-BEG
@@ -1013,6 +1043,23 @@ the prev-beg, now point should be at marker 103\", etc.")
      treesit--ert-defun-navigation-bash-program
      treesit--ert-defun-navigation-nested-master)))
 
+(ert-deftest treesit-defun-navigation-nested-4 ()
+  "Test defun navigation using Elixir.
+This tests bug#60355."
+  (skip-unless (treesit-language-available-p 'elixir))
+  ;; Nested defun navigation
+  (let ((treesit-defun-tactic 'nested)
+        (pred (lambda (node)
+                (member (treesit-node-text
+                         (treesit-node-child-by-field-name node "target"))
+                        '("def" "defmodule")))))
+    (treesit--ert-test-defun-navigation
+     (lambda ()
+       (treesit-parser-create 'elixir)
+       (setq-local treesit-defun-type-regexp `("call" . ,pred)))
+     treesit--ert-defun-navigation-elixir-program
+     treesit--ert-defun-navigation-nested-master)))
+
 (ert-deftest treesit-defun-navigation-top-level ()
   "Test top-level only defun navigation."
   (skip-unless (treesit-language-available-p 'python))
diff --git a/test/src/undo-tests.el b/test/src/undo-tests.el
index cb0822fb1b9..84151d3b5db 100644
--- a/test/src/undo-tests.el
+++ b/test/src/undo-tests.el
@@ -1,6 +1,6 @@
 ;;; undo-tests.el --- Tests of primitive-undo -*- lexical-binding: t -*-
 
-;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
 
 ;; Author: Aaron S. Hawley <aaron.s.hawley@gmail.com>
 
diff --git a/test/src/xdisp-tests.el b/test/src/xdisp-tests.el
index 6ff64d0431a..52ed79b0f20 100644
--- a/test/src/xdisp-tests.el
+++ b/test/src/xdisp-tests.el
@@ -1,6 +1,6 @@
 ;;; xdisp-tests.el --- tests for xdisp.c functions -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/xfaces-tests.el b/test/src/xfaces-tests.el
index 16f16537918..d8707a0a08e 100644
--- a/test/src/xfaces-tests.el
+++ b/test/src/xfaces-tests.el
@@ -1,6 +1,6 @@
 ;;; xfaces-tests.el --- tests for xfaces.c           -*- lexical-binding: t -*-
 
-;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/src/xml-tests.el b/test/src/xml-tests.el
index 6a8290bd0c8..dfb897ba011 100644
--- a/test/src/xml-tests.el
+++ b/test/src/xml-tests.el
@@ -1,6 +1,6 @@
 ;;; xml-tests.el --- Test suite for libxml parsing. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2023 Free Software Foundation, Inc.
 
 ;; Author: Ulf Jasper <ulf.jasper@web.de>
 ;; Keywords:       internal



reply via email to

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