summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2023-01-03 11:15:39 -0700
committerSean Whitton <spwhitton@spwhitton.name>2023-01-03 11:15:39 -0700
commit3b40d57c0a2cfbe5208544c2a6acae9c1c16e4b4 (patch)
tree8fb124df6255bdeac24c45838d2850e39c6c3c81
parenta9938b214cb881ba9769cb6923d016580fe17c51 (diff)
parent9b24417dda83087edb5b8bb5d2daf158c70b4193 (diff)
downloademacs-3b40d57c0a2cfbe5208544c2a6acae9c1c16e4b4.tar.gz
Merge upstream Git snapshot into athena/unstable
-rw-r--r--.gitattributes2
-rw-r--r--.gitignore6
-rw-r--r--.gitlab-ci.yml2
-rw-r--r--CONTRIBUTE3
-rw-r--r--ChangeLog.14
-rw-r--r--ChangeLog.26
-rw-r--r--ChangeLog.386
-rw-r--r--GNUmakefile2
-rw-r--r--INSTALL2
-rw-r--r--INSTALL.REPO2
-rw-r--r--Makefile.in2
-rw-r--r--README2
-rw-r--r--admin/ChangeLog.12
-rw-r--r--admin/README2
-rw-r--r--admin/admin.el2
-rw-r--r--admin/alloc-colors.c2
-rw-r--r--admin/authors.el2
-rwxr-xr-xadmin/automerge2
-rwxr-xr-xadmin/build-configs2
-rw-r--r--admin/charsets/Makefile.in2
-rwxr-xr-xadmin/charsets/mapconv2
-rw-r--r--admin/charsets/mapfiles/README2
-rwxr-xr-xadmin/check-man-pages56
-rw-r--r--admin/cus-test.el34
-rwxr-xr-xadmin/diff-tar-files2
-rw-r--r--admin/emacs-shell-lib2
-rwxr-xr-xadmin/emake2
-rw-r--r--admin/find-gc.el2
-rwxr-xr-xadmin/git-bisect-start1666
-rw-r--r--admin/gitmerge.el2
-rw-r--r--admin/grammars/Makefile.in2
-rw-r--r--admin/grammars/c.by2
-rw-r--r--admin/grammars/grammar.wy2
-rw-r--r--admin/grammars/java-tags.wy2
-rw-r--r--admin/grammars/js.wy2
-rw-r--r--admin/grammars/make.by2
-rw-r--r--admin/grammars/python.wy2
-rw-r--r--admin/grammars/scheme.by2
-rw-r--r--admin/grammars/srecode-template.wy2
-rw-r--r--admin/last-chance.el2
-rwxr-xr-xadmin/make-emacs2
-rwxr-xr-xadmin/make-manuals2
-rw-r--r--admin/make-tarball.txt6
-rwxr-xr-xadmin/merge-gnulib2
-rwxr-xr-xadmin/merge-pkg-config2
-rw-r--r--admin/notes/copyright2
-rw-r--r--admin/notes/emba2
-rw-r--r--admin/notes/git-workflow2
-rw-r--r--admin/notes/hydra2
-rw-r--r--admin/notes/multi-tty2
-rw-r--r--admin/notes/repo8
-rwxr-xr-xadmin/notes/tree-sitter/build-module/batch.sh7
-rwxr-xr-xadmin/notes/tree-sitter/build-module/build.sh73
-rw-r--r--admin/notes/tree-sitter/html-manual/Accessing-Node.html3
-rw-r--r--admin/notes/tree-sitter/html-manual/Language-Definitions.html3
-rw-r--r--admin/notes/tree-sitter/html-manual/Multiple-Languages.html3
-rw-r--r--admin/notes/tree-sitter/html-manual/Parser_002dbased-Font-Lock.html3
-rw-r--r--admin/notes/tree-sitter/html-manual/Parser_002dbased-Indentation.html5
-rw-r--r--admin/notes/tree-sitter/html-manual/Parsing-Program-Source.html3
-rw-r--r--admin/notes/tree-sitter/html-manual/Pattern-Matching.html3
-rw-r--r--admin/notes/tree-sitter/html-manual/Retrieving-Node.html3
-rw-r--r--admin/notes/tree-sitter/html-manual/Tree_002dsitter-C-API.html3
-rw-r--r--admin/notes/tree-sitter/html-manual/Using-Parser.html3
-rw-r--r--admin/notes/tree-sitter/html-manual/manual.css2
-rw-r--r--admin/notes/tree-sitter/starter-guide2
-rw-r--r--admin/notes/unicode2
-rw-r--r--admin/notes/www2
-rw-r--r--admin/notes/years7
-rw-r--r--admin/nt/README-UNDUMP.W322
-rw-r--r--admin/nt/dist-build/README-windows-binaries2
-rwxr-xr-xadmin/nt/dist-build/build-dep-zips.py2
-rwxr-xr-xadmin/nt/dist-build/build-zips.sh2
-rwxr-xr-xadmin/quick-install-emacs2
-rw-r--r--admin/unidata/Makefile.in2
-rwxr-xr-xadmin/unidata/blocks.awk2
-rw-r--r--admin/unidata/emoji-zwj.awk2
-rw-r--r--admin/unidata/unidata-gen.el2
-rw-r--r--admin/unidata/uvs.el2
-rwxr-xr-xadmin/update-copyright2
-rwxr-xr-xadmin/update_autogen2
-rwxr-xr-xadmin/upload-manuals2
-rwxr-xr-xautogen.sh2
-rwxr-xr-xbuild-aux/config.guess2
-rwxr-xr-xbuild-aux/config.sub2
-rwxr-xr-xbuild-aux/git-hooks/commit-msg2
-rwxr-xr-xbuild-aux/git-hooks/pre-commit2
-rwxr-xr-xbuild-aux/git-hooks/prepare-commit-msg2
-rwxr-xr-xbuild-aux/gitlog-to-changelog2
-rwxr-xr-xbuild-aux/gitlog-to-emacslog2
-rwxr-xr-xbuild-aux/make-info-dir2
-rwxr-xr-xbuild-aux/move-if-change2
-rwxr-xr-xbuild-aux/msys-to-w322
-rwxr-xr-xbuild-aux/update-copyright2
-rwxr-xr-xbuild-aux/update-subdirs2
-rw-r--r--config.bat2
-rw-r--r--configure.ac10
-rw-r--r--doc/emacs/ChangeLog.12
-rw-r--r--doc/emacs/Makefile.in2
-rw-r--r--doc/emacs/abbrevs.texi2
-rw-r--r--doc/emacs/ack.texi2
-rw-r--r--doc/emacs/anti.texi194
-rw-r--r--doc/emacs/arevert-xtra.texi2
-rw-r--r--doc/emacs/back.texi2
-rw-r--r--doc/emacs/basic.texi2
-rw-r--r--doc/emacs/buffers.texi2
-rw-r--r--doc/emacs/building.texi2
-rw-r--r--doc/emacs/cal-xtra.texi2
-rw-r--r--doc/emacs/calendar.texi2
-rw-r--r--doc/emacs/cmdargs.texi2
-rw-r--r--doc/emacs/commands.texi2
-rw-r--r--doc/emacs/custom.texi30
-rw-r--r--doc/emacs/dired-xtra.texi2
-rw-r--r--doc/emacs/dired.texi2
-rw-r--r--doc/emacs/display.texi14
-rw-r--r--doc/emacs/emacs-xtra.texi2
-rw-r--r--doc/emacs/emacs.texi4
-rw-r--r--doc/emacs/emerge-xtra.texi2
-rw-r--r--doc/emacs/entering.texi2
-rw-r--r--doc/emacs/files.texi2
-rw-r--r--doc/emacs/fixit.texi2
-rw-r--r--doc/emacs/fortran-xtra.texi2
-rw-r--r--doc/emacs/frames.texi2
-rw-r--r--doc/emacs/glossary.texi2
-rw-r--r--doc/emacs/gnu.texi2
-rw-r--r--doc/emacs/haiku.texi2
-rw-r--r--doc/emacs/help.texi2
-rw-r--r--doc/emacs/indent.texi2
-rw-r--r--doc/emacs/killing.texi2
-rw-r--r--doc/emacs/kmacro.texi2
-rw-r--r--doc/emacs/m-x.texi2
-rw-r--r--doc/emacs/macos.texi4
-rw-r--r--doc/emacs/maintaining.texi4
-rw-r--r--doc/emacs/mark.texi2
-rw-r--r--doc/emacs/mini.texi2
-rw-r--r--doc/emacs/misc.texi2
-rw-r--r--doc/emacs/modes.texi2
-rw-r--r--doc/emacs/msdos-xtra.texi2
-rw-r--r--doc/emacs/msdos.texi2
-rw-r--r--doc/emacs/mule.texi2
-rw-r--r--doc/emacs/package.texi2
-rw-r--r--doc/emacs/picture-xtra.texi2
-rw-r--r--doc/emacs/programs.texi15
-rw-r--r--doc/emacs/regs.texi2
-rw-r--r--doc/emacs/rmail.texi2
-rw-r--r--doc/emacs/screen.texi2
-rw-r--r--doc/emacs/search.texi2
-rw-r--r--doc/emacs/sending.texi2
-rw-r--r--doc/emacs/text.texi2
-rw-r--r--doc/emacs/trouble.texi2
-rw-r--r--doc/emacs/vc-xtra.texi2
-rw-r--r--doc/emacs/vc1-xtra.texi2
-rw-r--r--doc/emacs/windows.texi2
-rw-r--r--doc/emacs/xresources.texi2
-rw-r--r--doc/lispintro/ChangeLog.12
-rw-r--r--doc/lispintro/Makefile.in2
-rw-r--r--doc/lispintro/README2
-rw-r--r--doc/lispintro/cons-1.eps2
-rw-r--r--doc/lispintro/cons-2.eps2
-rw-r--r--doc/lispintro/cons-2a.eps2
-rw-r--r--doc/lispintro/cons-3.eps2
-rw-r--r--doc/lispintro/cons-4.eps2
-rw-r--r--doc/lispintro/cons-5.eps2
-rw-r--r--doc/lispintro/drawers.eps2
-rw-r--r--doc/lispintro/emacs-lisp-intro.texi2
-rw-r--r--doc/lispintro/lambda-1.eps2
-rw-r--r--doc/lispintro/lambda-2.eps2
-rw-r--r--doc/lispintro/lambda-3.eps2
-rw-r--r--doc/lispref/ChangeLog.18
-rw-r--r--doc/lispref/Makefile.in2
-rw-r--r--doc/lispref/README2
-rw-r--r--doc/lispref/abbrevs.texi2
-rw-r--r--doc/lispref/anti.texi227
-rw-r--r--doc/lispref/back.texi2
-rw-r--r--doc/lispref/backups.texi2
-rw-r--r--doc/lispref/buffers.texi20
-rw-r--r--doc/lispref/commands.texi2
-rw-r--r--doc/lispref/compile.texi4
-rw-r--r--doc/lispref/control.texi2
-rw-r--r--doc/lispref/customize.texi2
-rw-r--r--doc/lispref/debugging.texi2
-rw-r--r--doc/lispref/display.texi186
-rw-r--r--doc/lispref/edebug.texi25
-rw-r--r--doc/lispref/elisp.texi8
-rw-r--r--doc/lispref/errors.texi2
-rw-r--r--doc/lispref/eval.texi5
-rw-r--r--doc/lispref/files.texi19
-rw-r--r--doc/lispref/frames.texi2
-rw-r--r--doc/lispref/functions.texi16
-rw-r--r--doc/lispref/hash.texi2
-rw-r--r--doc/lispref/help.texi2
-rw-r--r--doc/lispref/hooks.texi2
-rw-r--r--doc/lispref/internals.texi18
-rw-r--r--doc/lispref/intro.texi2
-rw-r--r--doc/lispref/keymaps.texi4
-rw-r--r--doc/lispref/lay-flat.texi2
-rw-r--r--doc/lispref/lists.texi2
-rw-r--r--doc/lispref/loading.texi57
-rw-r--r--doc/lispref/macros.texi2
-rw-r--r--doc/lispref/maps.texi2
-rw-r--r--doc/lispref/markers.texi2
-rw-r--r--doc/lispref/minibuf.texi2
-rw-r--r--doc/lispref/modes.texi73
-rw-r--r--doc/lispref/nonascii.texi2
-rw-r--r--doc/lispref/numbers.texi2
-rw-r--r--doc/lispref/objects.texi2
-rw-r--r--doc/lispref/os.texi2
-rw-r--r--doc/lispref/package.texi6
-rw-r--r--doc/lispref/parsing.texi219
-rw-r--r--doc/lispref/positions.texi25
-rw-r--r--doc/lispref/processes.texi2
-rw-r--r--doc/lispref/records.texi2
-rw-r--r--doc/lispref/searching.texi2
-rw-r--r--doc/lispref/sequences.texi4
-rw-r--r--doc/lispref/streams.texi2
-rw-r--r--doc/lispref/strings.texi2
-rw-r--r--doc/lispref/symbols.texi2
-rw-r--r--doc/lispref/syntax.texi2
-rw-r--r--doc/lispref/text.texi4
-rw-r--r--doc/lispref/threads.texi2
-rw-r--r--doc/lispref/tips.texi8
-rw-r--r--doc/lispref/two-volume-cross-refs.txt2
-rw-r--r--doc/lispref/two-volume.make2
-rw-r--r--doc/lispref/variables.texi42
-rw-r--r--doc/lispref/windows.texi2
-rw-r--r--doc/man/ChangeLog.12
-rw-r--r--doc/man/ebrowse.12
-rw-r--r--doc/man/emacs.1.in2
-rw-r--r--doc/man/etags.112
-rw-r--r--doc/misc/ChangeLog.14
-rw-r--r--doc/misc/Makefile.in21
-rw-r--r--doc/misc/auth.texi2
-rw-r--r--doc/misc/autotype.texi2
-rw-r--r--doc/misc/bovine.texi2
-rw-r--r--doc/misc/calc.texi2
-rw-r--r--doc/misc/cc-mode.texi4
-rw-r--r--doc/misc/cl.texi2
-rw-r--r--doc/misc/dbus.texi2
-rw-r--r--doc/misc/dired-x.texi2
-rw-r--r--doc/misc/ebrowse.texi2
-rw-r--r--doc/misc/ede.texi2
-rw-r--r--doc/misc/ediff.texi2
-rw-r--r--doc/misc/edt.texi2
-rw-r--r--doc/misc/efaq-w32.texi2
-rw-r--r--doc/misc/efaq.texi2
-rw-r--r--doc/misc/eglot.texi9
-rw-r--r--doc/misc/eieio.texi2
-rw-r--r--doc/misc/emacs-gnutls.texi2
-rw-r--r--doc/misc/emacs-mime.texi2
-rw-r--r--doc/misc/epa.texi2
-rw-r--r--doc/misc/erc.texi374
-rw-r--r--doc/misc/ert.texi2
-rw-r--r--doc/misc/eshell.texi42
-rw-r--r--doc/misc/eudc.texi2
-rw-r--r--doc/misc/eww.texi14
-rw-r--r--doc/misc/flymake.texi4
-rw-r--r--doc/misc/forms.texi2
-rw-r--r--doc/misc/gnus-faq.texi2
-rw-r--r--doc/misc/gnus.texi2
-rw-r--r--doc/misc/htmlfontify.texi2
-rw-r--r--doc/misc/idlwave.texi2
-rw-r--r--doc/misc/ido.texi2
-rw-r--r--doc/misc/info.texi7
-rw-r--r--doc/misc/mairix-el.texi2
-rw-r--r--doc/misc/message.texi2
-rw-r--r--doc/misc/mh-e.texi2
-rw-r--r--doc/misc/modus-themes.org2
-rw-r--r--doc/misc/newsticker.texi2
-rw-r--r--doc/misc/nxml-mode.texi2
-rw-r--r--doc/misc/octave-mode.texi2
-rw-r--r--doc/misc/org-setup.org2
-rw-r--r--doc/misc/org.org17
-rw-r--r--doc/misc/pcl-cvs.texi2
-rw-r--r--doc/misc/pgg.texi2
-rw-r--r--doc/misc/rcirc.texi2
-rw-r--r--doc/misc/reftex.texi2
-rw-r--r--doc/misc/remember.texi2
-rw-r--r--doc/misc/sasl.texi2
-rw-r--r--doc/misc/sc.texi2
-rw-r--r--doc/misc/sem-user.texi2
-rw-r--r--doc/misc/semantic.texi2
-rw-r--r--doc/misc/ses.texi2
-rw-r--r--doc/misc/sieve.texi2
-rw-r--r--doc/misc/smtpmail.texi2
-rw-r--r--doc/misc/speedbar.texi2
-rw-r--r--doc/misc/srecode.texi2
-rw-r--r--doc/misc/texinfo.tex2
-rw-r--r--doc/misc/todo-mode.texi2
-rw-r--r--doc/misc/tramp.texi2
-rw-r--r--doc/misc/trampver.texi4
-rw-r--r--doc/misc/transient.texi2
-rw-r--r--doc/misc/url.texi2
-rw-r--r--doc/misc/use-package.texi2153
-rw-r--r--doc/misc/vhdl-mode.texi2
-rw-r--r--doc/misc/vip.texi2
-rw-r--r--doc/misc/viper.texi2
-rw-r--r--doc/misc/vtable.texi2
-rw-r--r--doc/misc/widget.texi2
-rw-r--r--doc/misc/wisent.texi2
-rw-r--r--doc/misc/woman.texi2
-rw-r--r--etc/CALC-NEWS2
-rw-r--r--etc/ChangeLog.12
-rw-r--r--etc/DEBUG11
-rw-r--r--etc/DISTRIB2
-rw-r--r--etc/ERC-NEWS17
-rw-r--r--etc/ETAGS.EBNF2
-rw-r--r--etc/ETAGS.README2
-rw-r--r--etc/HELLO4
-rw-r--r--etc/MACHINES2
-rw-r--r--etc/MH-E-NEWS2
-rw-r--r--etc/NEWS893
-rw-r--r--etc/NEWS.1-172
-rw-r--r--etc/NEWS.182
-rw-r--r--etc/NEWS.192
-rw-r--r--etc/NEWS.202
-rw-r--r--etc/NEWS.212
-rw-r--r--etc/NEWS.222
-rw-r--r--etc/NEWS.232
-rw-r--r--etc/NEWS.242
-rw-r--r--etc/NEWS.252
-rw-r--r--etc/NEWS.262
-rw-r--r--etc/NEWS.272
-rw-r--r--etc/NEWS.282
-rw-r--r--etc/NEXTSTEP2
-rw-r--r--etc/NXML-NEWS2
-rw-r--r--etc/ORG-NEWS12
-rw-r--r--etc/PROBLEMS16
-rw-r--r--etc/README2
-rw-r--r--etc/TERMS2
-rw-r--r--etc/TODO2
-rw-r--r--etc/charsets/README2
-rw-r--r--etc/compilation.txt2
-rw-r--r--etc/edt-user.el2
-rw-r--r--etc/emacs-buffer.gdb2
-rw-r--r--etc/emacs.metainfo.xml2
-rw-r--r--etc/emacs_lldb.py2
-rw-r--r--etc/emacsclient-mail.desktop4
-rw-r--r--etc/emacsclient.desktop2
-rw-r--r--etc/enriched.txt2
-rw-r--r--etc/forms/forms-d2.el2
-rw-r--r--etc/gnus-tut.txt2
-rw-r--r--etc/grep.txt2
-rw-r--r--etc/images/README8
-rw-r--r--etc/images/custom/README2
-rw-r--r--etc/images/ezimage/README2
-rw-r--r--etc/images/gnus/README6
-rw-r--r--etc/images/gnus/gnus.svg2
-rw-r--r--etc/images/gud/README2
-rw-r--r--etc/images/icons/README8
-rw-r--r--etc/images/icons/hicolor/scalable/apps/emacs.svg2
-rw-r--r--etc/images/icons/hicolor/scalable/apps/emacs23.svg2
-rw-r--r--etc/images/icons/hicolor/scalable/mimetypes/emacs-document23.svg2
-rw-r--r--etc/images/mpc/README2
-rw-r--r--etc/images/newsticker/README2
-rw-r--r--etc/images/smilies/README2
-rw-r--r--etc/images/smilies/grayscale/README2
-rw-r--r--etc/images/smilies/medium/README2
-rw-r--r--etc/images/splash.svg2
-rw-r--r--etc/images/tabs/README2
-rw-r--r--etc/images/tree-widget/default/README2
-rw-r--r--etc/images/tree-widget/folder/README2
-rw-r--r--etc/org.gnu.emacs.defaults.gschema.xml2
-rw-r--r--etc/org/README2
-rw-r--r--etc/package-keyring.gpgbin2069 -> 2043 bytes
-rw-r--r--etc/ps-prin0.ps2
-rw-r--r--etc/ps-prin1.ps2
-rw-r--r--etc/refcards/Makefile2
-rw-r--r--etc/refcards/README2
-rw-r--r--etc/refcards/calccard.tex2
-rw-r--r--etc/refcards/cs-dired-ref.tex2
-rw-r--r--etc/refcards/cs-refcard.tex2
-rw-r--r--etc/refcards/cs-survival.tex2
-rw-r--r--etc/refcards/de-refcard.tex2
-rw-r--r--etc/refcards/dired-ref.tex2
-rw-r--r--etc/refcards/emacsver.tex.in2
-rw-r--r--etc/refcards/fr-dired-ref.tex2
-rw-r--r--etc/refcards/fr-refcard.tex2
-rw-r--r--etc/refcards/fr-survival.tex2
-rw-r--r--etc/refcards/gnus-logo.eps2
-rw-r--r--etc/refcards/gnus-refcard.tex2
-rw-r--r--etc/refcards/orgcard.tex2
-rw-r--r--etc/refcards/pdflayout.sty2
-rw-r--r--etc/refcards/pl-refcard.tex2
-rw-r--r--etc/refcards/pt-br-refcard.tex2
-rw-r--r--etc/refcards/refcard.tex2
-rw-r--r--etc/refcards/ru-refcard.tex4
-rw-r--r--etc/refcards/sk-dired-ref.tex2
-rw-r--r--etc/refcards/sk-refcard.tex2
-rw-r--r--etc/refcards/sk-survival.tex2
-rw-r--r--etc/refcards/survival.tex2
-rw-r--r--etc/refcards/vipcard.tex2
-rw-r--r--etc/refcards/viperCard.tex2
-rw-r--r--etc/schema/locate.rnc2
-rw-r--r--etc/schema/relaxng.rnc2
-rw-r--r--etc/schema/schemas.xml2
-rw-r--r--etc/ses-example.ses2
-rw-r--r--etc/srecode/c.srt2
-rw-r--r--etc/srecode/cpp.srt2
-rw-r--r--etc/srecode/default.srt2
-rw-r--r--etc/srecode/doc-cpp.srt2
-rw-r--r--etc/srecode/doc-default.srt2
-rw-r--r--etc/srecode/doc-java.srt2
-rw-r--r--etc/srecode/ede-autoconf.srt2
-rw-r--r--etc/srecode/ede-make.srt2
-rw-r--r--etc/srecode/el.srt2
-rw-r--r--etc/srecode/getset-cpp.srt2
-rw-r--r--etc/srecode/java.srt2
-rw-r--r--etc/srecode/make.srt2
-rw-r--r--etc/srecode/proj-test.srt2
-rw-r--r--etc/srecode/template.srt2
-rw-r--r--etc/srecode/test.srt2
-rw-r--r--etc/srecode/texi.srt2
-rw-r--r--etc/srecode/wisent.srt2
-rw-r--r--etc/themes/adwaita-theme.el2
-rw-r--r--etc/themes/deeper-blue-theme.el2
-rw-r--r--etc/themes/dichromacy-theme.el2
-rw-r--r--etc/themes/leuven-dark-theme.el2
-rw-r--r--etc/themes/leuven-theme.el2
-rw-r--r--etc/themes/light-blue-theme.el2
-rw-r--r--etc/themes/manoj-dark-theme.el2
-rw-r--r--etc/themes/misterioso-theme.el2
-rw-r--r--etc/themes/modus-operandi-theme.el2
-rw-r--r--etc/themes/modus-themes.el2
-rw-r--r--etc/themes/modus-vivendi-theme.el2
-rw-r--r--etc/themes/tango-dark-theme.el2
-rw-r--r--etc/themes/tango-theme.el2
-rw-r--r--etc/themes/tsdh-dark-theme.el2
-rw-r--r--etc/themes/tsdh-light-theme.el2
-rw-r--r--etc/themes/wheatgrass-theme.el2
-rw-r--r--etc/themes/whiteboard-theme.el2
-rw-r--r--etc/themes/wombat-theme.el2
-rw-r--r--etc/tutorials/TUTORIAL2
-rw-r--r--etc/tutorials/TUTORIAL.bg2
-rw-r--r--etc/tutorials/TUTORIAL.cn8
-rw-r--r--etc/tutorials/TUTORIAL.cs2
-rw-r--r--etc/tutorials/TUTORIAL.de2
-rw-r--r--etc/tutorials/TUTORIAL.el_GR2
-rw-r--r--etc/tutorials/TUTORIAL.eo2
-rw-r--r--etc/tutorials/TUTORIAL.es2
-rw-r--r--etc/tutorials/TUTORIAL.fr4
-rw-r--r--etc/tutorials/TUTORIAL.he2
-rw-r--r--etc/tutorials/TUTORIAL.it2
-rw-r--r--etc/tutorials/TUTORIAL.ja2
-rw-r--r--etc/tutorials/TUTORIAL.ko2
-rw-r--r--etc/tutorials/TUTORIAL.nl4
-rw-r--r--etc/tutorials/TUTORIAL.pl2
-rw-r--r--etc/tutorials/TUTORIAL.pt_BR2
-rw-r--r--etc/tutorials/TUTORIAL.ro2
-rw-r--r--etc/tutorials/TUTORIAL.ru2
-rw-r--r--etc/tutorials/TUTORIAL.sk2
-rw-r--r--etc/tutorials/TUTORIAL.sl2
-rw-r--r--etc/tutorials/TUTORIAL.sv2
-rw-r--r--etc/tutorials/TUTORIAL.th2
-rw-r--r--etc/tutorials/TUTORIAL.uk2
-rw-r--r--etc/tutorials/TUTORIAL.zh2
-rw-r--r--etc/w32-feature.el2
-rw-r--r--leim/ChangeLog.12
-rw-r--r--leim/Makefile.in2
-rw-r--r--leim/README2
-rw-r--r--leim/leim-ext.el2
-rw-r--r--lib-src/ChangeLog.12
-rw-r--r--lib-src/Makefile.in2
-rw-r--r--lib-src/be_resources.cc2
-rw-r--r--lib-src/ebrowse.c2
-rw-r--r--lib-src/emacsclient.c2
-rw-r--r--lib-src/etags.c78
-rw-r--r--lib-src/hexl.c2
-rw-r--r--lib-src/make-docfile.c2
-rw-r--r--lib-src/make-fingerprint.c2
-rw-r--r--lib-src/movemail.c2
-rw-r--r--lib-src/ntlib.c2
-rw-r--r--lib-src/ntlib.h2
-rw-r--r--lib-src/pop.c2
-rw-r--r--lib-src/pop.h2
-rwxr-xr-xlib-src/rcs2log4
-rw-r--r--lib-src/seccomp-filter.c4
-rw-r--r--lib-src/update-game-score.c2
-rw-r--r--lib/Makefile.in2
-rw-r--r--lib/_Noreturn.h2
-rw-r--r--lib/acl-errno-valid.c2
-rw-r--r--lib/acl-internal.c2
-rw-r--r--lib/acl-internal.h2
-rw-r--r--lib/acl.h2
-rw-r--r--lib/acl_entries.c2
-rw-r--r--lib/af_alg.h2
-rw-r--r--lib/alloca.in.h4
-rw-r--r--lib/allocator.c2
-rw-r--r--lib/allocator.h2
-rw-r--r--lib/arg-nonnull.h2
-rw-r--r--lib/assert.in.h2
-rw-r--r--lib/at-func.c2
-rw-r--r--lib/attribute.h2
-rw-r--r--lib/binary-io.c2
-rw-r--r--lib/binary-io.h3
-rw-r--r--lib/byteswap.in.h2
-rw-r--r--lib/c++defs.h2
-rw-r--r--lib/c-ctype.c2
-rw-r--r--lib/c-ctype.h3
-rw-r--r--lib/c-strcase.h2
-rw-r--r--lib/c-strcasecmp.c3
-rw-r--r--lib/c-strncasecmp.c3
-rw-r--r--lib/canonicalize-lgpl.c2
-rw-r--r--lib/careadlinkat.c4
-rw-r--r--lib/careadlinkat.h2
-rw-r--r--lib/cdefs.h2
-rw-r--r--lib/cloexec.c3
-rw-r--r--lib/cloexec.h2
-rw-r--r--lib/close-stream.c3
-rw-r--r--lib/close-stream.h2
-rw-r--r--lib/copy-file-range.c2
-rw-r--r--lib/count-leading-zeros.c2
-rw-r--r--lib/count-leading-zeros.h2
-rw-r--r--lib/count-one-bits.c2
-rw-r--r--lib/count-one-bits.h2
-rw-r--r--lib/count-trailing-zeros.c2
-rw-r--r--lib/count-trailing-zeros.h2
-rw-r--r--lib/diffseq.h4
-rw-r--r--lib/dirent.in.h2
-rw-r--r--lib/dirfd.c2
-rw-r--r--lib/dtoastr.c2
-rw-r--r--lib/dtotimespec.c2
-rw-r--r--lib/dup2.c3
-rw-r--r--lib/dynarray.h2
-rw-r--r--lib/eloop-threshold.h2
-rw-r--r--lib/errno.in.h2
-rw-r--r--lib/euidaccess.c2
-rw-r--r--lib/execinfo.c2
-rw-r--r--lib/execinfo.in.h2
-rw-r--r--lib/explicit_bzero.c2
-rw-r--r--lib/faccessat.c2
-rw-r--r--lib/fchmodat.c2
-rw-r--r--lib/fcntl.c2
-rw-r--r--lib/fcntl.in.h2
-rw-r--r--lib/fdopendir.c2
-rw-r--r--lib/file-has-acl.c2
-rw-r--r--lib/filemode.c2
-rw-r--r--lib/filemode.h4
-rw-r--r--lib/filename.h2
-rw-r--r--lib/filevercmp.c2
-rw-r--r--lib/filevercmp.h2
-rw-r--r--lib/fingerprint.c2
-rw-r--r--lib/fingerprint.h2
-rw-r--r--lib/flexmember.h2
-rw-r--r--lib/fpending.c4
-rw-r--r--lib/fpending.h4
-rw-r--r--lib/free.c2
-rw-r--r--lib/fstatat.c2
-rw-r--r--lib/fsusage.c4
-rw-r--r--lib/fsusage.h2
-rw-r--r--lib/fsync.c2
-rw-r--r--lib/ftoastr.c2
-rw-r--r--lib/ftoastr.h2
-rw-r--r--lib/futimens.c2
-rw-r--r--lib/get-permissions.c2
-rw-r--r--lib/getdtablesize.c2
-rw-r--r--lib/getgroups.c3
-rw-r--r--lib/getloadavg.c4
-rw-r--r--lib/getopt-cdefs.in.h2
-rw-r--r--lib/getopt-core.h2
-rw-r--r--lib/getopt-ext.h2
-rw-r--r--lib/getopt-pfx-core.h2
-rw-r--r--lib/getopt-pfx-ext.h2
-rw-r--r--lib/getopt.c2
-rw-r--r--lib/getopt.in.h2
-rw-r--r--lib/getopt1.c2
-rw-r--r--lib/getopt_int.h2
-rw-r--r--lib/getrandom.c2
-rw-r--r--lib/gettext.h4
-rw-r--r--lib/gettime.c3
-rw-r--r--lib/gettimeofday.c3
-rw-r--r--lib/gnulib.mk.in2
-rw-r--r--lib/group-member.c4
-rw-r--r--lib/idx.h2
-rw-r--r--lib/ieee754.in.h2
-rw-r--r--lib/ignore-value.h2
-rw-r--r--lib/intprops-internal.h2
-rw-r--r--lib/intprops.h2
-rw-r--r--lib/inttypes.in.h2
-rw-r--r--lib/lchmod.c2
-rw-r--r--lib/libc-config.h2
-rw-r--r--lib/limits.in.h2
-rw-r--r--lib/lstat.c2
-rw-r--r--lib/malloc.c3
-rw-r--r--lib/malloc/dynarray-skeleton.c2
-rw-r--r--lib/malloc/dynarray.h2
-rw-r--r--lib/malloc/dynarray_at_failure.c2
-rw-r--r--lib/malloc/dynarray_emplace_enlarge.c2
-rw-r--r--lib/malloc/dynarray_finalize.c2
-rw-r--r--lib/malloc/dynarray_resize.c2
-rw-r--r--lib/malloc/dynarray_resize_clear.c2
-rw-r--r--lib/malloc/scratch_buffer.h2
-rw-r--r--lib/malloc/scratch_buffer_dupfree.c2
-rw-r--r--lib/malloc/scratch_buffer_grow.c2
-rw-r--r--lib/malloc/scratch_buffer_grow_preserve.c2
-rw-r--r--lib/malloc/scratch_buffer_set_array_size.c2
-rw-r--r--lib/md5-stream.c4
-rw-r--r--lib/md5.c4
-rw-r--r--lib/md5.h4
-rw-r--r--lib/memmem.c4
-rw-r--r--lib/mempcpy.c2
-rw-r--r--lib/memrchr.c4
-rw-r--r--lib/mini-gmp-gnulib.c2
-rw-r--r--lib/minmax.h2
-rw-r--r--lib/mkostemp.c2
-rw-r--r--lib/mktime-internal.h2
-rw-r--r--lib/mktime.c2
-rw-r--r--lib/nanosleep.c3
-rw-r--r--lib/nproc.c2
-rw-r--r--lib/nproc.h2
-rw-r--r--lib/nstrftime.c2
-rw-r--r--lib/open.c2
-rw-r--r--lib/openat-priv.h2
-rw-r--r--lib/openat-proc.c2
-rw-r--r--lib/openat.h2
-rw-r--r--lib/pathmax.h2
-rw-r--r--lib/pipe2.c2
-rw-r--r--lib/pselect.c2
-rw-r--r--lib/pthread_sigmask.c2
-rw-r--r--lib/qcopy-acl.c2
-rw-r--r--lib/rawmemchr.c2
-rw-r--r--lib/rawmemchr.valgrind2
-rw-r--r--lib/readlink.c2
-rw-r--r--lib/readlinkat.c2
-rw-r--r--lib/realloc.c2
-rw-r--r--lib/regcomp.c2
-rw-r--r--lib/regex.c2
-rw-r--r--lib/regex.h2
-rw-r--r--lib/regex_internal.c2
-rw-r--r--lib/regex_internal.h2
-rw-r--r--lib/regexec.c2
-rw-r--r--lib/root-uid.h2
-rw-r--r--lib/save-cwd.c2
-rw-r--r--lib/save-cwd.h4
-rw-r--r--lib/scratch_buffer.h2
-rw-r--r--lib/set-permissions.c2
-rw-r--r--lib/sha1.c3
-rw-r--r--lib/sha1.h2
-rw-r--r--lib/sha256.c2
-rw-r--r--lib/sha256.h2
-rw-r--r--lib/sha512.c2
-rw-r--r--lib/sha512.h2
-rw-r--r--lib/sig2str.c3
-rw-r--r--lib/sig2str.h2
-rw-r--r--lib/sigdescr_np.c2
-rw-r--r--lib/signal.in.h2
-rw-r--r--lib/stat-time.c2
-rw-r--r--lib/stat-time.h2
-rw-r--r--lib/stdalign.in.h2
-rw-r--r--lib/stdckdint.in.h2
-rw-r--r--lib/stddef.in.h2
-rw-r--r--lib/stdint.in.h2
-rw-r--r--lib/stdio-impl.h2
-rw-r--r--lib/stdio.in.h2
-rw-r--r--lib/stdlib.in.h3
-rw-r--r--lib/stpcpy.c2
-rw-r--r--lib/str-two-way.h2
-rw-r--r--lib/strftime.h2
-rw-r--r--lib/string.in.h2
-rw-r--r--lib/strnlen.c2
-rw-r--r--lib/strtoimax.c4
-rw-r--r--lib/strtol.c4
-rw-r--r--lib/strtoll.c4
-rw-r--r--lib/symlink.c2
-rw-r--r--lib/sys_random.in.h2
-rw-r--r--lib/sys_select.in.h2
-rw-r--r--lib/sys_stat.in.h2
-rw-r--r--lib/sys_time.in.h2
-rw-r--r--lib/sys_types.in.h2
-rw-r--r--lib/tempname.c2
-rw-r--r--lib/tempname.h2
-rw-r--r--lib/time-internal.h2
-rw-r--r--lib/time.in.h2
-rw-r--r--lib/time_r.c3
-rw-r--r--lib/time_rz.c2
-rw-r--r--lib/timegm.c2
-rw-r--r--lib/timespec-add.c2
-rw-r--r--lib/timespec-sub.c2
-rw-r--r--lib/timespec.c2
-rw-r--r--lib/timespec.h2
-rw-r--r--lib/u64.c2
-rw-r--r--lib/u64.h2
-rw-r--r--lib/unistd.c2
-rw-r--r--lib/unistd.in.h2
-rw-r--r--lib/unlocked-io.h2
-rw-r--r--lib/utimens.c2
-rw-r--r--lib/utimens.h2
-rw-r--r--lib/utimensat.c2
-rw-r--r--lib/verify.h2
-rw-r--r--lib/vla.h2
-rw-r--r--lib/warn-on-use.h2
-rw-r--r--lib/xalloc-oversized.h3
-rw-r--r--lisp/ChangeLog.12
-rw-r--r--lisp/ChangeLog.102
-rw-r--r--lisp/ChangeLog.112
-rw-r--r--lisp/ChangeLog.122
-rw-r--r--lisp/ChangeLog.132
-rw-r--r--lisp/ChangeLog.146
-rw-r--r--lisp/ChangeLog.154
-rw-r--r--lisp/ChangeLog.1616
-rw-r--r--lisp/ChangeLog.176
-rw-r--r--lisp/ChangeLog.22
-rw-r--r--lisp/ChangeLog.32
-rw-r--r--lisp/ChangeLog.42
-rw-r--r--lisp/ChangeLog.52
-rw-r--r--lisp/ChangeLog.62
-rw-r--r--lisp/ChangeLog.74
-rw-r--r--lisp/ChangeLog.82
-rw-r--r--lisp/ChangeLog.92
-rw-r--r--lisp/Makefile.in2
-rw-r--r--lisp/abbrev.el2
-rw-r--r--lisp/align.el2
-rw-r--r--lisp/allout-widgets.el2
-rw-r--r--lisp/allout.el2
-rw-r--r--lisp/ansi-color.el2
-rw-r--r--lisp/ansi-osc.el10
-rw-r--r--lisp/apropos.el4
-rw-r--r--lisp/arc-mode.el2
-rw-r--r--lisp/array.el2
-rw-r--r--lisp/auth-source-pass.el14
-rw-r--r--lisp/auth-source.el2
-rw-r--r--lisp/autoinsert.el2
-rw-r--r--lisp/autorevert.el2
-rw-r--r--lisp/avoid.el2
-rw-r--r--lisp/battery.el2
-rw-r--r--lisp/bindings.el15
-rw-r--r--lisp/bookmark.el2
-rw-r--r--lisp/bs.el37
-rw-r--r--lisp/buff-menu.el25
-rw-r--r--lisp/button.el2
-rw-r--r--lisp/calc/calc-aent.el2
-rw-r--r--lisp/calc/calc-alg.el2
-rw-r--r--lisp/calc/calc-arith.el2
-rw-r--r--lisp/calc/calc-bin.el2
-rw-r--r--lisp/calc/calc-comb.el2
-rw-r--r--lisp/calc/calc-cplx.el2
-rw-r--r--lisp/calc/calc-embed.el2
-rw-r--r--lisp/calc/calc-ext.el2
-rw-r--r--lisp/calc/calc-fin.el2
-rw-r--r--lisp/calc/calc-forms.el2
-rw-r--r--lisp/calc/calc-frac.el2
-rw-r--r--lisp/calc/calc-funcs.el2
-rw-r--r--lisp/calc/calc-graph.el2
-rw-r--r--lisp/calc/calc-help.el2
-rw-r--r--lisp/calc/calc-incom.el2
-rw-r--r--lisp/calc/calc-keypd.el2
-rw-r--r--lisp/calc/calc-lang.el2
-rw-r--r--lisp/calc/calc-macs.el2
-rw-r--r--lisp/calc/calc-map.el2
-rw-r--r--lisp/calc/calc-math.el2
-rw-r--r--lisp/calc/calc-menu.el2
-rw-r--r--lisp/calc/calc-misc.el2
-rw-r--r--lisp/calc/calc-mode.el2
-rw-r--r--lisp/calc/calc-mtx.el2
-rw-r--r--lisp/calc/calc-nlfit.el2
-rw-r--r--lisp/calc/calc-poly.el2
-rw-r--r--lisp/calc/calc-prog.el2
-rw-r--r--lisp/calc/calc-rewr.el2
-rw-r--r--lisp/calc/calc-rules.el2
-rw-r--r--lisp/calc/calc-sel.el2
-rw-r--r--lisp/calc/calc-stat.el2
-rw-r--r--lisp/calc/calc-store.el2
-rw-r--r--lisp/calc/calc-stuff.el2
-rw-r--r--lisp/calc/calc-trail.el2
-rw-r--r--lisp/calc/calc-undo.el2
-rw-r--r--lisp/calc/calc-units.el2
-rw-r--r--lisp/calc/calc-vec.el2
-rw-r--r--lisp/calc/calc-yank.el2
-rw-r--r--lisp/calc/calc.el2
-rw-r--r--lisp/calc/calcalg2.el2
-rw-r--r--lisp/calc/calcalg3.el2
-rw-r--r--lisp/calc/calccomp.el2
-rw-r--r--lisp/calc/calcsel2.el2
-rw-r--r--lisp/calculator.el2
-rw-r--r--lisp/calendar/appt.el2
-rw-r--r--lisp/calendar/cal-bahai.el2
-rw-r--r--lisp/calendar/cal-china.el2
-rw-r--r--lisp/calendar/cal-coptic.el2
-rw-r--r--lisp/calendar/cal-dst.el2
-rw-r--r--lisp/calendar/cal-french.el2
-rw-r--r--lisp/calendar/cal-hebrew.el2
-rw-r--r--lisp/calendar/cal-html.el2
-rw-r--r--lisp/calendar/cal-islam.el2
-rw-r--r--lisp/calendar/cal-iso.el2
-rw-r--r--lisp/calendar/cal-julian.el2
-rw-r--r--lisp/calendar/cal-mayan.el2
-rw-r--r--lisp/calendar/cal-menu.el2
-rw-r--r--lisp/calendar/cal-move.el2
-rw-r--r--lisp/calendar/cal-persia.el2
-rw-r--r--lisp/calendar/cal-tex.el2
-rw-r--r--lisp/calendar/cal-x.el2
-rw-r--r--lisp/calendar/calendar.el2
-rw-r--r--lisp/calendar/diary-lib.el2
-rw-r--r--lisp/calendar/holidays.el2
-rw-r--r--lisp/calendar/icalendar.el2
-rw-r--r--lisp/calendar/iso8601.el2
-rw-r--r--lisp/calendar/lunar.el2
-rw-r--r--lisp/calendar/parse-time.el2
-rw-r--r--lisp/calendar/solar.el2
-rw-r--r--lisp/calendar/time-date.el2
-rw-r--r--lisp/calendar/timeclock.el2
-rw-r--r--lisp/calendar/todo-mode.el2
-rw-r--r--lisp/case-table.el2
-rw-r--r--lisp/cdl.el2
-rw-r--r--lisp/cedet/ChangeLog.14
-rw-r--r--lisp/cedet/cedet-cscope.el2
-rw-r--r--lisp/cedet/cedet-files.el2
-rw-r--r--lisp/cedet/cedet-global.el2
-rw-r--r--lisp/cedet/cedet-idutils.el2
-rw-r--r--lisp/cedet/cedet.el2
-rw-r--r--lisp/cedet/data-debug.el2
-rw-r--r--lisp/cedet/ede.el2
-rw-r--r--lisp/cedet/ede/auto.el2
-rw-r--r--lisp/cedet/ede/autoconf-edit.el2
-rw-r--r--lisp/cedet/ede/base.el2
-rw-r--r--lisp/cedet/ede/config.el2
-rw-r--r--lisp/cedet/ede/cpp-root.el2
-rw-r--r--lisp/cedet/ede/custom.el2
-rw-r--r--lisp/cedet/ede/detect.el2
-rw-r--r--lisp/cedet/ede/dired.el2
-rw-r--r--lisp/cedet/ede/emacs.el2
-rw-r--r--lisp/cedet/ede/files.el2
-rw-r--r--lisp/cedet/ede/generic.el2
-rw-r--r--lisp/cedet/ede/linux.el2
-rw-r--r--lisp/cedet/ede/locate.el2
-rw-r--r--lisp/cedet/ede/make.el2
-rw-r--r--lisp/cedet/ede/makefile-edit.el2
-rw-r--r--lisp/cedet/ede/pconf.el2
-rw-r--r--lisp/cedet/ede/pmake.el2
-rw-r--r--lisp/cedet/ede/proj-archive.el2
-rw-r--r--lisp/cedet/ede/proj-aux.el2
-rw-r--r--lisp/cedet/ede/proj-comp.el2
-rw-r--r--lisp/cedet/ede/proj-elisp.el2
-rw-r--r--lisp/cedet/ede/proj-info.el2
-rw-r--r--lisp/cedet/ede/proj-misc.el2
-rw-r--r--lisp/cedet/ede/proj-obj.el2
-rw-r--r--lisp/cedet/ede/proj-prog.el2
-rw-r--r--lisp/cedet/ede/proj-scheme.el2
-rw-r--r--lisp/cedet/ede/proj-shared.el2
-rw-r--r--lisp/cedet/ede/proj.el2
-rw-r--r--lisp/cedet/ede/project-am.el2
-rw-r--r--lisp/cedet/ede/shell.el2
-rw-r--r--lisp/cedet/ede/simple.el2
-rw-r--r--lisp/cedet/ede/source.el2
-rw-r--r--lisp/cedet/ede/speedbar.el2
-rw-r--r--lisp/cedet/ede/srecode.el2
-rw-r--r--lisp/cedet/ede/system.el2
-rw-r--r--lisp/cedet/ede/util.el2
-rw-r--r--lisp/cedet/mode-local.el2
-rw-r--r--lisp/cedet/pulse.el2
-rw-r--r--lisp/cedet/semantic.el2
-rw-r--r--lisp/cedet/semantic/analyze.el2
-rw-r--r--lisp/cedet/semantic/analyze/complete.el2
-rw-r--r--lisp/cedet/semantic/analyze/debug.el2
-rw-r--r--lisp/cedet/semantic/analyze/fcn.el2
-rw-r--r--lisp/cedet/semantic/analyze/refs.el2
-rw-r--r--lisp/cedet/semantic/bovine.el2
-rw-r--r--lisp/cedet/semantic/bovine/c.el2
-rw-r--r--lisp/cedet/semantic/bovine/debug.el2
-rw-r--r--lisp/cedet/semantic/bovine/el.el2
-rw-r--r--lisp/cedet/semantic/bovine/gcc.el2
-rw-r--r--lisp/cedet/semantic/bovine/grammar.el2
-rw-r--r--lisp/cedet/semantic/bovine/make.el2
-rw-r--r--lisp/cedet/semantic/bovine/scm.el2
-rw-r--r--lisp/cedet/semantic/chart.el2
-rw-r--r--lisp/cedet/semantic/complete.el2
-rw-r--r--lisp/cedet/semantic/ctxt.el2
-rw-r--r--lisp/cedet/semantic/db-debug.el2
-rw-r--r--lisp/cedet/semantic/db-ebrowse.el2
-rw-r--r--lisp/cedet/semantic/db-el.el2
-rw-r--r--lisp/cedet/semantic/db-file.el2
-rw-r--r--lisp/cedet/semantic/db-find.el2
-rw-r--r--lisp/cedet/semantic/db-global.el2
-rw-r--r--lisp/cedet/semantic/db-javascript.el2
-rw-r--r--lisp/cedet/semantic/db-mode.el2
-rw-r--r--lisp/cedet/semantic/db-ref.el2
-rw-r--r--lisp/cedet/semantic/db-typecache.el2
-rw-r--r--lisp/cedet/semantic/db.el2
-rw-r--r--lisp/cedet/semantic/debug.el2
-rw-r--r--lisp/cedet/semantic/decorate.el2
-rw-r--r--lisp/cedet/semantic/decorate/include.el2
-rw-r--r--lisp/cedet/semantic/decorate/mode.el2
-rw-r--r--lisp/cedet/semantic/dep.el2
-rw-r--r--lisp/cedet/semantic/doc.el2
-rw-r--r--lisp/cedet/semantic/ede-grammar.el2
-rw-r--r--lisp/cedet/semantic/edit.el2
-rw-r--r--lisp/cedet/semantic/find.el2
-rw-r--r--lisp/cedet/semantic/format.el2
-rw-r--r--lisp/cedet/semantic/fw.el2
-rw-r--r--lisp/cedet/semantic/grammar.el2
-rw-r--r--lisp/cedet/semantic/grm-wy-boot.el2
-rw-r--r--lisp/cedet/semantic/html.el2
-rw-r--r--lisp/cedet/semantic/ia-sb.el2
-rw-r--r--lisp/cedet/semantic/ia.el2
-rw-r--r--lisp/cedet/semantic/idle.el2
-rw-r--r--lisp/cedet/semantic/imenu.el2
-rw-r--r--lisp/cedet/semantic/java.el2
-rw-r--r--lisp/cedet/semantic/lex-spp.el2
-rw-r--r--lisp/cedet/semantic/lex.el2
-rw-r--r--lisp/cedet/semantic/mru-bookmark.el2
-rw-r--r--lisp/cedet/semantic/sb.el2
-rw-r--r--lisp/cedet/semantic/scope.el2
-rw-r--r--lisp/cedet/semantic/senator.el2
-rw-r--r--lisp/cedet/semantic/sort.el2
-rw-r--r--lisp/cedet/semantic/symref.el2
-rw-r--r--lisp/cedet/semantic/symref/cscope.el2
-rw-r--r--lisp/cedet/semantic/symref/filter.el2
-rw-r--r--lisp/cedet/semantic/symref/global.el2
-rw-r--r--lisp/cedet/semantic/symref/grep.el2
-rw-r--r--lisp/cedet/semantic/symref/idutils.el2
-rw-r--r--lisp/cedet/semantic/symref/list.el2
-rw-r--r--lisp/cedet/semantic/tag-file.el2
-rw-r--r--lisp/cedet/semantic/tag-ls.el2
-rw-r--r--lisp/cedet/semantic/tag-write.el2
-rw-r--r--lisp/cedet/semantic/tag.el2
-rw-r--r--lisp/cedet/semantic/texi.el2
-rw-r--r--lisp/cedet/semantic/util-modes.el2
-rw-r--r--lisp/cedet/semantic/util.el2
-rw-r--r--lisp/cedet/semantic/wisent.el2
-rw-r--r--lisp/cedet/semantic/wisent/comp.el2
-rw-r--r--lisp/cedet/semantic/wisent/grammar.el2
-rw-r--r--lisp/cedet/semantic/wisent/java-tags.el2
-rw-r--r--lisp/cedet/semantic/wisent/javascript.el2
-rw-r--r--lisp/cedet/semantic/wisent/python.el2
-rw-r--r--lisp/cedet/semantic/wisent/wisent.el2
-rw-r--r--lisp/cedet/srecode.el2
-rw-r--r--lisp/cedet/srecode/args.el2
-rw-r--r--lisp/cedet/srecode/compile.el2
-rw-r--r--lisp/cedet/srecode/cpp.el2
-rw-r--r--lisp/cedet/srecode/ctxt.el2
-rw-r--r--lisp/cedet/srecode/dictionary.el2
-rw-r--r--lisp/cedet/srecode/document.el2
-rw-r--r--lisp/cedet/srecode/el.el2
-rw-r--r--lisp/cedet/srecode/expandproto.el2
-rw-r--r--lisp/cedet/srecode/extract.el2
-rw-r--r--lisp/cedet/srecode/fields.el2
-rw-r--r--lisp/cedet/srecode/filters.el2
-rw-r--r--lisp/cedet/srecode/find.el2
-rw-r--r--lisp/cedet/srecode/getset.el2
-rw-r--r--lisp/cedet/srecode/insert.el2
-rw-r--r--lisp/cedet/srecode/java.el2
-rw-r--r--lisp/cedet/srecode/map.el2
-rw-r--r--lisp/cedet/srecode/mode.el2
-rw-r--r--lisp/cedet/srecode/semantic.el2
-rw-r--r--lisp/cedet/srecode/srt-mode.el2
-rw-r--r--lisp/cedet/srecode/srt.el2
-rw-r--r--lisp/cedet/srecode/table.el2
-rw-r--r--lisp/cedet/srecode/template.el2
-rw-r--r--lisp/cedet/srecode/texi.el2
-rw-r--r--lisp/char-fold.el2
-rw-r--r--lisp/chistory.el2
-rw-r--r--lisp/cmuscheme.el2
-rw-r--r--lisp/color.el2
-rw-r--r--lisp/comint.el8
-rw-r--r--lisp/completion.el2
-rw-r--r--lisp/composite.el2
-rw-r--r--lisp/cus-dep.el2
-rw-r--r--lisp/cus-edit.el4
-rw-r--r--lisp/cus-face.el2
-rw-r--r--lisp/cus-start.el2
-rw-r--r--lisp/cus-theme.el2
-rw-r--r--lisp/custom.el2
-rw-r--r--lisp/dabbrev.el2
-rw-r--r--lisp/delim-col.el2
-rw-r--r--lisp/delsel.el2
-rw-r--r--lisp/descr-text.el2
-rw-r--r--lisp/desktop.el2
-rw-r--r--lisp/dframe.el2
-rw-r--r--lisp/dired-aux.el53
-rw-r--r--lisp/dired-x.el2
-rw-r--r--lisp/dired.el4
-rw-r--r--lisp/dirtrack.el2
-rw-r--r--lisp/disp-table.el2
-rw-r--r--lisp/display-fill-column-indicator.el2
-rw-r--r--lisp/display-line-numbers.el2
-rw-r--r--lisp/dnd.el2
-rw-r--r--lisp/doc-view.el2
-rw-r--r--lisp/dom.el2
-rw-r--r--lisp/dos-fns.el2
-rw-r--r--lisp/dos-vars.el2
-rw-r--r--lisp/dos-w32.el2
-rw-r--r--lisp/double.el2
-rw-r--r--lisp/dynamic-setting.el2
-rw-r--r--lisp/ebuff-menu.el2
-rw-r--r--lisp/echistory.el2
-rw-r--r--lisp/ecomplete.el2
-rw-r--r--lisp/edmacro.el2
-rw-r--r--lisp/ehelp.el2
-rw-r--r--lisp/elec-pair.el2
-rw-r--r--lisp/electric.el2
-rw-r--r--lisp/elide-head.el9
-rw-r--r--lisp/emacs-lisp/advice.el2
-rw-r--r--lisp/emacs-lisp/avl-tree.el2
-rw-r--r--lisp/emacs-lisp/backquote.el2
-rw-r--r--lisp/emacs-lisp/backtrace.el2
-rw-r--r--lisp/emacs-lisp/benchmark.el2
-rw-r--r--lisp/emacs-lisp/bindat.el2
-rw-r--r--lisp/emacs-lisp/byte-opt.el2
-rw-r--r--lisp/emacs-lisp/byte-run.el2
-rw-r--r--lisp/emacs-lisp/bytecomp.el2
-rw-r--r--lisp/emacs-lisp/cconv.el2
-rw-r--r--lisp/emacs-lisp/chart.el4
-rw-r--r--lisp/emacs-lisp/check-declare.el2
-rw-r--r--lisp/emacs-lisp/checkdoc.el27
-rw-r--r--lisp/emacs-lisp/cl-extra.el4
-rw-r--r--lisp/emacs-lisp/cl-generic.el2
-rw-r--r--lisp/emacs-lisp/cl-indent.el2
-rw-r--r--lisp/emacs-lisp/cl-lib.el2
-rw-r--r--lisp/emacs-lisp/cl-macs.el2
-rw-r--r--lisp/emacs-lisp/cl-preloaded.el2
-rw-r--r--lisp/emacs-lisp/cl-print.el2
-rw-r--r--lisp/emacs-lisp/cl-seq.el2
-rw-r--r--lisp/emacs-lisp/comp-cstr.el2
-rw-r--r--lisp/emacs-lisp/comp.el11
-rw-r--r--lisp/emacs-lisp/copyright.el2
-rw-r--r--lisp/emacs-lisp/crm.el2
-rw-r--r--lisp/emacs-lisp/cursor-sensor.el2
-rw-r--r--lisp/emacs-lisp/debug-early.el2
-rw-r--r--lisp/emacs-lisp/debug.el2
-rw-r--r--lisp/emacs-lisp/derived.el2
-rw-r--r--lisp/emacs-lisp/disass.el2
-rw-r--r--lisp/emacs-lisp/easy-mmode.el2
-rw-r--r--lisp/emacs-lisp/easymenu.el2
-rw-r--r--lisp/emacs-lisp/edebug.el8
-rw-r--r--lisp/emacs-lisp/eieio-base.el2
-rw-r--r--lisp/emacs-lisp/eieio-core.el2
-rw-r--r--lisp/emacs-lisp/eieio-custom.el2
-rw-r--r--lisp/emacs-lisp/eieio-datadebug.el2
-rw-r--r--lisp/emacs-lisp/eieio-opt.el2
-rw-r--r--lisp/emacs-lisp/eieio-speedbar.el2
-rw-r--r--lisp/emacs-lisp/eieio.el2
-rw-r--r--lisp/emacs-lisp/eldoc.el2
-rw-r--r--lisp/emacs-lisp/elint.el2
-rw-r--r--lisp/emacs-lisp/elp.el2
-rw-r--r--lisp/emacs-lisp/ert-x.el55
-rw-r--r--lisp/emacs-lisp/ert.el2
-rw-r--r--lisp/emacs-lisp/ewoc.el2
-rw-r--r--lisp/emacs-lisp/faceup.el2
-rw-r--r--lisp/emacs-lisp/find-func.el2
-rw-r--r--lisp/emacs-lisp/float-sup.el2
-rw-r--r--lisp/emacs-lisp/generate-lisp-file.el2
-rw-r--r--lisp/emacs-lisp/generator.el2
-rw-r--r--lisp/emacs-lisp/generic.el2
-rw-r--r--lisp/emacs-lisp/gv.el2
-rw-r--r--lisp/emacs-lisp/helper.el2
-rw-r--r--lisp/emacs-lisp/hierarchy.el2
-rw-r--r--lisp/emacs-lisp/icons.el2
-rw-r--r--lisp/emacs-lisp/inline.el2
-rw-r--r--lisp/emacs-lisp/let-alist.el2
-rw-r--r--lisp/emacs-lisp/lisp-mnt.el2
-rw-r--r--lisp/emacs-lisp/lisp-mode.el6
-rw-r--r--lisp/emacs-lisp/lisp.el2
-rw-r--r--lisp/emacs-lisp/loaddefs-gen.el5
-rw-r--r--lisp/emacs-lisp/macroexp.el2
-rw-r--r--lisp/emacs-lisp/map-ynp.el2
-rw-r--r--lisp/emacs-lisp/map.el2
-rw-r--r--lisp/emacs-lisp/memory-report.el2
-rw-r--r--lisp/emacs-lisp/multisession.el2
-rw-r--r--lisp/emacs-lisp/nadvice.el2
-rw-r--r--lisp/emacs-lisp/oclosure.el10
-rw-r--r--lisp/emacs-lisp/package-vc.el329
-rw-r--r--lisp/emacs-lisp/package-x.el2
-rw-r--r--lisp/emacs-lisp/package.el10
-rw-r--r--lisp/emacs-lisp/pcase.el2
-rw-r--r--lisp/emacs-lisp/pp.el2
-rw-r--r--lisp/emacs-lisp/radix-tree.el2
-rw-r--r--lisp/emacs-lisp/range.el2
-rw-r--r--lisp/emacs-lisp/re-builder.el2
-rw-r--r--lisp/emacs-lisp/regexp-opt.el2
-rw-r--r--lisp/emacs-lisp/regi.el2
-rw-r--r--lisp/emacs-lisp/ring.el2
-rw-r--r--lisp/emacs-lisp/rmc.el2
-rw-r--r--lisp/emacs-lisp/rx.el16
-rw-r--r--lisp/emacs-lisp/seq.el2
-rw-r--r--lisp/emacs-lisp/shadow.el2
-rw-r--r--lisp/emacs-lisp/shortdoc.el173
-rw-r--r--lisp/emacs-lisp/shorthands.el2
-rw-r--r--lisp/emacs-lisp/smie.el2
-rw-r--r--lisp/emacs-lisp/subr-x.el14
-rw-r--r--lisp/emacs-lisp/syntax.el2
-rw-r--r--lisp/emacs-lisp/tabulated-list.el4
-rw-r--r--lisp/emacs-lisp/tcover-ses.el2
-rw-r--r--lisp/emacs-lisp/testcover.el2
-rw-r--r--lisp/emacs-lisp/text-property-search.el2
-rw-r--r--lisp/emacs-lisp/thunk.el2
-rw-r--r--lisp/emacs-lisp/timer-list.el2
-rw-r--r--lisp/emacs-lisp/timer.el2
-rw-r--r--lisp/emacs-lisp/tq.el2
-rw-r--r--lisp/emacs-lisp/trace.el2
-rw-r--r--lisp/emacs-lisp/unsafep.el2
-rw-r--r--lisp/emacs-lisp/vtable.el2
-rw-r--r--lisp/emacs-lisp/warnings.el2
-rw-r--r--lisp/emacs-lock.el2
-rw-r--r--lisp/emulation/cua-base.el2
-rw-r--r--lisp/emulation/cua-gmrk.el2
-rw-r--r--lisp/emulation/cua-rect.el2
-rw-r--r--lisp/emulation/edt-lk201.el2
-rw-r--r--lisp/emulation/edt-mapper.el2
-rw-r--r--lisp/emulation/edt-pc.el2
-rw-r--r--lisp/emulation/edt-vt100.el2
-rw-r--r--lisp/emulation/edt.el2
-rw-r--r--lisp/emulation/keypad.el2
-rw-r--r--lisp/emulation/viper-cmd.el2
-rw-r--r--lisp/emulation/viper-ex.el2
-rw-r--r--lisp/emulation/viper-init.el2
-rw-r--r--lisp/emulation/viper-keym.el2
-rw-r--r--lisp/emulation/viper-macs.el2
-rw-r--r--lisp/emulation/viper-mous.el2
-rw-r--r--lisp/emulation/viper-util.el2
-rw-r--r--lisp/emulation/viper.el2
-rw-r--r--lisp/env.el2
-rw-r--r--lisp/epa-dired.el2
-rw-r--r--lisp/epa-file.el2
-rw-r--r--lisp/epa-hook.el2
-rw-r--r--lisp/epa-ks.el10
-rw-r--r--lisp/epa-mail.el2
-rw-r--r--lisp/epa.el2
-rw-r--r--lisp/epg-config.el2
-rw-r--r--lisp/epg.el2
-rw-r--r--lisp/erc/ChangeLog.12
-rw-r--r--lisp/erc/ChangeLog.22
-rw-r--r--lisp/erc/erc-autoaway.el2
-rw-r--r--lisp/erc/erc-backend.el12
-rw-r--r--lisp/erc/erc-button.el2
-rw-r--r--lisp/erc/erc-capab.el2
-rw-r--r--lisp/erc/erc-common.el21
-rw-r--r--lisp/erc/erc-compat.el19
-rw-r--r--lisp/erc/erc-dcc.el2
-rw-r--r--lisp/erc/erc-desktop-notifications.el2
-rw-r--r--lisp/erc/erc-ezbounce.el2
-rw-r--r--lisp/erc/erc-fill.el2
-rw-r--r--lisp/erc/erc-goodies.el2
-rw-r--r--lisp/erc/erc-ibuffer.el2
-rw-r--r--lisp/erc/erc-identd.el2
-rw-r--r--lisp/erc/erc-imenu.el2
-rw-r--r--lisp/erc/erc-join.el2
-rw-r--r--lisp/erc/erc-lang.el2
-rw-r--r--lisp/erc/erc-list.el2
-rw-r--r--lisp/erc/erc-log.el2
-rw-r--r--lisp/erc/erc-match.el2
-rw-r--r--lisp/erc/erc-menu.el2
-rw-r--r--lisp/erc/erc-netsplit.el2
-rw-r--r--lisp/erc/erc-networks.el109
-rw-r--r--lisp/erc/erc-notify.el2
-rw-r--r--lisp/erc/erc-page.el2
-rw-r--r--lisp/erc/erc-pcomplete.el2
-rw-r--r--lisp/erc/erc-replace.el2
-rw-r--r--lisp/erc/erc-ring.el2
-rw-r--r--lisp/erc/erc-sasl.el31
-rw-r--r--lisp/erc/erc-services.el4
-rw-r--r--lisp/erc/erc-sound.el2
-rw-r--r--lisp/erc/erc-speedbar.el2
-rw-r--r--lisp/erc/erc-spelling.el2
-rw-r--r--lisp/erc/erc-stamp.el2
-rw-r--r--lisp/erc/erc-status-sidebar.el2
-rw-r--r--lisp/erc/erc-track.el2
-rw-r--r--lisp/erc/erc-truncate.el2
-rw-r--r--lisp/erc/erc-xdcc.el2
-rw-r--r--lisp/erc/erc.el138
-rw-r--r--lisp/eshell/em-alias.el2
-rw-r--r--lisp/eshell/em-banner.el2
-rw-r--r--lisp/eshell/em-basic.el2
-rw-r--r--lisp/eshell/em-cmpl.el2
-rw-r--r--lisp/eshell/em-dirs.el2
-rw-r--r--lisp/eshell/em-elecslash.el16
-rw-r--r--lisp/eshell/em-extpipe.el2
-rw-r--r--lisp/eshell/em-glob.el2
-rw-r--r--lisp/eshell/em-hist.el2
-rw-r--r--lisp/eshell/em-ls.el2
-rw-r--r--lisp/eshell/em-pred.el2
-rw-r--r--lisp/eshell/em-prompt.el6
-rw-r--r--lisp/eshell/em-rebind.el2
-rw-r--r--lisp/eshell/em-script.el2
-rw-r--r--lisp/eshell/em-smart.el2
-rw-r--r--lisp/eshell/em-term.el2
-rw-r--r--lisp/eshell/em-tramp.el7
-rw-r--r--lisp/eshell/em-unix.el2
-rw-r--r--lisp/eshell/em-xtra.el2
-rw-r--r--lisp/eshell/esh-arg.el45
-rw-r--r--lisp/eshell/esh-cmd.el2
-rw-r--r--lisp/eshell/esh-ext.el2
-rw-r--r--lisp/eshell/esh-io.el8
-rw-r--r--lisp/eshell/esh-mode.el6
-rw-r--r--lisp/eshell/esh-module.el2
-rw-r--r--lisp/eshell/esh-opt.el2
-rw-r--r--lisp/eshell/esh-proc.el2
-rw-r--r--lisp/eshell/esh-util.el2
-rw-r--r--lisp/eshell/esh-var.el4
-rw-r--r--lisp/eshell/eshell.el2
-rw-r--r--lisp/expand.el2
-rw-r--r--lisp/external-completion.el176
-rw-r--r--lisp/ezimage.el2
-rw-r--r--lisp/face-remap.el2
-rw-r--r--lisp/facemenu.el2
-rw-r--r--lisp/faces.el9
-rw-r--r--lisp/ffap.el2
-rw-r--r--lisp/filecache.el2
-rw-r--r--lisp/fileloop.el2
-rw-r--r--lisp/filenotify.el2
-rw-r--r--lisp/files-x.el2
-rw-r--r--lisp/files.el92
-rw-r--r--lisp/filesets.el2
-rw-r--r--lisp/find-cmd.el2
-rw-r--r--lisp/find-dired.el2
-rw-r--r--lisp/find-file.el2
-rw-r--r--lisp/find-lisp.el2
-rw-r--r--lisp/finder.el2
-rw-r--r--lisp/flow-ctrl.el2
-rw-r--r--lisp/foldout.el2
-rw-r--r--lisp/follow.el2
-rw-r--r--lisp/font-core.el2
-rw-r--r--lisp/font-lock.el9
-rw-r--r--lisp/format-spec.el2
-rw-r--r--lisp/format.el2
-rw-r--r--lisp/forms.el2
-rw-r--r--lisp/frame.el2
-rw-r--r--lisp/frameset.el2
-rw-r--r--lisp/fringe.el2
-rw-r--r--lisp/generic-x.el2
-rw-r--r--lisp/gnus/ChangeLog.12
-rw-r--r--lisp/gnus/ChangeLog.26
-rw-r--r--lisp/gnus/ChangeLog.38
-rw-r--r--lisp/gnus/canlock.el2
-rw-r--r--lisp/gnus/deuglify.el2
-rw-r--r--lisp/gnus/gmm-utils.el2
-rw-r--r--lisp/gnus/gnus-agent.el2
-rw-r--r--lisp/gnus/gnus-art.el2
-rw-r--r--lisp/gnus/gnus-async.el2
-rw-r--r--lisp/gnus/gnus-bcklg.el2
-rw-r--r--lisp/gnus/gnus-bookmark.el2
-rw-r--r--lisp/gnus/gnus-cache.el2
-rw-r--r--lisp/gnus/gnus-cite.el2
-rw-r--r--lisp/gnus/gnus-cloud.el2
-rw-r--r--lisp/gnus/gnus-cus.el2
-rw-r--r--lisp/gnus/gnus-dbus.el2
-rw-r--r--lisp/gnus/gnus-delay.el2
-rw-r--r--lisp/gnus/gnus-demon.el2
-rw-r--r--lisp/gnus/gnus-diary.el2
-rw-r--r--lisp/gnus/gnus-dired.el2
-rw-r--r--lisp/gnus/gnus-draft.el2
-rw-r--r--lisp/gnus/gnus-dup.el2
-rw-r--r--lisp/gnus/gnus-eform.el2
-rw-r--r--lisp/gnus/gnus-fun.el2
-rw-r--r--lisp/gnus/gnus-gravatar.el2
-rw-r--r--lisp/gnus/gnus-group.el2
-rw-r--r--lisp/gnus/gnus-html.el2
-rw-r--r--lisp/gnus/gnus-icalendar.el4
-rw-r--r--lisp/gnus/gnus-int.el2
-rw-r--r--lisp/gnus/gnus-kill.el2
-rw-r--r--lisp/gnus/gnus-logic.el2
-rw-r--r--lisp/gnus/gnus-mh.el2
-rw-r--r--lisp/gnus/gnus-ml.el2
-rw-r--r--lisp/gnus/gnus-mlspl.el2
-rw-r--r--lisp/gnus/gnus-msg.el2
-rw-r--r--lisp/gnus/gnus-notifications.el2
-rw-r--r--lisp/gnus/gnus-picon.el2
-rw-r--r--lisp/gnus/gnus-range.el2
-rw-r--r--lisp/gnus/gnus-registry.el2
-rw-r--r--lisp/gnus/gnus-rfc1843.el2
-rw-r--r--lisp/gnus/gnus-rmail.el2
-rw-r--r--lisp/gnus/gnus-salt.el2
-rw-r--r--lisp/gnus/gnus-score.el2
-rw-r--r--lisp/gnus/gnus-search.el2
-rw-r--r--lisp/gnus/gnus-sieve.el2
-rw-r--r--lisp/gnus/gnus-spec.el2
-rw-r--r--lisp/gnus/gnus-srvr.el2
-rw-r--r--lisp/gnus/gnus-start.el2
-rw-r--r--lisp/gnus/gnus-sum.el2
-rw-r--r--lisp/gnus/gnus-topic.el2
-rw-r--r--lisp/gnus/gnus-undo.el2
-rw-r--r--lisp/gnus/gnus-util.el2
-rw-r--r--lisp/gnus/gnus-uu.el2
-rw-r--r--lisp/gnus/gnus-vm.el2
-rw-r--r--lisp/gnus/gnus-win.el2
-rw-r--r--lisp/gnus/gnus.el2
-rw-r--r--lisp/gnus/gssapi.el2
-rw-r--r--lisp/gnus/legacy-gnus-agent.el2
-rw-r--r--lisp/gnus/mail-source.el2
-rw-r--r--lisp/gnus/message.el5
-rw-r--r--lisp/gnus/mm-archive.el2
-rw-r--r--lisp/gnus/mm-bodies.el2
-rw-r--r--lisp/gnus/mm-decode.el2
-rw-r--r--lisp/gnus/mm-encode.el2
-rw-r--r--lisp/gnus/mm-extern.el2
-rw-r--r--lisp/gnus/mm-partial.el2
-rw-r--r--lisp/gnus/mm-url.el2
-rw-r--r--lisp/gnus/mm-util.el2
-rw-r--r--lisp/gnus/mm-uu.el2
-rw-r--r--lisp/gnus/mm-view.el2
-rw-r--r--lisp/gnus/mml-sec.el2
-rw-r--r--lisp/gnus/mml-smime.el2
-rw-r--r--lisp/gnus/mml.el2
-rw-r--r--lisp/gnus/mml1991.el2
-rw-r--r--lisp/gnus/mml2015.el2
-rw-r--r--lisp/gnus/nnagent.el2
-rw-r--r--lisp/gnus/nnbabyl.el2
-rw-r--r--lisp/gnus/nndiary.el2
-rw-r--r--lisp/gnus/nndir.el2
-rw-r--r--lisp/gnus/nndoc.el2
-rw-r--r--lisp/gnus/nndraft.el2
-rw-r--r--lisp/gnus/nneething.el2
-rw-r--r--lisp/gnus/nnfolder.el2
-rw-r--r--lisp/gnus/nngateway.el2
-rw-r--r--lisp/gnus/nnheader.el2
-rw-r--r--lisp/gnus/nnimap.el2
-rw-r--r--lisp/gnus/nnmail.el2
-rw-r--r--lisp/gnus/nnmaildir.el2
-rw-r--r--lisp/gnus/nnmairix.el2
-rw-r--r--lisp/gnus/nnmbox.el2
-rw-r--r--lisp/gnus/nnmh.el2
-rw-r--r--lisp/gnus/nnml.el15
-rw-r--r--lisp/gnus/nnoo.el2
-rw-r--r--lisp/gnus/nnregistry.el2
-rw-r--r--lisp/gnus/nnrss.el2
-rw-r--r--lisp/gnus/nnselect.el2
-rw-r--r--lisp/gnus/nnspool.el2
-rw-r--r--lisp/gnus/nntp.el2
-rw-r--r--lisp/gnus/nnvirtual.el2
-rw-r--r--lisp/gnus/nnweb.el2
-rw-r--r--lisp/gnus/score-mode.el2
-rw-r--r--lisp/gnus/smiley.el2
-rw-r--r--lisp/gnus/smime.el2
-rw-r--r--lisp/gnus/spam-report.el2
-rw-r--r--lisp/gnus/spam-stat.el2
-rw-r--r--lisp/gnus/spam-wash.el2
-rw-r--r--lisp/gnus/spam.el2
-rw-r--r--lisp/help-at-pt.el2
-rw-r--r--lisp/help-fns.el2
-rw-r--r--lisp/help-macro.el2
-rw-r--r--lisp/help-mode.el2
-rw-r--r--lisp/help.el34
-rw-r--r--lisp/hex-util.el2
-rw-r--r--lisp/hexl.el2
-rw-r--r--lisp/hfy-cmap.el2
-rw-r--r--lisp/hi-lock.el35
-rw-r--r--lisp/hilit-chg.el2
-rw-r--r--lisp/hippie-exp.el2
-rw-r--r--lisp/hl-line.el2
-rw-r--r--lisp/htmlfontify.el7
-rw-r--r--lisp/ibuf-ext.el2
-rw-r--r--lisp/ibuf-macs.el2
-rw-r--r--lisp/ibuffer.el2
-rw-r--r--lisp/icomplete.el3
-rw-r--r--lisp/ido.el4
-rw-r--r--lisp/ielm.el2
-rw-r--r--lisp/iimage.el2
-rw-r--r--lisp/image-file.el2
-rw-r--r--lisp/image-mode.el2
-rw-r--r--lisp/image.el2
-rw-r--r--lisp/image/compface.el2
-rw-r--r--lisp/image/exif.el2
-rw-r--r--lisp/image/gravatar.el2
-rw-r--r--lisp/image/image-converter.el2
-rw-r--r--lisp/image/image-crop.el2
-rw-r--r--lisp/image/image-dired-dired.el2
-rw-r--r--lisp/image/image-dired-external.el2
-rw-r--r--lisp/image/image-dired-tags.el2
-rw-r--r--lisp/image/image-dired-util.el2
-rw-r--r--lisp/image/image-dired.el2
-rw-r--r--lisp/image/wallpaper.el2
-rw-r--r--lisp/imenu.el2
-rw-r--r--lisp/indent.el5
-rw-r--r--lisp/info-look.el2
-rw-r--r--lisp/info-xref.el2
-rw-r--r--lisp/info.el2
-rw-r--r--lisp/informat.el2
-rw-r--r--lisp/international/ccl.el2
-rw-r--r--lisp/international/characters.el4
-rw-r--r--lisp/international/emoji.el2
-rw-r--r--lisp/international/fontset.el2
-rw-r--r--lisp/international/isearch-x.el2
-rw-r--r--lisp/international/iso-ascii.el2
-rw-r--r--lisp/international/iso-cvt.el2
-rw-r--r--lisp/international/iso-transl.el2
-rw-r--r--lisp/international/ja-dic-cnv.el2
-rw-r--r--lisp/international/kinsoku.el2
-rw-r--r--lisp/international/kkc.el2
-rw-r--r--lisp/international/latexenc.el2
-rw-r--r--lisp/international/latin1-disp.el2
-rw-r--r--lisp/international/mule-cmds.el2
-rw-r--r--lisp/international/mule-conf.el4
-rw-r--r--lisp/international/mule-diag.el2
-rw-r--r--lisp/international/mule-util.el2
-rw-r--r--lisp/international/mule.el2
-rw-r--r--lisp/international/ogonek.el6
-rw-r--r--lisp/international/quail.el2
-rw-r--r--lisp/international/rfc1843.el2
-rw-r--r--lisp/international/textsec-check.el2
-rw-r--r--lisp/international/textsec.el2
-rw-r--r--lisp/international/titdic-cnv.el2
-rw-r--r--lisp/international/ucs-normalize.el2
-rw-r--r--lisp/international/utf-7.el2
-rw-r--r--lisp/international/utf7.el2
-rw-r--r--lisp/isearch.el27
-rw-r--r--lisp/isearchb.el2
-rw-r--r--lisp/jit-lock.el2
-rw-r--r--lisp/jka-cmpr-hook.el2
-rw-r--r--lisp/jka-compr.el2
-rw-r--r--lisp/json.el2
-rw-r--r--lisp/jsonrpc.el21
-rw-r--r--lisp/kermit.el2
-rw-r--r--lisp/keymap.el6
-rw-r--r--lisp/kmacro.el2
-rw-r--r--lisp/language/china-util.el2
-rw-r--r--lisp/language/chinese.el2
-rw-r--r--lisp/language/cyril-util.el2
-rw-r--r--lisp/language/cyrillic.el2
-rw-r--r--lisp/language/czech.el2
-rw-r--r--lisp/language/english.el2
-rw-r--r--lisp/language/ethio-util.el2
-rw-r--r--lisp/language/ethiopic.el2
-rw-r--r--lisp/language/european.el4
-rw-r--r--lisp/language/georgian.el2
-rw-r--r--lisp/language/greek.el2
-rw-r--r--lisp/language/hanja-util.el2
-rw-r--r--lisp/language/hebrew.el2
-rw-r--r--lisp/language/ind-util.el2
-rw-r--r--lisp/language/indian.el44
-rw-r--r--lisp/language/indonesian.el2
-rw-r--r--lisp/language/japan-util.el2
-rw-r--r--lisp/language/japanese.el2
-rw-r--r--lisp/language/korea-util.el2
-rw-r--r--lisp/language/korean.el2
-rw-r--r--lisp/language/lao-util.el2
-rw-r--r--lisp/language/lao.el2
-rw-r--r--lisp/language/misc-lang.el2
-rw-r--r--lisp/language/philippine.el2
-rw-r--r--lisp/language/romanian.el2
-rw-r--r--lisp/language/slovak.el2
-rw-r--r--lisp/language/tai-viet.el2
-rw-r--r--lisp/language/thai-util.el2
-rw-r--r--lisp/language/thai.el2
-rw-r--r--lisp/language/tibet-util.el2
-rw-r--r--lisp/language/tibetan.el2
-rw-r--r--lisp/language/utf-8-lang.el2
-rw-r--r--lisp/language/viet-util.el2
-rw-r--r--lisp/language/vietnamese.el2
-rw-r--r--lisp/ldefs-boot.el413
-rw-r--r--lisp/leim/quail/arabic.el2
-rw-r--r--lisp/leim/quail/cham.el2
-rw-r--r--lisp/leim/quail/compose.el2
-rw-r--r--lisp/leim/quail/croatian.el2
-rw-r--r--lisp/leim/quail/cyril-jis.el2
-rw-r--r--lisp/leim/quail/cyrillic.el134
-rw-r--r--lisp/leim/quail/czech.el2
-rw-r--r--lisp/leim/quail/emoji.el2
-rw-r--r--lisp/leim/quail/georgian.el2
-rw-r--r--lisp/leim/quail/greek.el2
-rw-r--r--lisp/leim/quail/hangul.el2
-rw-r--r--lisp/leim/quail/hanja.el2
-rw-r--r--lisp/leim/quail/hanja3.el2
-rw-r--r--lisp/leim/quail/indian.el2
-rw-r--r--lisp/leim/quail/indonesian.el2
-rw-r--r--lisp/leim/quail/ipa-praat.el2
-rw-r--r--lisp/leim/quail/ipa.el2
-rw-r--r--lisp/leim/quail/japanese.el2
-rw-r--r--lisp/leim/quail/latin-alt.el2
-rw-r--r--lisp/leim/quail/latin-ltx.el2
-rw-r--r--lisp/leim/quail/latin-post.el2
-rw-r--r--lisp/leim/quail/latin-pre.el2
-rw-r--r--lisp/leim/quail/lrt.el2
-rw-r--r--lisp/leim/quail/misc-lang.el2
-rw-r--r--lisp/leim/quail/persian.el2
-rw-r--r--lisp/leim/quail/philippine.el2
-rw-r--r--lisp/leim/quail/programmer-dvorak.el2
-rw-r--r--lisp/leim/quail/py-punct.el2
-rw-r--r--lisp/leim/quail/rfc1345.el2
-rw-r--r--lisp/leim/quail/sami.el2
-rw-r--r--lisp/leim/quail/sgml-input.el2
-rw-r--r--lisp/leim/quail/sisheng.el2
-rw-r--r--lisp/leim/quail/slovak.el2
-rw-r--r--lisp/leim/quail/symbol-ksc.el2
-rw-r--r--lisp/leim/quail/tamil-dvorak.el2
-rw-r--r--lisp/leim/quail/tibetan.el2
-rw-r--r--lisp/leim/quail/uni-input.el2
-rw-r--r--lisp/leim/quail/vntelex.el2
-rw-r--r--lisp/leim/quail/vnvni.el2
-rw-r--r--lisp/leim/quail/welsh.el2
-rw-r--r--lisp/loadhist.el2
-rw-r--r--lisp/loadup.el2
-rw-r--r--lisp/locate.el2
-rw-r--r--lisp/lpr.el2
-rw-r--r--lisp/ls-lisp.el2
-rw-r--r--lisp/macros.el2
-rw-r--r--lisp/mail/binhex.el2
-rw-r--r--lisp/mail/blessmail.el2
-rw-r--r--lisp/mail/emacsbug.el2
-rw-r--r--lisp/mail/flow-fill.el2
-rw-r--r--lisp/mail/footnote.el2
-rw-r--r--lisp/mail/hashcash.el2
-rw-r--r--lisp/mail/ietf-drums-date.el2
-rw-r--r--lisp/mail/ietf-drums.el2
-rw-r--r--lisp/mail/mail-extr.el2
-rw-r--r--lisp/mail/mail-hist.el2
-rw-r--r--lisp/mail/mail-parse.el2
-rw-r--r--lisp/mail/mail-prsvr.el2
-rw-r--r--lisp/mail/mail-utils.el2
-rw-r--r--lisp/mail/mailabbrev.el2
-rw-r--r--lisp/mail/mailalias.el2
-rw-r--r--lisp/mail/mailclient.el2
-rw-r--r--lisp/mail/mailheader.el2
-rw-r--r--lisp/mail/mspools.el2
-rw-r--r--lisp/mail/qp.el2
-rw-r--r--lisp/mail/reporter.el2
-rw-r--r--lisp/mail/rfc2045.el2
-rw-r--r--lisp/mail/rfc2047.el2
-rw-r--r--lisp/mail/rfc2231.el2
-rw-r--r--lisp/mail/rfc6068.el2
-rw-r--r--lisp/mail/rfc822.el2
-rw-r--r--lisp/mail/rmail-spam-filter.el2
-rw-r--r--lisp/mail/rmail.el2
-rw-r--r--lisp/mail/rmailedit.el2
-rw-r--r--lisp/mail/rmailkwd.el2
-rw-r--r--lisp/mail/rmailmm.el2
-rw-r--r--lisp/mail/rmailmsc.el2
-rw-r--r--lisp/mail/rmailout.el2
-rw-r--r--lisp/mail/rmailsort.el2
-rw-r--r--lisp/mail/rmailsum.el64
-rw-r--r--lisp/mail/sendmail.el2
-rw-r--r--lisp/mail/smtpmail.el2
-rw-r--r--lisp/mail/supercite.el2
-rw-r--r--lisp/mail/undigest.el2
-rw-r--r--lisp/mail/unrmail.el2
-rw-r--r--lisp/mail/uudecode.el2
-rw-r--r--lisp/mail/yenc.el2
-rw-r--r--lisp/man.el2
-rw-r--r--lisp/master.el2
-rw-r--r--lisp/mb-depth.el2
-rw-r--r--lisp/md4.el2
-rw-r--r--lisp/menu-bar.el2
-rw-r--r--lisp/mh-e/ChangeLog.14
-rw-r--r--lisp/mh-e/ChangeLog.22
-rw-r--r--lisp/mh-e/mh-acros.el2
-rw-r--r--lisp/mh-e/mh-alias.el2
-rw-r--r--lisp/mh-e/mh-buffers.el2
-rw-r--r--lisp/mh-e/mh-comp.el2
-rw-r--r--lisp/mh-e/mh-e.el2
-rw-r--r--lisp/mh-e/mh-folder.el2
-rw-r--r--lisp/mh-e/mh-funcs.el2
-rw-r--r--lisp/mh-e/mh-gnus.el2
-rw-r--r--lisp/mh-e/mh-identity.el2
-rw-r--r--lisp/mh-e/mh-inc.el2
-rw-r--r--lisp/mh-e/mh-junk.el2
-rw-r--r--lisp/mh-e/mh-letter.el2
-rw-r--r--lisp/mh-e/mh-limit.el2
-rw-r--r--lisp/mh-e/mh-mime.el2
-rw-r--r--lisp/mh-e/mh-print.el2
-rw-r--r--lisp/mh-e/mh-scan.el2
-rw-r--r--lisp/mh-e/mh-search.el4
-rw-r--r--lisp/mh-e/mh-seq.el2
-rw-r--r--lisp/mh-e/mh-show.el2
-rw-r--r--lisp/mh-e/mh-speed.el2
-rw-r--r--lisp/mh-e/mh-thread.el2
-rw-r--r--lisp/mh-e/mh-tool-bar.el2
-rw-r--r--lisp/mh-e/mh-utils.el2
-rw-r--r--lisp/mh-e/mh-xface.el2
-rw-r--r--lisp/midnight.el2
-rw-r--r--lisp/minibuf-eldef.el2
-rw-r--r--lisp/minibuffer.el11
-rw-r--r--lisp/misc.el2
-rw-r--r--lisp/misearch.el2
-rw-r--r--lisp/mouse-copy.el2
-rw-r--r--lisp/mouse-drag.el21
-rw-r--r--lisp/mouse.el2
-rw-r--r--lisp/mpc.el2
-rw-r--r--lisp/msb.el2
-rw-r--r--lisp/mwheel.el2
-rw-r--r--lisp/net/ange-ftp.el2
-rw-r--r--lisp/net/browse-url.el2
-rw-r--r--lisp/net/dbus.el2
-rw-r--r--lisp/net/dictionary-connection.el2
-rw-r--r--lisp/net/dictionary.el2
-rw-r--r--lisp/net/dig.el2
-rw-r--r--lisp/net/dns.el2
-rw-r--r--lisp/net/eudc-bob.el2
-rw-r--r--lisp/net/eudc-capf.el2
-rw-r--r--lisp/net/eudc-export.el2
-rw-r--r--lisp/net/eudc-hotlist.el2
-rw-r--r--lisp/net/eudc-vars.el2
-rw-r--r--lisp/net/eudc.el2
-rw-r--r--lisp/net/eudcb-bbdb.el2
-rw-r--r--lisp/net/eudcb-ecomplete.el2
-rw-r--r--lisp/net/eudcb-ldap.el2
-rw-r--r--lisp/net/eudcb-mab.el2
-rw-r--r--lisp/net/eudcb-macos-contacts.el2
-rw-r--r--lisp/net/eudcb-mailabbrev.el2
-rw-r--r--lisp/net/eww.el2
-rw-r--r--lisp/net/gnutls.el7
-rw-r--r--lisp/net/goto-addr.el2
-rw-r--r--lisp/net/hmac-def.el2
-rw-r--r--lisp/net/hmac-md5.el2
-rw-r--r--lisp/net/imap.el2
-rw-r--r--lisp/net/ldap.el2
-rw-r--r--lisp/net/mailcap.el2
-rw-r--r--lisp/net/mairix.el2
-rw-r--r--lisp/net/net-utils.el2
-rw-r--r--lisp/net/network-stream.el2
-rw-r--r--lisp/net/newst-backend.el2
-rw-r--r--lisp/net/newst-plainview.el2
-rw-r--r--lisp/net/newst-reader.el2
-rw-r--r--lisp/net/newst-ticker.el2
-rw-r--r--lisp/net/newst-treeview.el2
-rw-r--r--lisp/net/newsticker.el2
-rw-r--r--lisp/net/nsm.el2
-rw-r--r--lisp/net/ntlm.el2
-rw-r--r--lisp/net/pop3.el2
-rw-r--r--lisp/net/puny.el2
-rw-r--r--lisp/net/rcirc.el2
-rw-r--r--lisp/net/rfc2104.el2
-rw-r--r--lisp/net/sasl-cram.el2
-rw-r--r--lisp/net/sasl-digest.el2
-rw-r--r--lisp/net/sasl-ntlm.el2
-rw-r--r--lisp/net/sasl-scram-rfc.el2
-rw-r--r--lisp/net/sasl-scram-sha256.el2
-rw-r--r--lisp/net/sasl.el2
-rw-r--r--lisp/net/secrets.el2
-rw-r--r--lisp/net/shr-color.el2
-rw-r--r--lisp/net/shr.el2
-rw-r--r--lisp/net/sieve-manage.el2
-rw-r--r--lisp/net/sieve-mode.el2
-rw-r--r--lisp/net/sieve.el2
-rw-r--r--lisp/net/snmp-mode.el2
-rw-r--r--lisp/net/soap-client.el2
-rw-r--r--lisp/net/soap-inspect.el2
-rw-r--r--lisp/net/socks.el2
-rw-r--r--lisp/net/telnet.el2
-rw-r--r--lisp/net/tramp-adb.el2
-rw-r--r--lisp/net/tramp-archive.el11
-rw-r--r--lisp/net/tramp-cache.el2
-rw-r--r--lisp/net/tramp-cmds.el2
-rw-r--r--lisp/net/tramp-compat.el2
-rw-r--r--lisp/net/tramp-container.el2
-rw-r--r--lisp/net/tramp-crypt.el4
-rw-r--r--lisp/net/tramp-ftp.el2
-rw-r--r--lisp/net/tramp-fuse.el2
-rw-r--r--lisp/net/tramp-gvfs.el4
-rw-r--r--lisp/net/tramp-integration.el2
-rw-r--r--lisp/net/tramp-rclone.el2
-rw-r--r--lisp/net/tramp-sh.el7
-rw-r--r--lisp/net/tramp-smb.el15
-rw-r--r--lisp/net/tramp-sshfs.el2
-rw-r--r--lisp/net/tramp-sudoedit.el2
-rw-r--r--lisp/net/tramp-uu.el2
-rw-r--r--lisp/net/tramp.el8
-rw-r--r--lisp/net/trampver.el11
-rw-r--r--lisp/net/webjump.el2
-rw-r--r--lisp/net/zeroconf.el2
-rw-r--r--lisp/newcomment.el2
-rw-r--r--lisp/notifications.el2
-rw-r--r--lisp/novice.el2
-rw-r--r--lisp/nxml/nxml-enc.el2
-rw-r--r--lisp/nxml/nxml-maint.el2
-rw-r--r--lisp/nxml/nxml-mode.el2
-rw-r--r--lisp/nxml/nxml-ns.el2
-rw-r--r--lisp/nxml/nxml-outln.el2
-rw-r--r--lisp/nxml/nxml-parse.el2
-rw-r--r--lisp/nxml/nxml-rap.el2
-rw-r--r--lisp/nxml/nxml-util.el2
-rw-r--r--lisp/nxml/rng-cmpct.el2
-rw-r--r--lisp/nxml/rng-dt.el2
-rw-r--r--lisp/nxml/rng-loc.el2
-rw-r--r--lisp/nxml/rng-maint.el2
-rw-r--r--lisp/nxml/rng-match.el2
-rw-r--r--lisp/nxml/rng-nxml.el2
-rw-r--r--lisp/nxml/rng-parse.el2
-rw-r--r--lisp/nxml/rng-pttrn.el2
-rw-r--r--lisp/nxml/rng-uri.el2
-rw-r--r--lisp/nxml/rng-util.el2
-rw-r--r--lisp/nxml/rng-valid.el2
-rw-r--r--lisp/nxml/rng-xsd.el2
-rw-r--r--lisp/nxml/xmltok.el2
-rw-r--r--lisp/nxml/xsd-regexp.el2
-rw-r--r--lisp/obarray.el2
-rw-r--r--lisp/obsolete/autoarg.el2
-rw-r--r--lisp/obsolete/autoload.el2
-rw-r--r--lisp/obsolete/bruce.el2
-rw-r--r--lisp/obsolete/cc-compat.el2
-rw-r--r--lisp/obsolete/cl-compat.el2
-rw-r--r--lisp/obsolete/cl.el2
-rw-r--r--lisp/obsolete/crisp.el2
-rw-r--r--lisp/obsolete/eieio-compat.el2
-rw-r--r--lisp/obsolete/eudcb-ph.el2
-rw-r--r--lisp/obsolete/gs.el2
-rw-r--r--lisp/obsolete/gulp.el2
-rw-r--r--lisp/obsolete/html2text.el2
-rw-r--r--lisp/obsolete/info-edit.el2
-rw-r--r--lisp/obsolete/inversion.el2
-rw-r--r--lisp/obsolete/iswitchb.el2
-rw-r--r--lisp/obsolete/landmark.el2
-rw-r--r--lisp/obsolete/linum.el2
-rw-r--r--lisp/obsolete/longlines.el2
-rw-r--r--lisp/obsolete/makesum.el2
-rw-r--r--lisp/obsolete/mantemp.el2
-rw-r--r--lisp/obsolete/messcompat.el2
-rw-r--r--lisp/obsolete/metamail.el2
-rw-r--r--lisp/obsolete/mh-compat.el2
-rw-r--r--lisp/obsolete/netrc.el2
-rw-r--r--lisp/obsolete/nnir.el2
-rw-r--r--lisp/obsolete/otodo-mode.el2
-rw-r--r--lisp/obsolete/pgg-def.el2
-rw-r--r--lisp/obsolete/pgg-gpg.el2
-rw-r--r--lisp/obsolete/pgg-parse.el2
-rw-r--r--lisp/obsolete/pgg-pgp.el2
-rw-r--r--lisp/obsolete/pgg-pgp5.el2
-rw-r--r--lisp/obsolete/pgg.el2
-rw-r--r--lisp/obsolete/ps-def.el2
-rw-r--r--lisp/obsolete/quickurl.el2
-rw-r--r--lisp/obsolete/rcompile.el2
-rw-r--r--lisp/obsolete/rfc2368.el2
-rw-r--r--lisp/obsolete/rlogin.el4
-rw-r--r--lisp/obsolete/sb-image.el2
-rw-r--r--lisp/obsolete/starttls.el2
-rw-r--r--lisp/obsolete/sup-mouse.el2
-rw-r--r--lisp/obsolete/terminal.el2
-rw-r--r--lisp/obsolete/thumbs.el2
-rw-r--r--lisp/obsolete/tls.el2
-rw-r--r--lisp/obsolete/tpu-edt.el2
-rw-r--r--lisp/obsolete/tpu-extras.el2
-rw-r--r--lisp/obsolete/tpu-mapper.el2
-rw-r--r--lisp/obsolete/uce.el2
-rw-r--r--lisp/obsolete/url-about.el2
-rw-r--r--lisp/obsolete/url-dired.el2
-rw-r--r--lisp/obsolete/url-ns.el2
-rw-r--r--lisp/obsolete/vc-arch.el2
-rw-r--r--lisp/obsolete/vc-mtn.el2
-rw-r--r--lisp/obsolete/vip.el2
-rw-r--r--lisp/obsolete/vt-control.el2
-rw-r--r--lisp/obsolete/vt100-led.el2
-rw-r--r--lisp/obsolete/ws-mode.el2
-rw-r--r--lisp/obsolete/yow.el2
-rw-r--r--lisp/org/ChangeLog.112
-rw-r--r--lisp/org/ob-C.el2
-rw-r--r--lisp/org/ob-R.el6
-rw-r--r--lisp/org/ob-awk.el2
-rw-r--r--lisp/org/ob-calc.el2
-rw-r--r--lisp/org/ob-clojure.el6
-rw-r--r--lisp/org/ob-comint.el10
-rw-r--r--lisp/org/ob-core.el21
-rw-r--r--lisp/org/ob-css.el2
-rw-r--r--lisp/org/ob-ditaa.el2
-rw-r--r--lisp/org/ob-dot.el2
-rw-r--r--lisp/org/ob-emacs-lisp.el2
-rw-r--r--lisp/org/ob-eshell.el2
-rw-r--r--lisp/org/ob-eval.el2
-rw-r--r--lisp/org/ob-exp.el2
-rw-r--r--lisp/org/ob-forth.el2
-rw-r--r--lisp/org/ob-fortran.el2
-rw-r--r--lisp/org/ob-gnuplot.el2
-rw-r--r--lisp/org/ob-groovy.el2
-rw-r--r--lisp/org/ob-haskell.el2
-rw-r--r--lisp/org/ob-java.el2
-rw-r--r--lisp/org/ob-js.el2
-rw-r--r--lisp/org/ob-julia.el2
-rw-r--r--lisp/org/ob-latex.el2
-rw-r--r--lisp/org/ob-lilypond.el2
-rw-r--r--lisp/org/ob-lisp.el2
-rw-r--r--lisp/org/ob-lob.el2
-rw-r--r--lisp/org/ob-lua.el2
-rw-r--r--lisp/org/ob-makefile.el2
-rw-r--r--lisp/org/ob-matlab.el2
-rw-r--r--lisp/org/ob-maxima.el2
-rw-r--r--lisp/org/ob-ocaml.el2
-rw-r--r--lisp/org/ob-octave.el4
-rw-r--r--lisp/org/ob-org.el2
-rw-r--r--lisp/org/ob-perl.el2
-rw-r--r--lisp/org/ob-plantuml.el2
-rw-r--r--lisp/org/ob-processing.el2
-rw-r--r--lisp/org/ob-python.el2
-rw-r--r--lisp/org/ob-ref.el2
-rw-r--r--lisp/org/ob-ruby.el2
-rw-r--r--lisp/org/ob-sass.el2
-rw-r--r--lisp/org/ob-scheme.el2
-rw-r--r--lisp/org/ob-screen.el2
-rw-r--r--lisp/org/ob-sed.el2
-rw-r--r--lisp/org/ob-shell.el2
-rw-r--r--lisp/org/ob-sql.el2
-rw-r--r--lisp/org/ob-sqlite.el2
-rw-r--r--lisp/org/ob-table.el2
-rw-r--r--lisp/org/ob-tangle.el5
-rw-r--r--lisp/org/ob.el2
-rw-r--r--lisp/org/oc-basic.el20
-rw-r--r--lisp/org/oc-biblatex.el2
-rw-r--r--lisp/org/oc-bibtex.el8
-rw-r--r--lisp/org/oc-csl.el2
-rw-r--r--lisp/org/oc-natbib.el2
-rw-r--r--lisp/org/oc.el2
-rw-r--r--lisp/org/ol-bbdb.el2
-rw-r--r--lisp/org/ol-bibtex.el2
-rw-r--r--lisp/org/ol-docview.el2
-rw-r--r--lisp/org/ol-doi.el2
-rw-r--r--lisp/org/ol-eshell.el2
-rw-r--r--lisp/org/ol-eww.el2
-rw-r--r--lisp/org/ol-gnus.el2
-rw-r--r--lisp/org/ol-info.el2
-rw-r--r--lisp/org/ol-irc.el2
-rw-r--r--lisp/org/ol-man.el2
-rw-r--r--lisp/org/ol-mhe.el2
-rw-r--r--lisp/org/ol-rmail.el2
-rw-r--r--lisp/org/ol-w3m.el2
-rw-r--r--lisp/org/ol.el8
-rw-r--r--lisp/org/org-agenda.el15
-rw-r--r--lisp/org/org-archive.el2
-rw-r--r--lisp/org/org-attach-git.el2
-rw-r--r--lisp/org/org-attach.el2
-rw-r--r--lisp/org/org-capture.el4
-rw-r--r--lisp/org/org-clock.el97
-rw-r--r--lisp/org/org-colview.el2
-rw-r--r--lisp/org/org-compat.el2
-rw-r--r--lisp/org/org-crypt.el2
-rw-r--r--lisp/org/org-ctags.el2
-rw-r--r--lisp/org/org-cycle.el2
-rw-r--r--lisp/org/org-datetree.el2
-rw-r--r--lisp/org/org-duration.el2
-rw-r--r--lisp/org/org-element.el33
-rw-r--r--lisp/org/org-entities.el2
-rw-r--r--lisp/org/org-faces.el4
-rw-r--r--lisp/org/org-feed.el2
-rw-r--r--lisp/org/org-fold-core.el19
-rw-r--r--lisp/org/org-fold.el2
-rw-r--r--lisp/org/org-footnote.el11
-rw-r--r--lisp/org/org-goto.el2
-rw-r--r--lisp/org/org-habit.el2
-rw-r--r--lisp/org/org-id.el2
-rw-r--r--lisp/org/org-indent.el2
-rw-r--r--lisp/org/org-inlinetask.el2
-rw-r--r--lisp/org/org-keys.el2
-rw-r--r--lisp/org/org-lint.el2
-rw-r--r--lisp/org/org-list.el2
-rw-r--r--lisp/org/org-macro.el2
-rw-r--r--lisp/org/org-macs.el10
-rw-r--r--lisp/org/org-mobile.el2
-rw-r--r--lisp/org/org-mouse.el2
-rw-r--r--lisp/org/org-num.el2
-rw-r--r--lisp/org/org-pcomplete.el2
-rw-r--r--lisp/org/org-persist.el301
-rw-r--r--lisp/org/org-plot.el2
-rw-r--r--lisp/org/org-protocol.el2
-rw-r--r--lisp/org/org-refile.el2
-rw-r--r--lisp/org/org-src.el156
-rw-r--r--lisp/org/org-table.el61
-rw-r--r--lisp/org/org-tempo.el2
-rw-r--r--lisp/org/org-timer.el2
-rw-r--r--lisp/org/org-version.el2
-rw-r--r--lisp/org/org.el25
-rw-r--r--lisp/org/ox-ascii.el2
-rw-r--r--lisp/org/ox-beamer.el2
-rw-r--r--lisp/org/ox-html.el4
-rw-r--r--lisp/org/ox-icalendar.el2
-rw-r--r--lisp/org/ox-koma-letter.el2
-rw-r--r--lisp/org/ox-latex.el2
-rw-r--r--lisp/org/ox-man.el2
-rw-r--r--lisp/org/ox-md.el5
-rw-r--r--lisp/org/ox-odt.el2
-rw-r--r--lisp/org/ox-org.el2
-rw-r--r--lisp/org/ox-publish.el2
-rw-r--r--lisp/org/ox-texinfo.el2
-rw-r--r--lisp/org/ox.el40
-rw-r--r--lisp/outline.el19
-rw-r--r--lisp/paren.el2
-rw-r--r--lisp/password-cache.el2
-rw-r--r--lisp/pcmpl-cvs.el2
-rw-r--r--lisp/pcmpl-git.el2
-rw-r--r--lisp/pcmpl-gnu.el2
-rw-r--r--lisp/pcmpl-linux.el2
-rw-r--r--lisp/pcmpl-rpm.el2
-rw-r--r--lisp/pcmpl-unix.el2
-rw-r--r--lisp/pcmpl-x.el2
-rw-r--r--lisp/pcomplete.el33
-rw-r--r--lisp/pgtk-dnd.el2
-rw-r--r--lisp/pixel-scroll.el2
-rw-r--r--lisp/play/5x5.el2
-rw-r--r--lisp/play/animate.el2
-rw-r--r--lisp/play/blackbox.el2
-rw-r--r--lisp/play/bubbles.el2
-rw-r--r--lisp/play/cookie1.el2
-rw-r--r--lisp/play/decipher.el2
-rw-r--r--lisp/play/dissociate.el2
-rw-r--r--lisp/play/doctor.el2
-rw-r--r--lisp/play/dunnet.el2
-rw-r--r--lisp/play/fortune.el2
-rw-r--r--lisp/play/gamegrid.el2
-rw-r--r--lisp/play/gametree.el2
-rw-r--r--lisp/play/gomoku.el2
-rw-r--r--lisp/play/handwrite.el2
-rw-r--r--lisp/play/life.el2
-rw-r--r--lisp/play/morse.el2
-rw-r--r--lisp/play/mpuz.el2
-rw-r--r--lisp/play/pong.el2
-rw-r--r--lisp/play/snake.el2
-rw-r--r--lisp/play/solitaire.el2
-rw-r--r--lisp/play/spook.el2
-rw-r--r--lisp/play/tetris.el2
-rw-r--r--lisp/play/zone.el2
-rw-r--r--lisp/plstore.el2
-rw-r--r--lisp/printing.el2
-rw-r--r--lisp/proced.el2
-rw-r--r--lisp/profiler.el2
-rw-r--r--lisp/progmodes/antlr-mode.el2
-rw-r--r--lisp/progmodes/asm-mode.el2
-rw-r--r--lisp/progmodes/autoconf.el2
-rw-r--r--lisp/progmodes/bat-mode.el4
-rw-r--r--lisp/progmodes/bug-reference.el2
-rw-r--r--lisp/progmodes/c-ts-mode.el525
-rw-r--r--lisp/progmodes/cc-align.el2
-rw-r--r--lisp/progmodes/cc-awk.el2
-rw-r--r--lisp/progmodes/cc-bytecomp.el2
-rw-r--r--lisp/progmodes/cc-cmds.el2
-rw-r--r--lisp/progmodes/cc-defs.el4
-rw-r--r--lisp/progmodes/cc-engine.el4
-rw-r--r--lisp/progmodes/cc-fonts.el2
-rw-r--r--lisp/progmodes/cc-guess.el2
-rw-r--r--lisp/progmodes/cc-langs.el2
-rw-r--r--lisp/progmodes/cc-menus.el2
-rw-r--r--lisp/progmodes/cc-mode.el2
-rw-r--r--lisp/progmodes/cc-styles.el2
-rw-r--r--lisp/progmodes/cc-vars.el2
-rw-r--r--lisp/progmodes/cfengine.el2
-rw-r--r--lisp/progmodes/cl-font-lock.el2
-rw-r--r--lisp/progmodes/cmacexp.el2
-rw-r--r--lisp/progmodes/cmake-ts-mode.el234
-rw-r--r--lisp/progmodes/compile.el3
-rw-r--r--lisp/progmodes/cperl-mode.el2
-rw-r--r--lisp/progmodes/cpp.el2
-rw-r--r--lisp/progmodes/csharp-mode.el206
-rw-r--r--lisp/progmodes/cwarn.el2
-rw-r--r--lisp/progmodes/dcl-mode.el2
-rw-r--r--lisp/progmodes/dockerfile-ts-mode.el177
-rw-r--r--lisp/progmodes/ebnf-abn.el2
-rw-r--r--lisp/progmodes/ebnf-bnf.el2
-rw-r--r--lisp/progmodes/ebnf-dtd.el2
-rw-r--r--lisp/progmodes/ebnf-ebx.el2
-rw-r--r--lisp/progmodes/ebnf-iso.el2
-rw-r--r--lisp/progmodes/ebnf-otz.el2
-rw-r--r--lisp/progmodes/ebnf-yac.el2
-rw-r--r--lisp/progmodes/ebnf2ps.el2
-rw-r--r--lisp/progmodes/ebrowse.el2
-rw-r--r--lisp/progmodes/eglot.el220
-rw-r--r--lisp/progmodes/elisp-mode.el2
-rw-r--r--lisp/progmodes/erts-mode.el2
-rw-r--r--lisp/progmodes/etags.el2
-rw-r--r--lisp/progmodes/executable.el2
-rw-r--r--lisp/progmodes/f90.el2
-rw-r--r--lisp/progmodes/flymake-cc.el2
-rw-r--r--lisp/progmodes/flymake-proc.el2
-rw-r--r--lisp/progmodes/flymake.el7
-rw-r--r--lisp/progmodes/fortran.el2
-rw-r--r--lisp/progmodes/gdb-mi.el2
-rw-r--r--lisp/progmodes/glasses.el2
-rw-r--r--lisp/progmodes/go-ts-mode.el354
-rw-r--r--lisp/progmodes/grep.el6
-rw-r--r--lisp/progmodes/gud.el2
-rw-r--r--lisp/progmodes/hideif.el2
-rw-r--r--lisp/progmodes/hideshow.el2
-rw-r--r--lisp/progmodes/icon.el2
-rw-r--r--lisp/progmodes/idlw-complete-structtag.el2
-rw-r--r--lisp/progmodes/idlw-help.el4
-rw-r--r--lisp/progmodes/idlw-shell.el2
-rw-r--r--lisp/progmodes/idlw-toolbar.el2
-rw-r--r--lisp/progmodes/idlwave.el4
-rw-r--r--lisp/progmodes/inf-lisp.el2
-rw-r--r--lisp/progmodes/java-ts-mode.el134
-rw-r--r--lisp/progmodes/js.el291
-rw-r--r--lisp/progmodes/json-ts-mode.el72
-rw-r--r--lisp/progmodes/ld-script.el2
-rw-r--r--lisp/progmodes/m4-mode.el2
-rw-r--r--lisp/progmodes/make-mode.el2
-rw-r--r--lisp/progmodes/meta-mode.el2
-rw-r--r--lisp/progmodes/mixal-mode.el2
-rw-r--r--lisp/progmodes/octave.el2
-rw-r--r--lisp/progmodes/opascal.el2
-rw-r--r--lisp/progmodes/pascal.el2
-rw-r--r--lisp/progmodes/perl-mode.el2
-rw-r--r--lisp/progmodes/prog-mode.el2
-rw-r--r--lisp/progmodes/project.el90
-rw-r--r--lisp/progmodes/prolog.el2
-rw-r--r--lisp/progmodes/ps-mode.el2
-rw-r--r--lisp/progmodes/python.el149
-rw-r--r--lisp/progmodes/ruby-mode.el239
-rw-r--r--lisp/progmodes/ruby-ts-mode.el947
-rw-r--r--lisp/progmodes/rust-ts-mode.el327
-rw-r--r--lisp/progmodes/scheme.el22
-rw-r--r--lisp/progmodes/sh-script.el7
-rw-r--r--lisp/progmodes/simula.el2
-rw-r--r--lisp/progmodes/sql.el5
-rw-r--r--lisp/progmodes/subword.el2
-rw-r--r--lisp/progmodes/tcl.el2
-rw-r--r--lisp/progmodes/typescript-ts-mode.el121
-rw-r--r--lisp/progmodes/vera-mode.el2
-rw-r--r--lisp/progmodes/verilog-mode.el2
-rw-r--r--lisp/progmodes/vhdl-mode.el2
-rw-r--r--lisp/progmodes/which-func.el19
-rw-r--r--lisp/progmodes/xref.el4
-rw-r--r--lisp/progmodes/xscheme.el2
-rw-r--r--lisp/ps-bdf.el2
-rw-r--r--lisp/ps-mule.el2
-rw-r--r--lisp/ps-print.el2
-rw-r--r--lisp/ps-samp.el2
-rw-r--r--lisp/recentf.el2
-rw-r--r--lisp/rect.el2
-rw-r--r--lisp/register.el2
-rw-r--r--lisp/registry.el2
-rw-r--r--lisp/repeat.el122
-rw-r--r--lisp/replace.el14
-rw-r--r--lisp/reposition.el2
-rw-r--r--lisp/reveal.el2
-rw-r--r--lisp/rfn-eshadow.el2
-rw-r--r--lisp/rot13.el2
-rw-r--r--lisp/rtree.el2
-rw-r--r--lisp/ruler-mode.el2
-rw-r--r--lisp/savehist.el2
-rw-r--r--lisp/saveplace.el2
-rw-r--r--lisp/scroll-all.el2
-rw-r--r--lisp/scroll-bar.el2
-rw-r--r--lisp/scroll-lock.el2
-rw-r--r--lisp/select.el2
-rw-r--r--lisp/server.el73
-rw-r--r--lisp/ses.el2
-rw-r--r--lisp/shadowfile.el2
-rw-r--r--lisp/shell.el7
-rw-r--r--lisp/simple.el101
-rw-r--r--lisp/skeleton.el2
-rw-r--r--lisp/so-long.el4
-rw-r--r--lisp/sort.el4
-rw-r--r--lisp/soundex.el2
-rw-r--r--lisp/speedbar.el2
-rw-r--r--lisp/sqlite-mode.el2
-rw-r--r--lisp/sqlite.el2
-rw-r--r--lisp/startup.el2
-rw-r--r--lisp/strokes.el2
-rw-r--r--lisp/subr.el35
-rw-r--r--lisp/svg.el2
-rw-r--r--lisp/t-mouse.el2
-rw-r--r--lisp/tab-bar.el53
-rw-r--r--lisp/tab-line.el18
-rw-r--r--lisp/tabify.el2
-rw-r--r--lisp/talk.el2
-rw-r--r--lisp/tar-mode.el2
-rw-r--r--lisp/tempo.el2
-rw-r--r--lisp/term.el2
-rw-r--r--lisp/term/AT386.el2
-rw-r--r--lisp/term/README2
-rw-r--r--lisp/term/common-win.el2
-rw-r--r--lisp/term/fbterm.el2
-rw-r--r--lisp/term/haiku-win.el2
-rw-r--r--lisp/term/internal.el2
-rw-r--r--lisp/term/iris-ansi.el2
-rw-r--r--lisp/term/konsole.el2
-rw-r--r--lisp/term/news.el2
-rw-r--r--lisp/term/ns-win.el2
-rw-r--r--lisp/term/pc-win.el2
-rw-r--r--lisp/term/pgtk-win.el3
-rw-r--r--lisp/term/rxvt.el2
-rw-r--r--lisp/term/screen.el2
-rw-r--r--lisp/term/st.el2
-rw-r--r--lisp/term/sun.el2
-rw-r--r--lisp/term/tmux.el2
-rw-r--r--lisp/term/tty-colors.el2
-rw-r--r--lisp/term/tvi970.el2
-rw-r--r--lisp/term/vt100.el2
-rw-r--r--lisp/term/w32-win.el2
-rw-r--r--lisp/term/w32console.el2
-rw-r--r--lisp/term/wyse50.el2
-rw-r--r--lisp/term/x-win.el2
-rw-r--r--lisp/term/xterm.el4
-rw-r--r--lisp/textmodes/artist.el2
-rw-r--r--lisp/textmodes/bib-mode.el2
-rw-r--r--lisp/textmodes/bibtex-style.el2
-rw-r--r--lisp/textmodes/bibtex.el30
-rw-r--r--lisp/textmodes/conf-mode.el2
-rw-r--r--lisp/textmodes/css-mode.el65
-rw-r--r--lisp/textmodes/dns-mode.el2
-rw-r--r--lisp/textmodes/emacs-authors-mode.el2
-rw-r--r--lisp/textmodes/emacs-news-mode.el4
-rw-r--r--lisp/textmodes/enriched.el2
-rw-r--r--lisp/textmodes/fill.el2
-rw-r--r--lisp/textmodes/flyspell.el2
-rw-r--r--lisp/textmodes/glyphless-mode.el2
-rw-r--r--lisp/textmodes/ispell.el2
-rw-r--r--lisp/textmodes/less-css-mode.el2
-rw-r--r--lisp/textmodes/makeinfo.el2
-rw-r--r--lisp/textmodes/mhtml-mode.el2
-rw-r--r--lisp/textmodes/nroff-mode.el2
-rw-r--r--lisp/textmodes/page-ext.el2
-rw-r--r--lisp/textmodes/page.el2
-rw-r--r--lisp/textmodes/paragraphs.el2
-rw-r--r--lisp/textmodes/picture.el2
-rw-r--r--lisp/textmodes/pixel-fill.el2
-rw-r--r--lisp/textmodes/po.el2
-rw-r--r--lisp/textmodes/refbib.el2
-rw-r--r--lisp/textmodes/refer.el2
-rw-r--r--lisp/textmodes/refill.el2
-rw-r--r--lisp/textmodes/reftex-auc.el2
-rw-r--r--lisp/textmodes/reftex-cite.el2
-rw-r--r--lisp/textmodes/reftex-dcr.el2
-rw-r--r--lisp/textmodes/reftex-global.el2
-rw-r--r--lisp/textmodes/reftex-index.el2
-rw-r--r--lisp/textmodes/reftex-parse.el2
-rw-r--r--lisp/textmodes/reftex-ref.el2
-rw-r--r--lisp/textmodes/reftex-sel.el2
-rw-r--r--lisp/textmodes/reftex-toc.el2
-rw-r--r--lisp/textmodes/reftex-vars.el6
-rw-r--r--lisp/textmodes/reftex.el13
-rw-r--r--lisp/textmodes/remember.el2
-rw-r--r--lisp/textmodes/rst.el2
-rw-r--r--lisp/textmodes/sgml-mode.el2
-rw-r--r--lisp/textmodes/string-edit.el2
-rw-r--r--lisp/textmodes/table.el2
-rw-r--r--lisp/textmodes/tex-mode.el2
-rw-r--r--lisp/textmodes/texinfmt.el2
-rw-r--r--lisp/textmodes/texinfo.el4
-rw-r--r--lisp/textmodes/texnfo-upd.el2
-rw-r--r--lisp/textmodes/text-mode.el2
-rw-r--r--lisp/textmodes/tildify.el2
-rw-r--r--lisp/textmodes/toml-ts-mode.el161
-rw-r--r--lisp/textmodes/two-column.el2
-rw-r--r--lisp/textmodes/underline.el2
-rw-r--r--lisp/textmodes/word-wrap-mode.el2
-rw-r--r--lisp/textmodes/yaml-ts-mode.el151
-rw-r--r--lisp/thingatpt.el2
-rw-r--r--lisp/thread.el2
-rw-r--r--lisp/time-stamp.el2
-rw-r--r--lisp/time.el2
-rw-r--r--lisp/timezone.el2
-rw-r--r--lisp/tmm.el2
-rw-r--r--lisp/tool-bar.el2
-rw-r--r--lisp/tooltip.el2
-rw-r--r--lisp/transient.el2
-rw-r--r--lisp/tree-widget.el2
-rw-r--r--lisp/treesit.el977
-rw-r--r--lisp/tutorial.el2
-rw-r--r--lisp/type-break.el2
-rw-r--r--lisp/uniquify.el2
-rw-r--r--lisp/url/ChangeLog.12
-rw-r--r--lisp/url/url-auth.el2
-rw-r--r--lisp/url/url-cache.el2
-rw-r--r--lisp/url/url-cid.el2
-rw-r--r--lisp/url/url-cookie.el2
-rw-r--r--lisp/url/url-dav.el2
-rw-r--r--lisp/url/url-domsuf.el2
-rw-r--r--lisp/url/url-expand.el2
-rw-r--r--lisp/url/url-file.el2
-rw-r--r--lisp/url/url-ftp.el2
-rw-r--r--lisp/url/url-future.el2
-rw-r--r--lisp/url/url-gw.el2
-rw-r--r--lisp/url/url-handlers.el2
-rw-r--r--lisp/url/url-history.el2
-rw-r--r--lisp/url/url-http.el2
-rw-r--r--lisp/url/url-imap.el2
-rw-r--r--lisp/url/url-irc.el2
-rw-r--r--lisp/url/url-ldap.el2
-rw-r--r--lisp/url/url-mailto.el2
-rw-r--r--lisp/url/url-methods.el2
-rw-r--r--lisp/url/url-misc.el2
-rw-r--r--lisp/url/url-news.el2
-rw-r--r--lisp/url/url-nfs.el2
-rw-r--r--lisp/url/url-parse.el2
-rw-r--r--lisp/url/url-privacy.el2
-rw-r--r--lisp/url/url-proxy.el2
-rw-r--r--lisp/url/url-queue.el2
-rw-r--r--lisp/url/url-tramp.el2
-rw-r--r--lisp/url/url-util.el2
-rw-r--r--lisp/url/url-vars.el2
-rw-r--r--lisp/url/url.el2
-rw-r--r--lisp/use-package/bind-key.el564
-rw-r--r--lisp/use-package/use-package-bind-key.el176
-rw-r--r--lisp/use-package/use-package-core.el1691
-rw-r--r--lisp/use-package/use-package-delight.el88
-rw-r--r--lisp/use-package/use-package-diminish.el77
-rw-r--r--lisp/use-package/use-package-ensure-system-package.el106
-rw-r--r--lisp/use-package/use-package-ensure.el212
-rw-r--r--lisp/use-package/use-package-jump.el74
-rw-r--r--lisp/use-package/use-package-lint.el80
-rw-r--r--lisp/use-package/use-package.el53
-rw-r--r--lisp/userlock.el2
-rw-r--r--lisp/vc/add-log.el2
-rw-r--r--lisp/vc/compare-w.el2
-rw-r--r--lisp/vc/cvs-status.el2
-rw-r--r--lisp/vc/diff-mode.el5
-rw-r--r--lisp/vc/diff.el2
-rw-r--r--lisp/vc/ediff-diff.el2
-rw-r--r--lisp/vc/ediff-help.el2
-rw-r--r--lisp/vc/ediff-hook.el2
-rw-r--r--lisp/vc/ediff-init.el2
-rw-r--r--lisp/vc/ediff-merg.el2
-rw-r--r--lisp/vc/ediff-mult.el2
-rw-r--r--lisp/vc/ediff-ptch.el2
-rw-r--r--lisp/vc/ediff-util.el2
-rw-r--r--lisp/vc/ediff-vers.el2
-rw-r--r--lisp/vc/ediff-wind.el2
-rw-r--r--lisp/vc/ediff.el2
-rw-r--r--lisp/vc/log-edit.el2
-rw-r--r--lisp/vc/log-view.el2
-rw-r--r--lisp/vc/pcvs-defs.el2
-rw-r--r--lisp/vc/pcvs-info.el2
-rw-r--r--lisp/vc/pcvs-parse.el4
-rw-r--r--lisp/vc/pcvs-util.el2
-rw-r--r--lisp/vc/pcvs.el2
-rw-r--r--lisp/vc/smerge-mode.el2
-rw-r--r--lisp/vc/vc-annotate.el2
-rw-r--r--lisp/vc/vc-bzr.el2
-rw-r--r--lisp/vc/vc-cvs.el2
-rw-r--r--lisp/vc/vc-dav.el2
-rw-r--r--lisp/vc/vc-dir.el2
-rw-r--r--lisp/vc/vc-dispatcher.el2
-rw-r--r--lisp/vc/vc-filewise.el2
-rw-r--r--lisp/vc/vc-git.el15
-rw-r--r--lisp/vc/vc-hg.el2
-rw-r--r--lisp/vc/vc-hooks.el2
-rw-r--r--lisp/vc/vc-rcs.el2
-rw-r--r--lisp/vc/vc-sccs.el2
-rw-r--r--lisp/vc/vc-src.el2
-rw-r--r--lisp/vc/vc-svn.el2
-rw-r--r--lisp/vc/vc.el4
-rw-r--r--lisp/vcursor.el2
-rw-r--r--lisp/version.el2
-rw-r--r--lisp/view.el2
-rw-r--r--lisp/w32-fns.el2
-rw-r--r--lisp/w32-vars.el2
-rw-r--r--lisp/wdired.el2
-rw-r--r--lisp/whitespace.el45
-rw-r--r--lisp/wid-browse.el2
-rw-r--r--lisp/wid-edit.el2
-rw-r--r--lisp/widget.el2
-rw-r--r--lisp/windmove.el5
-rw-r--r--lisp/window.el26
-rw-r--r--lisp/winner.el6
-rw-r--r--lisp/woman.el2
-rw-r--r--lisp/x-dnd.el2
-rw-r--r--lisp/xdg.el2
-rw-r--r--lisp/xml.el2
-rw-r--r--lisp/xt-mouse.el2
-rw-r--r--lisp/xwidget.el2
-rw-r--r--lisp/yank-media.el2
-rw-r--r--lwlib/ChangeLog.12
-rw-r--r--lwlib/Makefile.in2
-rw-r--r--lwlib/deps.mk2
-rw-r--r--lwlib/lwlib-Xaw.c2
-rw-r--r--lwlib/lwlib-Xlw.c2
-rw-r--r--lwlib/lwlib-Xm.c2
-rw-r--r--lwlib/lwlib-int.h2
-rw-r--r--lwlib/lwlib-utils.c2
-rw-r--r--lwlib/lwlib-widget.h2
-rw-r--r--lwlib/lwlib.c2
-rw-r--r--lwlib/lwlib.h2
-rw-r--r--lwlib/xlwmenu.c2
-rw-r--r--lwlib/xlwmenu.h2
-rw-r--r--lwlib/xlwmenuP.h2
-rw-r--r--m4/00gnulib.m42
-rw-r--r--m4/__inline.m42
-rw-r--r--m4/absolute-header.m42
-rw-r--r--m4/acl.m42
-rw-r--r--m4/alloca.m44
-rw-r--r--m4/assert_h.m42
-rw-r--r--m4/builtin-expect.m42
-rw-r--r--m4/byteswap.m42
-rw-r--r--m4/c-bool.m42
-rw-r--r--m4/canonicalize.m42
-rw-r--r--m4/clock_time.m42
-rw-r--r--m4/copy-file-range.m42
-rw-r--r--m4/d-type.m43
-rw-r--r--m4/dirent_h.m42
-rw-r--r--m4/dirfd.m42
-rw-r--r--m4/double-slash-root.m42
-rw-r--r--m4/dup2.m43
-rw-r--r--m4/eealloc.m42
-rw-r--r--m4/environ.m42
-rw-r--r--m4/errno_h.m42
-rw-r--r--m4/euidaccess.m42
-rw-r--r--m4/execinfo.m42
-rw-r--r--m4/explicit_bzero.m42
-rw-r--r--m4/extensions.m42
-rw-r--r--m4/extern-inline.m42
-rw-r--r--m4/faccessat.m42
-rw-r--r--m4/fchmodat.m42
-rw-r--r--m4/fcntl.m42
-rw-r--r--m4/fcntl_h.m42
-rw-r--r--m4/fdopendir.m42
-rw-r--r--m4/filemode.m43
-rw-r--r--m4/flexmember.m42
-rw-r--r--m4/fpending.m42
-rw-r--r--m4/fpieee.m42
-rw-r--r--m4/free.m42
-rw-r--r--m4/fstatat.m42
-rw-r--r--m4/fsusage.m43
-rw-r--r--m4/fsync.m42
-rw-r--r--m4/futimens.m42
-rw-r--r--m4/getdtablesize.m42
-rw-r--r--m4/getgroups.m43
-rw-r--r--m4/getloadavg.m44
-rw-r--r--m4/getopt.m42
-rw-r--r--m4/getrandom.m42
-rw-r--r--m4/gettime.m43
-rw-r--r--m4/gettimeofday.m43
-rw-r--r--m4/gnulib-common.m42
-rw-r--r--m4/gnulib-comp.m42
-rw-r--r--m4/group-member.m43
-rw-r--r--m4/ieee754-h.m42
-rw-r--r--m4/include_next.m42
-rw-r--r--m4/inttypes.m42
-rw-r--r--m4/largefile.m42
-rw-r--r--m4/lchmod.m42
-rw-r--r--m4/libgmp.m42
-rw-r--r--m4/limits-h.m42
-rw-r--r--m4/lstat.m42
-rw-r--r--m4/malloc.m42
-rw-r--r--m4/manywarnings.m42
-rw-r--r--m4/mbstate_t.m42
-rw-r--r--m4/md5.m42
-rw-r--r--m4/memmem.m42
-rw-r--r--m4/mempcpy.m44
-rw-r--r--m4/memrchr.m44
-rw-r--r--m4/minmax.m42
-rw-r--r--m4/mkostemp.m42
-rw-r--r--m4/mktime.m44
-rw-r--r--m4/mode_t.m42
-rw-r--r--m4/multiarch.m42
-rw-r--r--m4/nanosleep.m42
-rw-r--r--m4/nocrash.m42
-rw-r--r--m4/nproc.m42
-rw-r--r--m4/nstrftime.m43
-rw-r--r--m4/off_t.m42
-rw-r--r--m4/open-cloexec.m42
-rw-r--r--m4/open-slash.m42
-rw-r--r--m4/open.m42
-rw-r--r--m4/pathmax.m44
-rw-r--r--m4/pid_t.m42
-rw-r--r--m4/pipe2.m42
-rw-r--r--m4/pselect.m42
-rw-r--r--m4/pthread_sigmask.m42
-rw-r--r--m4/rawmemchr.m42
-rw-r--r--m4/readlink.m42
-rw-r--r--m4/readlinkat.m42
-rw-r--r--m4/realloc.m42
-rw-r--r--m4/regex.m42
-rw-r--r--m4/sha1.m42
-rw-r--r--m4/sha256.m42
-rw-r--r--m4/sha512.m42
-rw-r--r--m4/sig2str.m43
-rw-r--r--m4/sigdescr_np.m42
-rw-r--r--m4/signal_h.m42
-rw-r--r--m4/socklen.m42
-rw-r--r--m4/ssize_t.m43
-rw-r--r--m4/st_dm_mode.m42
-rw-r--r--m4/stat-time.m44
-rw-r--r--m4/std-gnu11.m42
-rw-r--r--m4/stdalign.m42
-rw-r--r--m4/stddef_h.m42
-rw-r--r--m4/stdint.m42
-rw-r--r--m4/stdio_h.m42
-rw-r--r--m4/stdlib_h.m42
-rw-r--r--m4/stpcpy.m42
-rw-r--r--m4/string_h.m42
-rw-r--r--m4/strnlen.m44
-rw-r--r--m4/strtoimax.m43
-rw-r--r--m4/strtoll.m43
-rw-r--r--m4/symlink.m42
-rw-r--r--m4/sys_random_h.m42
-rw-r--r--m4/sys_select_h.m42
-rw-r--r--m4/sys_socket_h.m42
-rw-r--r--m4/sys_stat_h.m42
-rw-r--r--m4/sys_time_h.m42
-rw-r--r--m4/sys_types_h.m42
-rw-r--r--m4/tempname.m42
-rw-r--r--m4/time_h.m43
-rw-r--r--m4/time_r.m42
-rw-r--r--m4/time_rz.m42
-rw-r--r--m4/timegm.m42
-rw-r--r--m4/timer_time.m42
-rw-r--r--m4/timespec.m43
-rw-r--r--m4/tm_gmtoff.m42
-rw-r--r--m4/unistd_h.m42
-rw-r--r--m4/unlocked-io.m42
-rw-r--r--m4/utimens.m42
-rw-r--r--m4/utimensat.m42
-rw-r--r--m4/utimes.m42
-rw-r--r--m4/vararrays.m42
-rw-r--r--m4/warnings.m42
-rw-r--r--m4/wchar_t.m42
-rw-r--r--m4/year2038.m42
-rw-r--r--m4/zzgnulib.m42
-rwxr-xr-xmake-dist2
-rwxr-xr-xmodules/modhelp.py2
-rw-r--r--msdos/ChangeLog.12
-rw-r--r--msdos/INSTALL2
-rw-r--r--msdos/README2
-rw-r--r--msdos/autogen/Makefile.in2
-rw-r--r--msdos/autogen/config.in2
-rw-r--r--msdos/depfiles.bat2
-rw-r--r--msdos/inttypes.h2
-rw-r--r--msdos/langinfo.h2
-rw-r--r--msdos/mainmake.v22
-rw-r--r--msdos/sed1v2.inp2
-rw-r--r--msdos/sed1x.inp2
-rw-r--r--msdos/sed2v2.inp4
-rw-r--r--msdos/sed2x.inp2
-rw-r--r--msdos/sed3v2.inp2
-rw-r--r--msdos/sed4.inp2
-rw-r--r--msdos/sed5x.inp2
-rw-r--r--msdos/sed6.inp2
-rw-r--r--msdos/sedadmin.inp2
-rw-r--r--msdos/sedalloc.inp2
-rw-r--r--msdos/sedleim.inp2
-rw-r--r--msdos/sedlibcf.inp2
-rw-r--r--msdos/sedlibmk.inp2
-rw-r--r--msdos/sedlisp.inp2
-rw-r--r--nextstep/ChangeLog.12
-rw-r--r--nextstep/INSTALL2
-rw-r--r--nextstep/Makefile.in2
-rw-r--r--nextstep/README2
-rw-r--r--nextstep/templates/Info.plist.in2
-rw-r--r--nt/ChangeLog.12
-rw-r--r--nt/INSTALL29
-rw-r--r--nt/INSTALL.W6490
-rw-r--r--nt/Makefile.in2
-rw-r--r--nt/README2
-rw-r--r--nt/README.W322
-rw-r--r--nt/addpm.c2
-rw-r--r--nt/cmdproxy.c2
-rwxr-xr-xnt/configure.bat2
-rw-r--r--nt/ddeclient.c2
-rw-r--r--nt/epaths.nt2
-rw-r--r--nt/gnulib-cfg.mk2
-rw-r--r--nt/icons/README6
-rw-r--r--nt/inc/grp.h2
-rw-r--r--nt/inc/inttypes.h2
-rw-r--r--nt/inc/langinfo.h2
-rw-r--r--nt/inc/ms-w32.h2
-rw-r--r--nt/inc/nl_types.h2
-rw-r--r--nt/inc/stdint.h2
-rw-r--r--nt/inc/sys/resource.h2
-rw-r--r--nt/inc/sys/socket.h2
-rw-r--r--nt/inc/sys/stat.h2
-rw-r--r--nt/inc/sys/wait.h2
-rw-r--r--nt/preprep.c2
-rw-r--r--nt/runemacs.c2
-rw-r--r--oldXMenu/Activate.c2
-rw-r--r--oldXMenu/ChangeLog.14
-rw-r--r--oldXMenu/Create.c2
-rw-r--r--oldXMenu/FindSel.c2
-rw-r--r--oldXMenu/Internal.c2
-rw-r--r--oldXMenu/Makefile.in2
-rw-r--r--oldXMenu/deps.mk2
-rw-r--r--oldXMenu/insque.c2
-rw-r--r--src/.gdbinit2
-rw-r--r--src/.lldbinit2
-rw-r--r--src/ChangeLog.12
-rw-r--r--src/ChangeLog.102
-rw-r--r--src/ChangeLog.114
-rw-r--r--src/ChangeLog.124
-rw-r--r--src/ChangeLog.134
-rw-r--r--src/ChangeLog.22
-rw-r--r--src/ChangeLog.32
-rw-r--r--src/ChangeLog.42
-rw-r--r--src/ChangeLog.52
-rw-r--r--src/ChangeLog.62
-rw-r--r--src/ChangeLog.72
-rw-r--r--src/ChangeLog.82
-rw-r--r--src/ChangeLog.92
-rw-r--r--src/Makefile.in2
-rw-r--r--src/README2
-rw-r--r--src/alloc.c7
-rw-r--r--src/atimer.c2
-rw-r--r--src/atimer.h2
-rw-r--r--src/bidi.c2
-rw-r--r--src/bignum.c2
-rw-r--r--src/bignum.h2
-rw-r--r--src/blockinput.h2
-rw-r--r--src/buffer.c34
-rw-r--r--src/buffer.h13
-rw-r--r--src/bytecode.c2
-rw-r--r--src/callint.c2
-rw-r--r--src/callproc.c7
-rw-r--r--src/casefiddle.c2
-rw-r--r--src/casetab.c2
-rw-r--r--src/category.c2
-rw-r--r--src/ccl.c2
-rw-r--r--src/character.c2
-rw-r--r--src/charset.c2
-rw-r--r--src/charset.h2
-rw-r--r--src/cm.c2
-rw-r--r--src/cm.h2
-rw-r--r--src/cmds.c2
-rw-r--r--src/coding.c2
-rw-r--r--src/coding.h2
-rw-r--r--src/commands.h2
-rw-r--r--src/comp.c2
-rw-r--r--src/comp.h2
-rw-r--r--src/composite.c2
-rw-r--r--src/composite.h2
-rw-r--r--src/conf_post.h2
-rw-r--r--src/cygw32.c2
-rw-r--r--src/cygw32.h2
-rw-r--r--src/data.c2
-rw-r--r--src/dbusbind.c2
-rw-r--r--src/decompress.c2
-rw-r--r--src/deps.mk2
-rw-r--r--src/dired.c2
-rw-r--r--src/dispextern.h6
-rw-r--r--src/dispnew.c2
-rw-r--r--src/disptab.h2
-rw-r--r--src/dmpstruct.awk2
-rw-r--r--src/doc.c2
-rw-r--r--src/doprnt.c2
-rw-r--r--src/dosfns.c2
-rw-r--r--src/dosfns.h2
-rw-r--r--src/dynlib.c2
-rw-r--r--src/dynlib.h2
-rw-r--r--src/editfns.c26
-rw-r--r--src/emacs-icon.h2
-rw-r--r--src/emacs-module.c2
-rw-r--r--src/emacs-module.h.in4
-rw-r--r--src/emacs.c9
-rw-r--r--src/emacsgtkfixed.c2
-rw-r--r--src/emacsgtkfixed.h2
-rw-r--r--src/epaths.in2
-rw-r--r--src/eval.c2
-rw-r--r--src/fileio.c17
-rw-r--r--src/filelock.c2
-rw-r--r--src/firstfile.c2
-rw-r--r--src/floatfns.c2
-rw-r--r--src/fns.c4
-rw-r--r--src/font.c2
-rw-r--r--src/font.h2
-rw-r--r--src/fontset.c2
-rw-r--r--src/fontset.h2
-rw-r--r--src/frame.c2
-rw-r--r--src/frame.h2
-rw-r--r--src/fringe.c2
-rw-r--r--src/ftcrfont.c2
-rw-r--r--src/ftfont.c2
-rw-r--r--src/getpagesize.h2
-rw-r--r--src/gfilenotify.c2
-rw-r--r--src/gmalloc.c2
-rw-r--r--src/gnutls.c2
-rw-r--r--src/gnutls.h2
-rw-r--r--src/gtkutil.c2
-rw-r--r--src/gtkutil.h2
-rw-r--r--src/haiku.c2
-rw-r--r--src/haiku_draw_support.cc2
-rw-r--r--src/haiku_font_support.cc2
-rw-r--r--src/haiku_io.c2
-rw-r--r--src/haiku_select.cc2
-rw-r--r--src/haiku_support.cc2
-rw-r--r--src/haiku_support.h2
-rw-r--r--src/haikufns.c18
-rw-r--r--src/haikufont.c2
-rw-r--r--src/haikugui.h2
-rw-r--r--src/haikuimage.c2
-rw-r--r--src/haikumenu.c2
-rw-r--r--src/haikuselect.c2
-rw-r--r--src/haikuselect.h2
-rw-r--r--src/haikuterm.c2
-rw-r--r--src/haikuterm.h2
-rw-r--r--src/hbfont.c2
-rw-r--r--src/image.c11
-rw-r--r--src/indent.c4
-rw-r--r--src/indent.h2
-rw-r--r--src/inotify.c2
-rw-r--r--src/insdel.c2
-rw-r--r--src/intervals.c2
-rw-r--r--src/intervals.h2
-rw-r--r--src/itree.c6
-rw-r--r--src/itree.h4
-rw-r--r--src/json.c81
-rw-r--r--src/keyboard.c7
-rw-r--r--src/keyboard.h2
-rw-r--r--src/keymap.c2
-rw-r--r--src/keymap.h2
-rw-r--r--src/kqueue.c2
-rw-r--r--src/lastfile.c2
-rw-r--r--src/lcms.c2
-rw-r--r--src/lisp.h2
-rw-r--r--src/lread.c29
-rw-r--r--src/macfont.h2
-rw-r--r--src/macfont.m2
-rw-r--r--src/macros.c2
-rw-r--r--src/macros.h2
-rw-r--r--src/marker.c2
-rw-r--r--src/menu.c2
-rw-r--r--src/menu.h2
-rw-r--r--src/minibuf.c2
-rw-r--r--src/msdos.c2
-rw-r--r--src/msdos.h2
-rw-r--r--src/nsfns.m16
-rw-r--r--src/nsfont.m2
-rw-r--r--src/nsgui.h2
-rw-r--r--src/nsimage.m2
-rw-r--r--src/nsmenu.m2
-rw-r--r--src/nsselect.m2
-rw-r--r--src/nsterm.h2
-rw-r--r--src/nsterm.m14
-rw-r--r--src/nsxwidget.h2
-rw-r--r--src/nsxwidget.m2
-rw-r--r--src/pdumper.c3
-rw-r--r--src/pdumper.h2
-rw-r--r--src/pgtkfns.c18
-rw-r--r--src/pgtkgui.h2
-rw-r--r--src/pgtkim.c2
-rw-r--r--src/pgtkmenu.c2
-rw-r--r--src/pgtkselect.c2
-rw-r--r--src/pgtkterm.c2
-rw-r--r--src/pgtkterm.h2
-rw-r--r--src/print.c2
-rw-r--r--src/process.c13
-rw-r--r--src/process.h2
-rw-r--r--src/profiler.c2
-rw-r--r--src/puresize.h2
-rw-r--r--src/ralloc.c2
-rw-r--r--src/regex-emacs.c2
-rw-r--r--src/regex-emacs.h2
-rw-r--r--src/region-cache.c2
-rw-r--r--src/region-cache.h2
-rw-r--r--src/scroll.c2
-rw-r--r--src/search.c2
-rw-r--r--src/sheap.c2
-rw-r--r--src/sheap.h2
-rw-r--r--src/sort.c2
-rw-r--r--src/sound.c2
-rw-r--r--src/sqlite.c2
-rw-r--r--src/syntax.c2
-rw-r--r--src/syntax.h2
-rw-r--r--src/sysdep.c2
-rw-r--r--src/sysselect.h2
-rw-r--r--src/syssignal.h2
-rw-r--r--src/sysstdio.h2
-rw-r--r--src/systhread.c2
-rw-r--r--src/systhread.h2
-rw-r--r--src/systime.h2
-rw-r--r--src/systty.h2
-rw-r--r--src/syswait.h2
-rw-r--r--src/term.c2
-rw-r--r--src/termcap.c2
-rw-r--r--src/termchar.h2
-rw-r--r--src/termhooks.h2
-rw-r--r--src/terminal.c2
-rw-r--r--src/terminfo.c2
-rw-r--r--src/termopts.h2
-rw-r--r--src/textprop.c2
-rw-r--r--src/thread.c2
-rw-r--r--src/thread.h2
-rw-r--r--src/timefns.c6
-rw-r--r--src/tparam.c2
-rw-r--r--src/tparam.h2
-rw-r--r--src/treesit.c719
-rw-r--r--src/treesit.h2
-rw-r--r--src/undo.c2
-rw-r--r--src/unexaix.c2
-rw-r--r--src/unexcoff.c2
-rw-r--r--src/unexcw.c2
-rw-r--r--src/unexelf.c2
-rw-r--r--src/unexmacosx.c2
-rw-r--r--src/unexw32.c2
-rw-r--r--src/verbose.mk.in2
-rw-r--r--src/vm-limit.c2
-rw-r--r--src/w16select.c2
-rw-r--r--src/w32.c2
-rw-r--r--src/w32.h2
-rw-r--r--src/w32common.h2
-rw-r--r--src/w32console.c2
-rw-r--r--src/w32cygwinx.c2
-rw-r--r--src/w32fns.c16
-rw-r--r--src/w32font.c2
-rw-r--r--src/w32font.h2
-rw-r--r--src/w32gui.h2
-rw-r--r--src/w32heap.c2
-rw-r--r--src/w32heap.h2
-rw-r--r--src/w32image.c2
-rw-r--r--src/w32inevt.c2
-rw-r--r--src/w32inevt.h2
-rw-r--r--src/w32menu.c15
-rw-r--r--src/w32notify.c2
-rw-r--r--src/w32proc.c2
-rw-r--r--src/w32reg.c2
-rw-r--r--src/w32select.c2
-rw-r--r--src/w32select.h2
-rw-r--r--src/w32term.c13
-rw-r--r--src/w32term.h2
-rw-r--r--src/w32uniscribe.c2
-rw-r--r--src/w32xfns.c2
-rw-r--r--src/widget.c2
-rw-r--r--src/widget.h2
-rw-r--r--src/widgetprv.h2
-rw-r--r--src/window.c15
-rw-r--r--src/window.h2
-rw-r--r--src/xdisp.c39
-rw-r--r--src/xfaces.c94
-rw-r--r--src/xfns.c16
-rw-r--r--src/xfont.c2
-rw-r--r--src/xftfont.c2
-rw-r--r--src/xgselect.c2
-rw-r--r--src/xgselect.h2
-rw-r--r--src/xmenu.c2
-rw-r--r--src/xml.c2
-rw-r--r--src/xrdb.c2
-rw-r--r--src/xselect.c2
-rw-r--r--src/xsettings.c2
-rw-r--r--src/xsettings.h2
-rw-r--r--src/xsmfns.c2
-rw-r--r--src/xterm.c4
-rw-r--r--src/xterm.h2
-rw-r--r--src/xwidget.c2
-rw-r--r--src/xwidget.h2
-rw-r--r--test/ChangeLog.12
-rw-r--r--test/Makefile.in2
-rw-r--r--test/README4
-rw-r--r--test/infra/Dockerfile.emba2
-rw-r--r--test/infra/Makefile.in2
-rw-r--r--test/infra/gitlab-ci.yml30
-rw-r--r--test/infra/test-jobs.yml17
-rw-r--r--test/lib-src/emacsclient-tests.el2
-rw-r--r--test/lisp/abbrev-tests.el2
-rw-r--r--test/lisp/align-tests.el2
-rw-r--r--test/lisp/allout-tests.el2
-rw-r--r--test/lisp/allout-widgets-tests.el2
-rw-r--r--test/lisp/ansi-color-tests.el2
-rw-r--r--test/lisp/ansi-osc-tests.el2
-rw-r--r--test/lisp/apropos-tests.el2
-rw-r--r--test/lisp/arc-mode-tests.el2
-rw-r--r--test/lisp/auth-source-pass-tests.el33
-rw-r--r--test/lisp/auth-source-tests.el2
-rw-r--r--test/lisp/autoinsert-tests.el2
-rw-r--r--test/lisp/autorevert-tests.el2
-rw-r--r--test/lisp/battery-tests.el2
-rw-r--r--test/lisp/bookmark-tests.el2
-rw-r--r--test/lisp/buff-menu-tests.el2
-rw-r--r--test/lisp/button-tests.el2
-rw-r--r--test/lisp/calc/calc-tests.el2
-rw-r--r--test/lisp/calculator-tests.el2
-rw-r--r--test/lisp/calendar/cal-french-tests.el2
-rw-r--r--test/lisp/calendar/cal-julian-tests.el2
-rw-r--r--test/lisp/calendar/icalendar-tests.el5
-rw-r--r--test/lisp/calendar/iso8601-tests.el2
-rw-r--r--test/lisp/calendar/lunar-tests.el2
-rw-r--r--test/lisp/calendar/parse-time-tests.el2
-rw-r--r--test/lisp/calendar/solar-tests.el2
-rw-r--r--test/lisp/calendar/time-date-tests.el2
-rw-r--r--test/lisp/calendar/todo-mode-tests.el2
-rw-r--r--test/lisp/cedet/cedet-files-tests.el2
-rw-r--r--test/lisp/cedet/semantic-utest-c.el2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/test.srt2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testdoublens.cpp2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testdoublens.hpp2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testjavacomp.java2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testlocalvars.cpp2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testnsp.cpp2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testsppcomplete.c2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/teststruct.cpp2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testsubclass.cpp2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testsubclass.hh2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testtemplates.cpp2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testtypedefs.cpp2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testusing.cpp2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testusing.hh2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testvarnames.c2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testvarnames.java2
-rw-r--r--test/lisp/cedet/semantic-utest-ia-resources/testwisent.wy2
-rw-r--r--test/lisp/cedet/semantic-utest-ia.el2
-rw-r--r--test/lisp/cedet/semantic-utest.el2
-rw-r--r--test/lisp/cedet/semantic/bovine/gcc-tests.el2
-rw-r--r--test/lisp/cedet/semantic/format-resources/test-fmt.cpp2
-rw-r--r--test/lisp/cedet/semantic/format-resources/test-fmt.el2
-rw-r--r--test/lisp/cedet/semantic/format-tests.el2
-rw-r--r--test/lisp/cedet/semantic/fw-tests.el2
-rw-r--r--test/lisp/cedet/srecode-utest-getset.el2
-rw-r--r--test/lisp/cedet/srecode-utest-template.el2
-rw-r--r--test/lisp/cedet/srecode/document-tests.el2
-rw-r--r--test/lisp/cedet/srecode/fields-tests.el2
-rw-r--r--test/lisp/char-fold-tests.el2
-rw-r--r--test/lisp/color-tests.el2
-rw-r--r--test/lisp/comint-tests.el18
-rw-r--r--test/lisp/completion-tests.el2
-rw-r--r--test/lisp/cus-edit-tests.el13
-rw-r--r--test/lisp/custom-tests.el2
-rw-r--r--test/lisp/dabbrev-tests.el2
-rw-r--r--test/lisp/delim-col-tests.el4
-rw-r--r--test/lisp/descr-text-tests.el2
-rw-r--r--test/lisp/desktop-tests.el2
-rw-r--r--test/lisp/dired-aux-tests.el2
-rw-r--r--test/lisp/dired-tests.el2
-rw-r--r--test/lisp/dired-x-tests.el2
-rw-r--r--test/lisp/dnd-tests.el2
-rw-r--r--test/lisp/dom-tests.el2
-rw-r--r--test/lisp/edmacro-tests.el2
-rw-r--r--test/lisp/electric-tests.el2
-rw-r--r--test/lisp/elide-head-tests.el2
-rw-r--r--test/lisp/emacs-lisp/backquote-tests.el2
-rw-r--r--test/lisp/emacs-lisp/backtrace-tests.el2
-rw-r--r--test/lisp/emacs-lisp/benchmark-tests.el2
-rw-r--r--test/lisp/emacs-lisp/bindat-tests.el2
-rw-r--r--test/lisp/emacs-lisp/bytecomp-tests.el2
-rw-r--r--test/lisp/emacs-lisp/cconv-tests.el6
-rw-r--r--test/lisp/emacs-lisp/check-declare-tests.el2
-rw-r--r--test/lisp/emacs-lisp/checkdoc-tests.el14
-rw-r--r--test/lisp/emacs-lisp/cl-extra-tests.el2
-rw-r--r--test/lisp/emacs-lisp/cl-generic-tests.el2
-rw-r--r--test/lisp/emacs-lisp/cl-lib-tests.el2
-rw-r--r--test/lisp/emacs-lisp/cl-macs-tests.el2
-rw-r--r--test/lisp/emacs-lisp/cl-preloaded-tests.el2
-rw-r--r--test/lisp/emacs-lisp/cl-print-tests.el2
-rw-r--r--test/lisp/emacs-lisp/cl-seq-tests.el2
-rw-r--r--test/lisp/emacs-lisp/comp-cstr-tests.el2
-rw-r--r--test/lisp/emacs-lisp/comp-tests.el2
-rw-r--r--test/lisp/emacs-lisp/copyright-tests.el8
-rw-r--r--test/lisp/emacs-lisp/derived-tests.el2
-rw-r--r--test/lisp/emacs-lisp/easy-mmode-tests.el2
-rw-r--r--test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el2
-rw-r--r--test/lisp/emacs-lisp/edebug-tests.el2
-rw-r--r--test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el2
-rw-r--r--test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el2
-rw-r--r--test/lisp/emacs-lisp/eieio-tests/eieio-tests.el2
-rw-r--r--test/lisp/emacs-lisp/ert-tests.el2
-rw-r--r--test/lisp/emacs-lisp/ert-x-tests.el41
-rw-r--r--test/lisp/emacs-lisp/faceup-resources/faceup-test-mode.el2
-rw-r--r--test/lisp/emacs-lisp/faceup-resources/faceup-test-this-file-directory.el2
-rw-r--r--test/lisp/emacs-lisp/faceup-tests/faceup-test-basics.el2
-rw-r--r--test/lisp/emacs-lisp/faceup-tests/faceup-test-files.el2
-rw-r--r--test/lisp/emacs-lisp/find-func-tests.el4
-rw-r--r--test/lisp/emacs-lisp/float-sup-tests.el2
-rw-r--r--test/lisp/emacs-lisp/generator-tests.el2
-rw-r--r--test/lisp/emacs-lisp/gv-tests.el2
-rw-r--r--test/lisp/emacs-lisp/icons-tests.el2
-rw-r--r--test/lisp/emacs-lisp/let-alist-tests.el2
-rw-r--r--test/lisp/emacs-lisp/lisp-mnt-tests.el14
-rw-r--r--test/lisp/emacs-lisp/lisp-mode-tests.el2
-rw-r--r--test/lisp/emacs-lisp/lisp-tests.el2
-rw-r--r--test/lisp/emacs-lisp/macroexp-resources/m1.el2
-rw-r--r--test/lisp/emacs-lisp/macroexp-resources/m2.el2
-rw-r--r--test/lisp/emacs-lisp/macroexp-resources/vk.el2
-rw-r--r--test/lisp/emacs-lisp/macroexp-tests.el2
-rw-r--r--test/lisp/emacs-lisp/map-tests.el2
-rw-r--r--test/lisp/emacs-lisp/memory-report-tests.el2
-rw-r--r--test/lisp/emacs-lisp/multisession-tests.el2
-rw-r--r--test/lisp/emacs-lisp/nadvice-tests.el2
-rw-r--r--test/lisp/emacs-lisp/oclosure-tests.el2
-rwxr-xr-xtest/lisp/emacs-lisp/package-resources/signed/update-signatures.sh2
-rw-r--r--test/lisp/emacs-lisp/package-tests.el2
-rw-r--r--test/lisp/emacs-lisp/pcase-tests.el2
-rw-r--r--test/lisp/emacs-lisp/pp-tests.el2
-rw-r--r--test/lisp/emacs-lisp/range-tests.el2
-rw-r--r--test/lisp/emacs-lisp/regexp-opt-tests.el2
-rw-r--r--test/lisp/emacs-lisp/ring-tests.el2
-rw-r--r--test/lisp/emacs-lisp/rmc-tests.el2
-rw-r--r--test/lisp/emacs-lisp/rx-tests.el8
-rw-r--r--test/lisp/emacs-lisp/seq-tests.el2
-rw-r--r--test/lisp/emacs-lisp/shadow-tests.el2
-rw-r--r--test/lisp/emacs-lisp/shortdoc-tests.el12
-rw-r--r--test/lisp/emacs-lisp/subr-x-tests.el13
-rw-r--r--test/lisp/emacs-lisp/syntax-tests.el2
-rw-r--r--test/lisp/emacs-lisp/tabulated-list-tests.el2
-rw-r--r--test/lisp/emacs-lisp/testcover-resources/testcases.el2
-rw-r--r--test/lisp/emacs-lisp/testcover-tests.el2
-rw-r--r--test/lisp/emacs-lisp/text-property-search-tests.el2
-rw-r--r--test/lisp/emacs-lisp/thunk-tests.el2
-rw-r--r--test/lisp/emacs-lisp/timer-tests.el2
-rw-r--r--test/lisp/emacs-lisp/unsafep-tests.el2
-rw-r--r--test/lisp/emacs-lisp/vtable-tests.el2
-rw-r--r--test/lisp/emacs-lisp/warnings-tests.el2
-rw-r--r--test/lisp/emulation/viper-tests.el2
-rw-r--r--test/lisp/env-tests.el2
-rw-r--r--test/lisp/epg-config-tests.el2
-rw-r--r--test/lisp/epg-tests.el2
-rw-r--r--test/lisp/erc/erc-dcc-tests.el2
-rw-r--r--test/lisp/erc/erc-join-tests.el2
-rw-r--r--test/lisp/erc/erc-match-tests.el2
-rw-r--r--test/lisp/erc/erc-networks-tests.el39
-rw-r--r--test/lisp/erc/erc-sasl-tests.el2
-rw-r--r--test/lisp/erc/erc-scenarios-auth-source.el33
-rw-r--r--test/lisp/erc/erc-scenarios-base-association-nick.el31
-rw-r--r--test/lisp/erc/erc-scenarios-base-association-query.el107
-rw-r--r--test/lisp/erc/erc-scenarios-base-association-samenet.el31
-rw-r--r--test/lisp/erc/erc-scenarios-base-association.el31
-rw-r--r--test/lisp/erc/erc-scenarios-base-compat-rename-bouncer.el31
-rw-r--r--test/lisp/erc/erc-scenarios-base-local-modules.el33
-rw-r--r--test/lisp/erc/erc-scenarios-base-misc-regressions.el31
-rw-r--r--test/lisp/erc/erc-scenarios-base-netid-bouncer-id.el31
-rw-r--r--test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-base.el31
-rw-r--r--test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-both.el2
-rw-r--r--test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-id.el31
-rw-r--r--test/lisp/erc/erc-scenarios-base-netid-bouncer.el31
-rw-r--r--test/lisp/erc/erc-scenarios-base-netid-samenet.el34
-rw-r--r--test/lisp/erc/erc-scenarios-base-reconnect.el31
-rw-r--r--test/lisp/erc/erc-scenarios-base-renick.el31
-rw-r--r--test/lisp/erc/erc-scenarios-base-reuse-buffers.el31
-rw-r--r--test/lisp/erc/erc-scenarios-base-unstable.el85
-rw-r--r--test/lisp/erc/erc-scenarios-base-upstream-recon-soju.el33
-rw-r--r--test/lisp/erc/erc-scenarios-base-upstream-recon-znc.el33
-rw-r--r--test/lisp/erc/erc-scenarios-internal.el31
-rw-r--r--test/lisp/erc/erc-scenarios-join-auth-source.el31
-rw-r--r--test/lisp/erc/erc-scenarios-join-netid-newcmd-id.el31
-rw-r--r--test/lisp/erc/erc-scenarios-join-netid-newcmd.el31
-rw-r--r--test/lisp/erc/erc-scenarios-join-netid-recon-id.el31
-rw-r--r--test/lisp/erc/erc-scenarios-join-netid-recon.el31
-rw-r--r--test/lisp/erc/erc-scenarios-misc.el36
-rw-r--r--test/lisp/erc/erc-scenarios-sasl.el29
-rw-r--r--test/lisp/erc/erc-scenarios-services-misc.el90
-rw-r--r--test/lisp/erc/erc-services-tests.el2
-rw-r--r--test/lisp/erc/erc-tests.el15
-rw-r--r--test/lisp/erc/erc-track-tests.el2
-rw-r--r--test/lisp/erc/resources/base/assoc/queries/netnick.eld42
-rw-r--r--test/lisp/erc/resources/base/assoc/queries/non-erc.eld33
-rw-r--r--test/lisp/erc/resources/base/local-modules/fourth.eld2
-rw-r--r--test/lisp/erc/resources/erc-d/erc-d-i.el29
-rw-r--r--test/lisp/erc/resources/erc-d/erc-d-t.el32
-rw-r--r--test/lisp/erc/resources/erc-d/erc-d-tests.el32
-rw-r--r--test/lisp/erc/resources/erc-d/erc-d-u.el29
-rw-r--r--test/lisp/erc/resources/erc-d/erc-d.el29
-rw-r--r--test/lisp/erc/resources/erc-d/resources/proxy-subprocess.el30
-rw-r--r--test/lisp/erc/resources/erc-scenarios-common.el31
-rw-r--r--test/lisp/erc/resources/networks/announced-missing/foonet.eld3
-rw-r--r--test/lisp/erc/resources/networks/no-module/basic.eld44
-rw-r--r--test/lisp/erc/resources/services/auth-source/recon.eld48
-rw-r--r--test/lisp/eshell/em-alias-tests.el2
-rw-r--r--test/lisp/eshell/em-basic-tests.el2
-rw-r--r--test/lisp/eshell/em-dirs-tests.el2
-rw-r--r--test/lisp/eshell/em-extpipe-tests.el2
-rw-r--r--test/lisp/eshell/em-glob-tests.el2
-rw-r--r--test/lisp/eshell/em-hist-tests.el2
-rw-r--r--test/lisp/eshell/em-ls-tests.el2
-rw-r--r--test/lisp/eshell/em-pred-tests.el2
-rw-r--r--test/lisp/eshell/em-script-tests.el2
-rw-r--r--test/lisp/eshell/em-tramp-tests.el2
-rw-r--r--test/lisp/eshell/esh-arg-tests.el105
-rw-r--r--test/lisp/eshell/esh-cmd-tests.el2
-rw-r--r--test/lisp/eshell/esh-ext-tests.el2
-rw-r--r--test/lisp/eshell/esh-io-tests.el2
-rw-r--r--test/lisp/eshell/esh-opt-tests.el2
-rw-r--r--test/lisp/eshell/esh-proc-tests.el2
-rw-r--r--test/lisp/eshell/esh-util-tests.el2
-rw-r--r--test/lisp/eshell/esh-var-tests.el2
-rw-r--r--test/lisp/eshell/eshell-tests-helpers.el2
-rw-r--r--test/lisp/eshell/eshell-tests.el33
-rw-r--r--test/lisp/faces-resources/faces-test-dark-theme.el2
-rw-r--r--test/lisp/faces-resources/faces-test-light-theme.el2
-rw-r--r--test/lisp/faces-tests.el2
-rw-r--r--test/lisp/ffap-tests.el2
-rw-r--r--test/lisp/filenotify-tests.el2
-rw-r--r--test/lisp/files-tests.el28
-rw-r--r--test/lisp/files-x-tests.el2
-rw-r--r--test/lisp/find-cmd-tests.el2
-rw-r--r--test/lisp/font-lock-tests.el2
-rw-r--r--test/lisp/format-spec-tests.el2
-rw-r--r--test/lisp/gnus/gnus-group-tests.el2
-rw-r--r--test/lisp/gnus/gnus-icalendar-tests.el2
-rw-r--r--test/lisp/gnus/gnus-search-tests.el2
-rw-r--r--test/lisp/gnus/gnus-test-headers.el2
-rw-r--r--test/lisp/gnus/gnus-tests.el2
-rw-r--r--test/lisp/gnus/gnus-util-tests.el2
-rw-r--r--test/lisp/gnus/message-tests.el2
-rw-r--r--test/lisp/gnus/mm-decode-tests.el2
-rw-r--r--test/lisp/gnus/mml-sec-resources/trustlist.txt2
-rw-r--r--test/lisp/gnus/mml-sec-tests.el4
-rw-r--r--test/lisp/gnus/nnrss-tests.el2
-rw-r--r--test/lisp/help-fns-tests.el2
-rw-r--r--test/lisp/help-mode-tests.el2
-rw-r--r--test/lisp/help-tests.el2
-rw-r--r--test/lisp/hfy-cmap-tests.el2
-rw-r--r--test/lisp/hi-lock-tests.el2
-rw-r--r--test/lisp/hl-line-tests.el2
-rw-r--r--test/lisp/htmlfontify-tests.el2
-rw-r--r--test/lisp/ibuffer-tests.el2
-rw-r--r--test/lisp/ido-tests.el2
-rw-r--r--test/lisp/image-file-tests.el2
-rw-r--r--test/lisp/image-tests.el2
-rw-r--r--test/lisp/image/exif-tests.el2
-rw-r--r--test/lisp/image/gravatar-tests.el2
-rw-r--r--test/lisp/image/image-dired-tests.el2
-rw-r--r--test/lisp/image/image-dired-util-tests.el2
-rw-r--r--test/lisp/image/wallpaper-tests.el2
-rw-r--r--test/lisp/imenu-tests.el2
-rw-r--r--test/lisp/info-tests.el2
-rw-r--r--test/lisp/info-xref-tests.el2
-rw-r--r--test/lisp/international/ccl-tests.el2
-rw-r--r--test/lisp/international/mule-tests.el2
-rw-r--r--test/lisp/international/mule-util-tests.el2
-rw-r--r--test/lisp/international/textsec-tests.el2
-rw-r--r--test/lisp/international/ucs-normalize-tests.el5
-rw-r--r--test/lisp/isearch-tests.el2
-rw-r--r--test/lisp/jit-lock-tests.el2
-rw-r--r--test/lisp/json-tests.el2
-rw-r--r--test/lisp/jsonrpc-tests.el2
-rw-r--r--test/lisp/kmacro-tests.el2
-rw-r--r--test/lisp/loadhist-resources/loadhist--bar.el10
-rw-r--r--test/lisp/loadhist-resources/loadhist--foo.el10
-rw-r--r--test/lisp/loadhist-tests.el2
-rw-r--r--test/lisp/lpr-tests.el2
-rw-r--r--test/lisp/ls-lisp-tests.el2
-rw-r--r--test/lisp/mail/flow-fill-tests.el2
-rw-r--r--test/lisp/mail/footnote-tests.el2
-rw-r--r--test/lisp/mail/ietf-drums-date-tests.el2
-rw-r--r--test/lisp/mail/ietf-drums-tests.el2
-rw-r--r--test/lisp/mail/mail-extr-tests.el2
-rw-r--r--test/lisp/mail/mail-parse-tests.el2
-rw-r--r--test/lisp/mail/mail-utils-tests.el2
-rw-r--r--test/lisp/mail/qp-tests.el2
-rw-r--r--test/lisp/mail/rfc2045-tests.el2
-rw-r--r--test/lisp/mail/rfc2047-tests.el2
-rw-r--r--test/lisp/mail/rfc6068-tests.el2
-rw-r--r--test/lisp/mail/rfc822-tests.el2
-rw-r--r--test/lisp/mail/rmail-tests.el2
-rw-r--r--test/lisp/mail/rmailmm-tests.el2
-rw-r--r--test/lisp/mail/undigest-tests.el2
-rw-r--r--test/lisp/mail/uudecode-tests.el2
-rw-r--r--test/lisp/man-tests.el2
-rw-r--r--test/lisp/md4-tests.el2
-rw-r--r--test/lisp/mh-e/mh-limit-tests.el2
-rw-r--r--test/lisp/mh-e/mh-thread-tests.el2
-rw-r--r--test/lisp/mh-e/mh-utils-tests.el2
-rw-r--r--test/lisp/mh-e/mh-xface-tests.el2
-rwxr-xr-xtest/lisp/mh-e/test-all-mh-variants.sh2
-rw-r--r--test/lisp/minibuffer-tests.el2
-rw-r--r--test/lisp/misc-tests.el2
-rw-r--r--test/lisp/mouse-tests.el2
-rw-r--r--test/lisp/mwheel-tests.el2
-rw-r--r--test/lisp/net/browse-url-tests.el2
-rw-r--r--test/lisp/net/dbus-tests.el2
-rw-r--r--test/lisp/net/dig-tests.el2
-rw-r--r--test/lisp/net/eudc-tests.el2
-rw-r--r--test/lisp/net/gnutls-tests.el2
-rw-r--r--test/lisp/net/hmac-md5-tests.el2
-rw-r--r--test/lisp/net/mailcap-tests.el2
-rw-r--r--test/lisp/net/network-stream-tests.el2
-rw-r--r--test/lisp/net/newsticker-tests.el2
-rw-r--r--test/lisp/net/nsm-tests.el2
-rw-r--r--test/lisp/net/ntlm-tests.el2
-rw-r--r--test/lisp/net/puny-tests.el2
-rw-r--r--test/lisp/net/rcirc-tests.el2
-rw-r--r--test/lisp/net/rfc2104-tests.el2
-rw-r--r--test/lisp/net/sasl-cram-tests.el2
-rw-r--r--test/lisp/net/sasl-scram-rfc-tests.el2
-rw-r--r--test/lisp/net/sasl-tests.el2
-rw-r--r--test/lisp/net/secrets-tests.el2
-rw-r--r--test/lisp/net/shr-tests.el2
-rw-r--r--test/lisp/net/socks-tests.el2
-rw-r--r--test/lisp/net/tramp-archive-tests.el2
-rw-r--r--test/lisp/net/tramp-tests.el16
-rw-r--r--test/lisp/net/webjump-tests.el2
-rw-r--r--test/lisp/newcomment-tests.el2
-rw-r--r--test/lisp/nxml/nxml-mode-tests.el2
-rw-r--r--test/lisp/nxml/xsd-regexp-tests.el2
-rw-r--r--test/lisp/obarray-tests.el2
-rw-r--r--test/lisp/obsolete/cl-tests.el2
-rw-r--r--test/lisp/obsolete/inversion-tests.el2
-rw-r--r--test/lisp/obsolete/makesum-tests.el2
-rw-r--r--test/lisp/obsolete/rfc2368-tests.el2
-rw-r--r--test/lisp/obsolete/thumbs-tests.el2
-rw-r--r--test/lisp/org/org-tests.el2
-rw-r--r--test/lisp/paren-tests.el2
-rw-r--r--test/lisp/password-cache-tests.el2
-rw-r--r--test/lisp/pcmpl-linux-tests.el2
-rw-r--r--test/lisp/pcomplete-tests.el2
-rw-r--r--test/lisp/play/animate-tests.el2
-rw-r--r--test/lisp/play/cookie1-tests.el2
-rw-r--r--test/lisp/play/dissociate-tests.el2
-rw-r--r--test/lisp/play/fortune-tests.el2
-rw-r--r--test/lisp/play/life-tests.el2
-rw-r--r--test/lisp/play/morse-tests.el2
-rw-r--r--test/lisp/play/studly-tests.el2
-rw-r--r--test/lisp/progmodes/asm-mode-tests.el2
-rw-r--r--test/lisp/progmodes/autoconf-tests.el2
-rw-r--r--test/lisp/progmodes/bat-mode-tests.el2
-rw-r--r--test/lisp/progmodes/bug-reference-tests.el2
-rw-r--r--test/lisp/progmodes/cc-mode-tests.el2
-rw-r--r--test/lisp/progmodes/compile-tests.el2
-rw-r--r--test/lisp/progmodes/cperl-mode-resources/fontify-punctuation-vars.pl2
-rw-r--r--test/lisp/progmodes/cperl-mode-tests.el4
-rw-r--r--test/lisp/progmodes/eglot-tests.el1320
-rw-r--r--test/lisp/progmodes/elisp-mode-tests.el2
-rw-r--r--test/lisp/progmodes/etags-tests.el2
-rw-r--r--test/lisp/progmodes/executable-tests.el2
-rw-r--r--test/lisp/progmodes/f90-tests.el2
-rw-r--r--test/lisp/progmodes/flymake-tests.el2
-rw-r--r--test/lisp/progmodes/gdb-mi-tests.el2
-rw-r--r--test/lisp/progmodes/glasses-tests.el2
-rw-r--r--test/lisp/progmodes/grep-tests.el2
-rw-r--r--test/lisp/progmodes/hideshow-tests.el2
-rw-r--r--test/lisp/progmodes/js-tests.el2
-rw-r--r--test/lisp/progmodes/octave-tests.el2
-rw-r--r--test/lisp/progmodes/opascal-tests.el2
-rw-r--r--test/lisp/progmodes/pascal-tests.el2
-rw-r--r--test/lisp/progmodes/perl-mode-tests.el2
-rw-r--r--test/lisp/progmodes/project-resources/.dir-locals.el1
-rw-r--r--test/lisp/progmodes/project-resources/etc1
-rw-r--r--test/lisp/progmodes/project-resources/foo1
-rw-r--r--test/lisp/progmodes/project-tests.el17
-rw-r--r--test/lisp/progmodes/ps-mode-tests.el2
-rw-r--r--test/lisp/progmodes/python-tests.el66
-rw-r--r--test/lisp/progmodes/ruby-mode-resources/ruby-after-operator-indent.rb29
-rw-r--r--test/lisp/progmodes/ruby-mode-resources/ruby-block-indent.rb33
-rw-r--r--test/lisp/progmodes/ruby-mode-resources/ruby-method-call-indent.rb15
-rw-r--r--test/lisp/progmodes/ruby-mode-resources/ruby-method-params-indent.rb18
-rw-r--r--test/lisp/progmodes/ruby-mode-resources/ruby-parenless-call-arguments-indent.rb23
-rw-r--r--test/lisp/progmodes/ruby-mode-resources/ruby.rb65
-rw-r--r--test/lisp/progmodes/ruby-mode-tests.el69
-rw-r--r--test/lisp/progmodes/ruby-ts-mode-tests.el254
-rw-r--r--test/lisp/progmodes/scheme-tests.el2
-rw-r--r--test/lisp/progmodes/sh-script-tests.el2
-rw-r--r--test/lisp/progmodes/sql-tests.el2
-rw-r--r--test/lisp/progmodes/subword-tests.el2
-rw-r--r--test/lisp/progmodes/tcl-tests.el2
-rw-r--r--test/lisp/progmodes/xref-tests.el2
-rw-r--r--test/lisp/ps-print-tests.el2
-rw-r--r--test/lisp/register-tests.el2
-rw-r--r--test/lisp/repeat-tests.el32
-rw-r--r--test/lisp/replace-tests.el2
-rw-r--r--test/lisp/rot13-tests.el2
-rw-r--r--test/lisp/saveplace-tests.el2
-rw-r--r--test/lisp/scroll-lock-tests.el2
-rw-r--r--test/lisp/server-tests.el8
-rw-r--r--test/lisp/ses-tests.el2
-rw-r--r--test/lisp/shadowfile-tests.el2
-rw-r--r--test/lisp/shell-tests.el2
-rw-r--r--test/lisp/simple-tests.el2
-rw-r--r--test/lisp/so-long-tests/autoload-longlines-mode-tests.el2
-rw-r--r--test/lisp/so-long-tests/autoload-major-mode-tests.el2
-rw-r--r--test/lisp/so-long-tests/autoload-minor-mode-tests.el2
-rw-r--r--test/lisp/so-long-tests/so-long-tests-helpers.el2
-rw-r--r--test/lisp/so-long-tests/so-long-tests.el2
-rw-r--r--test/lisp/so-long-tests/spelling-tests.el2
-rw-r--r--test/lisp/sort-tests.el2
-rw-r--r--test/lisp/soundex-tests.el2
-rw-r--r--test/lisp/startup-tests.el2
-rw-r--r--test/lisp/subr-tests.el2
-rw-r--r--test/lisp/tab-bar-tests.el2
-rw-r--r--test/lisp/tabify-tests.el2
-rw-r--r--test/lisp/tar-mode-tests.el2
-rw-r--r--test/lisp/tempo-tests.el2
-rw-r--r--test/lisp/term-tests.el2
-rw-r--r--test/lisp/term/tty-colors-tests.el2
-rw-r--r--test/lisp/textmodes/bibtex-tests.el2
-rw-r--r--test/lisp/textmodes/conf-mode-tests.el2
-rw-r--r--test/lisp/textmodes/css-mode-tests.el2
-rw-r--r--test/lisp/textmodes/dns-mode-tests.el2
-rw-r--r--test/lisp/textmodes/emacs-news-mode-tests.el2
-rw-r--r--test/lisp/textmodes/fill-tests.el2
-rw-r--r--test/lisp/textmodes/mhtml-mode-tests.el2
-rw-r--r--test/lisp/textmodes/page-tests.el2
-rw-r--r--test/lisp/textmodes/paragraphs-tests.el2
-rw-r--r--test/lisp/textmodes/po-tests.el2
-rw-r--r--test/lisp/textmodes/reftex-tests.el2
-rw-r--r--test/lisp/textmodes/sgml-mode-tests.el2
-rw-r--r--test/lisp/textmodes/texinfo-tests.el2
-rw-r--r--test/lisp/textmodes/tildify-tests.el2
-rw-r--r--test/lisp/textmodes/underline-tests.el2
-rw-r--r--test/lisp/thingatpt-tests.el2
-rw-r--r--test/lisp/thread-tests.el2
-rw-r--r--test/lisp/time-stamp-tests.el2
-rw-r--r--test/lisp/time-tests.el2
-rw-r--r--test/lisp/timezone-tests.el2
-rw-r--r--test/lisp/url/url-auth-tests.el2
-rw-r--r--test/lisp/url/url-domsuf-tests.el2
-rw-r--r--test/lisp/url/url-expand-tests.el2
-rw-r--r--test/lisp/url/url-file-tests.el2
-rw-r--r--test/lisp/url/url-future-tests.el2
-rw-r--r--test/lisp/url/url-handlers-tests.el2
-rw-r--r--test/lisp/url/url-misc-tests.el2
-rw-r--r--test/lisp/url/url-parse-tests.el2
-rw-r--r--test/lisp/url/url-tramp-tests.el2
-rw-r--r--test/lisp/url/url-util-tests.el2
-rw-r--r--test/lisp/use-package/use-package-tests.el1959
-rw-r--r--test/lisp/vc/add-log-tests.el2
-rw-r--r--test/lisp/vc/diff-mode-tests.el81
-rw-r--r--test/lisp/vc/ediff-diff-tests.el2
-rw-r--r--test/lisp/vc/ediff-ptch-tests.el2
-rw-r--r--test/lisp/vc/log-edit-tests.el2
-rw-r--r--test/lisp/vc/smerge-mode-tests.el2
-rw-r--r--test/lisp/vc/vc-bzr-tests.el2
-rw-r--r--test/lisp/vc/vc-git-tests.el2
-rw-r--r--test/lisp/vc/vc-hg-tests.el2
-rw-r--r--test/lisp/vc/vc-tests.el2
-rw-r--r--test/lisp/version-tests.el2
-rw-r--r--test/lisp/wdired-tests.el2
-rw-r--r--test/lisp/whitespace-tests.el80
-rw-r--r--test/lisp/wid-edit-tests.el2
-rw-r--r--test/lisp/x-dnd-tests.el2
-rw-r--r--test/lisp/xdg-tests.el2
-rw-r--r--test/lisp/xml-tests.el2
-rw-r--r--test/lisp/xt-mouse-tests.el2
-rw-r--r--test/lisp/yank-media-tests.el2
-rw-r--r--test/manual/biditest.el2
-rw-r--r--test/manual/cedet/cedet-utests.el2
-rw-r--r--test/manual/cedet/ede-tests.el2
-rw-r--r--test/manual/cedet/semantic-tests.el2
-rw-r--r--test/manual/cedet/tests/test.c2
-rw-r--r--test/manual/cedet/tests/test.el2
-rw-r--r--test/manual/cedet/tests/test.make2
-rw-r--r--test/manual/cedet/tests/testpolymorph.cpp2
-rw-r--r--test/manual/cedet/tests/testspp.c2
-rw-r--r--test/manual/cedet/tests/testsppreplace.c2
-rw-r--r--test/manual/cedet/tests/testsppreplaced.c2
-rw-r--r--test/manual/etags/c-src/abbrev.c2
-rw-r--r--test/manual/etags/c-src/emacs/src/gmalloc.c2
-rw-r--r--test/manual/etags/c-src/emacs/src/keyboard.c2
-rw-r--r--test/manual/etags/c-src/emacs/src/lisp.h2
-rw-r--r--test/manual/etags/c-src/emacs/src/regex.h2
-rw-r--r--test/manual/etags/c-src/etags.c2
-rw-r--r--test/manual/etags/c-src/exit.c2
-rw-r--r--test/manual/etags/c-src/exit.strange_suffix2
-rw-r--r--test/manual/etags/c-src/getopt.h2
-rw-r--r--test/manual/etags/c-src/sysdep.h2
-rw-r--r--test/manual/etags/el-src/emacs/lisp/progmodes/etags.el2
-rw-r--r--test/manual/etags/tex-src/texinfo.tex2
-rw-r--r--test/manual/etags/y-src/cccp.c2
-rw-r--r--test/manual/etags/y-src/parse.c2
-rw-r--r--test/manual/etags/y-src/parse.y2
-rw-r--r--test/manual/image-circular-tests.el2
-rw-r--r--test/manual/image-size-tests.el2
-rw-r--r--test/manual/image-tests.el2
-rw-r--r--test/manual/image-transforms-tests.el2
-rw-r--r--test/manual/indent/pascal.pas2
-rw-r--r--test/manual/noverlay/Makefile.in2
-rwxr-xr-xtest/manual/noverlay/check-sanitize.sh2
-rw-r--r--test/manual/noverlay/emacs-compat.h2
-rw-r--r--test/manual/noverlay/itree-tests.c2
-rw-r--r--test/manual/noverlay/overlay-perf.el20
-rw-r--r--test/manual/process-callout-tests.el2
-rw-r--r--test/manual/redisplay-testsuite.el2
-rw-r--r--test/manual/scroll-tests.el2
-rw-r--r--test/misc/test-custom-deps.el2
-rw-r--r--test/misc/test-custom-libs.el2
-rw-r--r--test/misc/test-custom-noloads.el2
-rw-r--r--test/misc/test-custom-opts.el2
-rw-r--r--test/src/alloc-tests.el2
-rw-r--r--test/src/buffer-tests.el2
-rw-r--r--test/src/callint-tests.el2
-rw-r--r--test/src/callproc-tests.el2
-rw-r--r--test/src/casefiddle-tests.el2
-rw-r--r--test/src/character-tests.el2
-rw-r--r--test/src/charset-tests.el2
-rw-r--r--test/src/chartab-tests.el2
-rw-r--r--test/src/cmds-tests.el2
-rw-r--r--test/src/coding-tests.el2
-rw-r--r--test/src/comp-resources/comp-test-funcs-dyn.el2
-rw-r--r--test/src/comp-resources/comp-test-funcs.el2
-rw-r--r--test/src/comp-resources/comp-test-pure.el2
-rw-r--r--test/src/comp-tests.el2
-rw-r--r--test/src/data-tests.el2
-rw-r--r--test/src/decompress-tests.el2
-rw-r--r--test/src/doc-tests.el2
-rw-r--r--test/src/editfns-tests.el2
-rw-r--r--test/src/emacs-module-resources/mod-test.c2
-rw-r--r--test/src/emacs-module-tests.el2
-rw-r--r--test/src/emacs-tests.el2
-rw-r--r--test/src/eval-tests.el2
-rw-r--r--test/src/fileio-tests.el2
-rw-r--r--test/src/filelock-tests.el2
-rw-r--r--test/src/floatfns-tests.el2
-rw-r--r--test/src/fns-tests.el2
-rw-r--r--test/src/font-tests.el2
-rw-r--r--test/src/image-tests.el2
-rw-r--r--test/src/indent-tests.el2
-rw-r--r--test/src/inotify-tests.el2
-rw-r--r--test/src/json-tests.el2
-rw-r--r--test/src/keyboard-tests.el2
-rw-r--r--test/src/keymap-tests.el2
-rw-r--r--test/src/lcms-tests.el2
-rw-r--r--test/src/lread-tests.el2
-rw-r--r--test/src/marker-tests.el2
-rw-r--r--test/src/minibuf-tests.el2
-rw-r--r--test/src/print-tests.el2
-rw-r--r--test/src/process-tests.el2
-rw-r--r--test/src/regex-emacs-tests.el2
-rw-r--r--test/src/search-tests.el2
-rw-r--r--test/src/sqlite-tests.el3
-rw-r--r--test/src/syntax-tests.el2
-rw-r--r--test/src/textprop-tests.el2
-rw-r--r--test/src/thread-tests.el2
-rw-r--r--test/src/timefns-tests.el2
-rw-r--r--test/src/treesit-tests.el527
-rw-r--r--test/src/undo-tests.el2
-rw-r--r--test/src/xdisp-tests.el2
-rw-r--r--test/src/xfaces-tests.el2
-rw-r--r--test/src/xml-tests.el2
3270 files changed, 25891 insertions, 7746 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 272a29f38f9..07401861bfb 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.
@@ -339,3 +339,7 @@ lib-src/seccomp-filter-exec.pfc
# Ignore a directory used by dap-mode.
.vscode
/test/gmp.h
+
+# GDB history
+.gdb_history
+_gdb_history
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 143be59c9e9..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.
@@ -28676,7 +28676,7 @@
* lisp/faces.el (set-face-attribute): Don't be fooled too easily
by a hyphen in a font's name.
- Fix value of posn-at-pont in R2L lines
+ Fix value of posn-at-point in R2L lines
* src/keyboard.c (Fposn_at_x_y, Fposn_at_point): Allow X pixel
coordinate of -1, for a newline in a right-to-left line that
overflowed into the left fringe.
@@ -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 136a276b632..3d733804e39 100644
--- a/ChangeLog.3
+++ b/ChangeLog.3
@@ -1654,7 +1654,7 @@
This reverts commit 78f76fe16e2737b40694f82af28d17a90a21ed7b.
The commit made calls to cl-concatenate bug out, since
- autoloading defalises doesn't work very well (bug#54901).
+ autoloading defaliases doesn't work very well (bug#54901).
2022-04-12 Eli Zaretskii <eliz@gnu.org>
@@ -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
@@ -14724,7 +14724,7 @@
* lisp/icomplete.el (icomplete-vertical-mode):
(fido-vertical-mode): Tweak docstring. Turn on
- icomplete-mode. and fido-mdoe
+ icomplete-mode. and fido-mode
2021-08-16 Glenn Morris <rgm@gnu.org>
@@ -20654,7 +20654,7 @@
* lisp/progmodes/cc-engine.el (c-clear-<-pair-props, c-clear->-pair-props)
(c-clear-<-pair-props-if-match-after, c-clear->-pair-props-if-match-before)
(c-forward-<>-arglist-recur):
- Invalidate caches with c-trunctate-lit-pos-cache.
+ Invalidate caches with c-truncate-lit-pos-cache.
(c-forward-<>-arglist-recur): If in a matching <...> expression, the < has a
syntax-table property, but the > not, remove that property.
@@ -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>
@@ -28297,7 +28297,7 @@
2021-04-17 Eli Zaretskii <eliz@gnu.org>
- * src/emacs.c (load_pdump): Fix compilation on picky-complier platforms.
+ * src/emacs.c (load_pdump): Fix compilation on picky-compiler platforms.
2021-04-17 Daniel MartĂ­n <mardani29@yahoo.es>
@@ -29362,7 +29362,7 @@
Make the function correctly recognize a brace block preceded by an
introductory line without a parameter list.
- * lisp/progmodes/cc-cmds.el (c-where-wrt-brace-contruct): Reintroduce the use
+ * lisp/progmodes/cc-cmds.el (c-where-wrt-brace-construct): Reintroduce the use
of c-beginning-of-decl-1, which was removed some weeks ago, in place of a
c-syntactic-skip-backward. Reformulate the code generally.
@@ -31051,7 +31051,7 @@
2021-03-28 Lars Ingebrigtsen <larsi@gnus.org>
- Clarify the doc string of plist-memeber and plist-put
+ Clarify the doc string of plist-member and plist-put
* src/fns.c (Fplist_member):
(Fplist_put): Clarify what comparison function is used for PROP
@@ -35236,7 +35236,7 @@
2021-03-04 Andrea Corallo <akrl@sdf.org>
- * src/comp.c (hash_native_abi): Account for `system-configuraton-options'.
+ * src/comp.c (hash_native_abi): Account for `system-configuration-options'.
2021-03-04 Glenn Morris <rgm@gnu.org>
@@ -46491,7 +46491,7 @@
Fix Quit button in dictionary buffer
- * lisp/net/dictionary.el (dictionay-close): Changing the arity of the
+ * lisp/net/dictionary.el (dictionary-close): Changing the arity of the
function in cc5f2803785c5dc785f09a292313cf799e8d29bb was a mistake.
Restore it, but mark the argument as unused to avoid a
wrong-number-of-arguments error when using the Quit button.
@@ -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)
@@ -80628,7 +80628,7 @@
2020-05-17 Andrea Corallo <akrl@sdf.org>
- Fix Garbage Collector for missing calle-saved regs content (Bug#41357)
+ Fix Garbage Collector for missing callee-saved regs content (Bug#41357)
* src/alloc.c (SET_STACK_TOP_ADDRESS): Do not call
__builtin_unwind_init.
@@ -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)
@@ -88998,7 +88998,7 @@
2020-01-19 Stefan Kangas <stefankangas@gmail.com>
- Make arguments to dired-chage-marks non-optional
+ Make arguments to dired-change-marks non-optional
* lisp/dired.el (dired-change-marks): Make arguments
non-optional. (Bug#29842)
@@ -103735,7 +103735,7 @@
Fixes bug#38131.
- This is not the best way to have fido-mdoe emulate that particular bit
+ This is not the best way to have fido-mode emulate that particular bit
of ido-mode.
This reverts commit 5761a1a3939e23d8e8c725241dd9398a12f191b0.
@@ -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.
@@ -113661,7 +113661,7 @@
2019-09-04 Lars Ingebrigtsen <larsi@gnus.org>
- Make the NSM not pop up an X dialogue on non-mouse actions
+ Make the NSM not pop up an X dialog on non-mouse actions
* lisp/emacs-lisp/rmc.el (read-multiple-choice): Don't pop up X
dialogs on (url-retrieve "https://expired.badssl.com/" #'ignore)
@@ -118445,7 +118445,7 @@
internal variable...
(browse-url-browser-function, browse-url-external-browser): Used
by these two; the latter of which is a new variable.
- (browse-url-botton-regexp): New variable.
+ (browse-url-button-regexp): New variable.
(browse-url-button-map): New keymap.
(browse-url-button): New face.
(browse-url-add-buttons): New function to add clickable browse-url
@@ -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>
@@ -124088,7 +124088,7 @@
This is fine when the GPG key is cached and each entry can be
decrypted without user interaction. However, for security some people
have their GPG on a hardware token like a Yubikey setup so that they
- have to touch a sensor on the toke for every cryptographic operation,
+ have to touch a sensor on the token for every cryptographic operation,
in which case it becomes inconvenient as each attempt to find an entry
requires a variable number of touches of the hardware token.
@@ -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)
@@ -139023,7 +139023,7 @@
Add 'breakpoint' to builtins for Python
* lisp/progmodes/python.el (python-font-lock-keywords-level-2)
- (python-font-lock-keywords-maxiumum-decoration): Add 'breakpoint'
+ (python-font-lock-keywords-maximum-decoration): Add 'breakpoint'
to the list of builtins, it's new as of Python 3.7.
2019-03-01 Eli Zaretskii <eliz@gnu.org>
@@ -143055,7 +143055,7 @@
2019-01-05 JoĂ£o TĂ¡vora <joaotavora@gmail.com>
- New flymake-supress-zero-counters defcustom
+ New flymake-suppress-zero-counters defcustom
A feature suggested by Yuri Khan <yurivkhan@gmail.com>.
@@ -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.
@@ -185861,7 +185861,7 @@
(flymake-start-syntax-check-on-find-file): Obsolete alias for
flymake-start-on-flymake-mode.
(flymake-start): Redesign. Affect the global post-command-hook
- and local window-configuraiton-change-hook.
+ and local window-configuration-change-hook.
(flymake--schedule-timer-maybe)
(flymake-after-change-function, flymake-after-save-hook): Pass
t to flymake-start.
@@ -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>
@@ -190903,7 +190903,7 @@
(initFrameFromEmacs) [NS_IMPL_COCOA]: Handle ns-appearance and
ns-transparent-titlebar frame parameters.
* doc/lispref/frames.texi (Window Management Parameters): Document
- ns-apperance and ns-transparent-titlebar.
+ ns-appearance and ns-transparent-titlebar.
2017-08-22 Alan Mackenzie <acm@muc.de>
@@ -202762,7 +202762,7 @@
(w32_frame_parm_handlers): Add entries for new frame
parameters.
* src/w32font.c (Fx_select_font): Handle `z-group-above'
- frames during font selection dialogue.
+ frames during font selection dialog.
* src/w32term.c (construct_mouse_wheel): Construct mouse wheel
event from F's w32 window.
(w32_mouse_position): Handle child frames.
@@ -204016,7 +204016,7 @@
2017-04-02 Michael Albinus <michael.albinus@gmx.de>
- Apply connecion-local variables for shells
+ Apply connection-local variables for shells
* doc/misc/tramp.texi (Remote processes): Show use of connection-local
variables. Don't mention Emacs 23 anymore.
@@ -204027,7 +204027,7 @@
(connection-local-set-profiles, with-connection-local-profiles):
Adapt docstring.
- * lisp/shell.el (shell): Apply connecion-local variables.
+ * lisp/shell.el (shell): Apply connection-local variables.
2017-04-01 Evgeni Kolev <evgenysw@gmail.com> (tiny change)
@@ -206673,7 +206673,7 @@
* lisp/emacs-lisp/package.el (package-initialize): Check
`after-init-time' rather than `load-file-name' to decide if
`package--ensure-init-file' should be called. Depending on
- `load-file-name' will fail if the user calls `pacakge-initialize' in
+ `load-file-name' will fail if the user calls `package-initialize' in
file which is loaded from the init file (Bug#24643, Bug#25819).
2017-02-26 Eli Zaretskii <eliz@gnu.org>
@@ -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.
@@ -229958,7 +229958,7 @@
Use #' read syntax for functions.
(file-notify-test05-dir-validity)
(file-notify-test06-many-events): Simplify directory creation.
- (file-notify-test09-sufficient-ressources): New test.
+ (file-notify-test09-sufficient-resources): New test.
2016-03-04 Lars Ingebrigtsen <larsi@gnus.org>
@@ -231088,7 +231088,7 @@
* lisp/gnus/gnus-rfc1843.el: New file for Gnus/rfc1843
interface functions.
- * lisp/gnus/gnus-rfc1843.el: Move all Gnus-specifig functions to
+ * lisp/gnus/gnus-rfc1843.el: Move all Gnus-specific functions to
gnus-rfc1843.
2016-02-22 Lars Ingebrigtsen <larsi@gnus.org>
@@ -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 2f11148411b..35bea4e5f57 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 4743d776918..735d426b09b 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.
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
new file mode 100755
index 00000000000..3fb87dd1b89
--- /dev/null
+++ b/admin/check-man-pages
@@ -0,0 +1,56 @@
+#!/bin/bash
+### check-man-pages - check man pages for errors
+
+## Copyright (C) 2022-2023 Free Software Foundation, Inc.
+
+## Author: Stefan Kangas <stefankangas@gmail.com>
+
+## 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:
+
+## Check Emacs man pages for errors using `man'.
+
+### Code:
+
+source "${0%/*}/emacs-shell-lib"
+
+exit_status=0
+
+cd "$PD"/../doc/man
+for page in *.1; do
+ # ctags.1 just includes the man page etags.1, which AFAICT will
+ # default to the one installed on the system (!), instead of the
+ # one in the repository. So checking it is pointless, and we will
+ # in any case already check etags.1 separately.
+ if [ "$page" == "ctags.1" ]; then
+ continue
+ fi
+ log=$(emacs_mktemp)
+ LC_ALL=C.UTF-8 MANROFFSEQ='' MANWIDTH=80 \
+ man --warnings=all,mac -E UTF-8 -l -Tutf8 -Z "$page" >/dev/null 2> "$log"
+ log_size=$(stat --format=%s "$log")
+ if [ "$log_size" -ne 0 ]; then
+ echo "doc/man/$page:"
+ # Point to the correct file for *compilation* buffers.
+ cat "$log" \
+ | sed 's/troff: man1\/\([^ ]\+\)\.1/troff: doc\/man\/\1.1/' \
+ | sed "s/<standard input>/doc\/man\/$page/"
+ exit_status=1
+ fi
+done
+
+exit $exit_status
diff --git a/admin/cus-test.el b/admin/cus-test.el
index 7e73f2e44aa..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
@@ -145,7 +145,8 @@ Names should be as they appear in loaddefs.el.")
(require 'cus-load)
(defvar cus-test-errors nil
- "List of problematic variables found by `cus-test-apropos'.")
+ "List of problematic variables found by `cus-test-apropos'.
+Each element is (VARIABLE . PROBLEM); see `cus-test--format-problem'.")
(defvar cus-test-tested-variables nil
"List of options tested by last call of `cus-test-apropos'.")
@@ -181,6 +182,15 @@ Set by `cus-test-noloads'.")
;; (defvar cus-test-vars-cus-loaded nil
;; "A list of options loaded by `custom-load-symbol'.")
+(defun cus-test--format-error (err)
+ "Format an element of `cus-test-errors'."
+ (pcase err
+ (`(,var :type-error ,value ,type)
+ (format "variable: %s\n value: %S\n type: %S" var value type))
+ (`(,var :other-error ,e)
+ (format "variable: %s\n error: %S" var e))
+ (_ (format "%S" err))))
+
(defun cus-test-apropos (regexp)
"Check the options matching REGEXP.
The detected problematic options are stored in `cus-test-errors'."
@@ -200,8 +210,7 @@ The detected problematic options are stored in `cus-test-errors'."
(let* ((type (custom-variable-type symbol))
(conv (widget-convert type))
(get (or (get symbol 'custom-get) 'default-value))
- values
- mismatch)
+ values)
(when (default-boundp symbol)
(push (funcall get symbol) values)
(push (eval (car (get symbol 'standard-value)) t) values))
@@ -215,7 +224,9 @@ The detected problematic options are stored in `cus-test-errors'."
;; TODO for booleans, check for values that can be
;; evaluated and are not t or nil. Usually a bug.
(unless (widget-apply conv :match value)
- (setq mismatch 'mismatch)))
+ (let ((err (list symbol :type-error value type)))
+ (unless (member err cus-test-errors)
+ (push err cus-test-errors)))))
values)
;; Store symbols with a custom-get property.
@@ -231,13 +242,12 @@ The detected problematic options are stored in `cus-test-errors'."
(and (consp c-value)
(boundp symbol)
(not (equal (eval (car c-value) t) (symbol-value symbol)))
- (add-to-list 'cus-test-vars-with-changed-state symbol)))
-
- (if mismatch
- (push symbol cus-test-errors)))
+ (add-to-list 'cus-test-vars-with-changed-state symbol))))
(error
- (push symbol cus-test-errors)
+ (let ((err (list symbol :other-error alpha)))
+ (unless (member err cus-test-errors)
+ (push err cus-test-errors)))
(message "Error for %s: %s" symbol alpha))))
(cus-test-get-options regexp))
(message "%s options tested"
@@ -292,7 +302,7 @@ currently defined groups."
(insert "No errors found by cus-test.")
(insert "The following variables seem to have problems:\n\n")
(dolist (e cus-test-errors)
- (insert (symbol-name e) "\n")))))
+ (insert (cus-test--format-error e) "\n")))))
(defun cus-test-load-custom-loads ()
"Call `custom-load-symbol' on all atoms."
@@ -399,7 +409,7 @@ Returns a list of variables with suspicious types."
(message "No problems found")
nil)
(message "The following options might have problems:")
- (cus-test-message cus-test-errors)
+ (cus-test-message (mapcar #'cus-test--format-error cus-test-errors))
cus-test-errors))
(defun cus-test-deps ()
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..cce4a8402a7 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
diff --git a/admin/git-bisect-start b/admin/git-bisect-start
index cf0c8cde410..a439ee7fe15 100755
--- a/admin/git-bisect-start
+++ b/admin/git-bisect-start
@@ -1,9 +1,10 @@
#!/bin/bash
-### Start a git bisection, and prune the branches that are the result of
-### merging external trees into the Emacs repository.
+### Start a git bisection, ensuring that commits in branches that are
+### 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.
@@ -22,19 +23,1654 @@
### Commentary:
-## Marking the last commits of external tree merges as "good" ensures
-## that all the commits between the external tree root and the merge
-## (excluding the merge-commit itself) are regarded as "good", so "git
-## bisect" will never descend into these branches, which only have the
-## files of the external tree, and in which Emacs can therefore not be
-## built. The last commit is the parent of the merge commit in the
-## external tree, that is, the parent of the merge commit that is not
-## on master.
+## This script can be executed directly, at the root of the Emacs
+## repository, with:
+##
+## ./admin/git-bisect-start
+##
+## The arguments to that script, if any, are passed to 'git bisect
+## start' (see 'git help bisect' for a description of the arguments
+## that can be used with 'git bisect start').
+##
+## It can also be executed automatically, when 'git bisect start' is
+## called, with the help of the following wrapper script, that should
+## be named 'git' and should be placed before the actual git binary in
+## PATH. This is useful in particular when git is used through an
+## interface such as Magit.
+##
+## #!/bin/bash
+## REAL_GIT=$(which -a git | sed -n 2p)
+## [ -z $REAL_GIT ] && { echo "fatal: 'git' not found"; exit 128; }
+## if [[ "$($REAL_GIT rev-parse --show-toplevel 2> /dev/null)" == "$(pwd)" ]] &&
+## [ -x ./admin/git-bisect-start ] &&
+## [[ "$1" == "bisect" && "$2" == "start" ]]
+## then
+## shift 2
+## exec env REAL_GIT=$REAL_GIT ./admin/git-bisect-start "$@"
+## else
+## exec $REAL_GIT "$@"
+## fi
### Code:
-git bisect start
+[ -z $REAL_GIT ] && REAL_GIT=git
+
+$REAL_GIT bisect start "$@"
+
+## After the merge of an external tree, the last commit in the
+## external tree and all its parents should be skipped, because Emacs
+## cannot be built on these commits, as they only contain the files of
+## the external tree. That last commit that should be placed after a
+## '# SKIP-BRANCH ' below is the parent of the merge commit in the
+## external tree, that is, the parent of the merge commit that is not
+## 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 repository).
+
+for C in $(cat $0 | grep '^# SKIP-BRANCH ' | sed 's/^# SKIP-BRANCH //')
+do
+ $REAL_GIT bisect skip $($REAL_GIT rev-list $C)
+done
+
+# Prune commits 1e5b753bf4..806734c1b1 introduced by 0186faf2a1
+# (Eglot merge on Oct 20 2022)
+# SKIP-BRANCH 806734c1b1f433de43d59d9a5e3a1e89d64315f6
+
+# Prune commits 31ea42e15e..58cc931e92 introduced by 4a1e9d61b5
+# (use-package merge on Nov 30 2022)
+# SKIP-BRANCH 58cc931e92ece70c3e64131ee12a799d65409100
+
+## The list below is the exhaustive list of all commits between Dec 1
+## 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
+## on some of these commits. It is of course also possible (and
+## likely) that building Emacs on some commits not present in that
+## list will fail with non-default options, with other compilers, or
+## on other platforms.
+
+$REAL_GIT bisect skip $(cat $0 | grep '^# SKIP-SINGLE ' | sed 's/^# SKIP-SINGLE //')
-# Prune commits 1e5b753bf4..806734c1b1 introduced by 0186faf2a1 (Eglot
-# merge on Oct 20 2022)
-git bisect good 806734c1b1f433de43d59d9a5e3a1e89d64315f6
+# SKIP-SINGLE f37f93f364aed34275f515a8c933f48a0e2735b9
+# SKIP-SINGLE ba8e883fa30f1267c27751c1ee9df25a5dde4c0c
+# SKIP-SINGLE 3ef50c1ff691b0a6c2f56da76f7c1c9b572d8be8
+# SKIP-SINGLE 54f52a1390c394f42203f39d0b4d73318203e092
+# SKIP-SINGLE 128cacda1c79983f0b64773afc029bc757cfb7b8
+# SKIP-SINGLE fa7d1f075fb862ae4ca28390abf33d625dbd2813
+# SKIP-SINGLE 16ac7c0fc91b5eb09f2a129fc2c01281369f897a
+# SKIP-SINGLE 8ad92413b9349613f9815bd0aaf523896a84b479
+# SKIP-SINGLE 137898d89359c63ec05d7bb5eedc2d2f59102a11
+# SKIP-SINGLE 66a5abb102ec1d6e4c327632ef235d1eb6433291
+# SKIP-SINGLE e4deba098e0281538a0e7b04d849989f17e5bcc7
+# SKIP-SINGLE de4624c99ea5bbe38ad5aff7b6461cc5c740d0be
+# SKIP-SINGLE bfa88520136dd6b187ba101e6db5a5f8f0d5e874
+# SKIP-SINGLE f441451658ecb8d0d8ba386d9fd3eebf3b17d549
+# SKIP-SINGLE bf7f7c0d82a56ed1b76358657e74ca2833b19fe2
+# SKIP-SINGLE a1cb68be6c94513c436fd52e4453cb7afe28f2ba
+# SKIP-SINGLE 25d38a06eceb0853190a2d9acf53d85686f524bd
+# SKIP-SINGLE a7e4870f165e9fd36d5cfcabb19b215b94373602
+# SKIP-SINGLE 6a82d19db18f8480342cc4c1a0ad76c75df41941
+# SKIP-SINGLE cd0e63652445c90af7167b48d83e410af1e6e590
+# SKIP-SINGLE 097b1686b6ac518ba8c2ae225eb62560c2010431
+# SKIP-SINGLE 27accec97022a49b362feeb36293fdce2947eb43
+# SKIP-SINGLE e0e95199b93a232e5d4da67823364676ca9cb67c
+# SKIP-SINGLE 36cbe217c818000d90fea132f0c8041f06748502
+# SKIP-SINGLE 6b4195f2ace1f6328c5a833fde40f39babef4fa6
+# SKIP-SINGLE 4e6140b28324a9a63d54084c920206d00aed094e
+# SKIP-SINGLE 19cb3985a3795539b51d70625904e95a6e581eef
+# SKIP-SINGLE c52a9b6ddd9166571e6bc8bb9426b0267874f9fa
+# SKIP-SINGLE 8189b97e5ca12aff8ea34617431a868010643b5b
+# SKIP-SINGLE 0d3c57dcf3187864c0b6fd6115ee80ad33faf553
+# SKIP-SINGLE 23a130ee0d61fc39cee157921679809017a02b39
+# SKIP-SINGLE fbe6b90b0ced594cf74d5fd0dc9a32666f0d7d38
+# SKIP-SINGLE 5f3379b33866ff7dc16856b6c29712eae860af0e
+# SKIP-SINGLE 46193d5209780d21b848374d8c377fb6c8896d1b
+# SKIP-SINGLE 522f16dac945eee351cefb066af40f0d1a683f38
+# SKIP-SINGLE 1fcbd352f8116aca1ecdb62e84f3d86b89bc446f
+# SKIP-SINGLE 086c4eaf9d4ecc5074088115fa01c0b2fb061246
+# SKIP-SINGLE 37956463d67795819fe7d8fe02d6249388364783
+# SKIP-SINGLE 309b46420e83826ed1e0b947f98a47e8525e3c36
+# SKIP-SINGLE 8c0f326ea237e8acd03c51c1b3a44d237c044562
+# SKIP-SINGLE 88549ec38e9bb30e338a9985d0de4e6263b40fb7
+# SKIP-SINGLE 99af58d74e431da6b55f21272bf72a9f56ce0900
+# SKIP-SINGLE 630e2d2e6aeba60f178c6ef2b283622070b873b3
+# SKIP-SINGLE 79f017d5c3019f8bc2a5014beda28bb3b829a8e3
+# SKIP-SINGLE 78f869687e86d4a9f91003dbbbbacde2e2741487
+# SKIP-SINGLE 3ea055c90ed0b6c486518265300fa7219f8e5a29
+# SKIP-SINGLE b91bfa10413182654a76d0ba337198f39a4d0e8e
+# SKIP-SINGLE 7cc95d4d86e5a9f2df248d2aa7c8cc423c8f06e3
+# SKIP-SINGLE cb70725584a754a491ddad82c42278f17c714a2f
+# SKIP-SINGLE 0b544b676473dedf34c6cb6a3315bec1f42d7162
+# SKIP-SINGLE 8929746489bb257d1e29c3bab629b3b67e3117d2
+# SKIP-SINGLE 064541af6a71bf45d530fe34b7e00c8123ee93d8
+# SKIP-SINGLE 501ad546263ed2a902be1c9d8c1bb3af5794066b
+# SKIP-SINGLE 236648fe2623a10c8ca02637b79cd0ceffd0b6b9
+# SKIP-SINGLE 1b4442bee921d6698fc8ecac1c95c39f7ca2efe4
+# SKIP-SINGLE 8ed8ef307d9a28f6c3336a448c7fbdfe8a733d83
+# SKIP-SINGLE adfb6f1dc26a927cf4bab24bdfae54b51e3ae0ec
+# SKIP-SINGLE 6220faeb4e9be16b9dec728e72ea8dff2cfe35ba
+# SKIP-SINGLE 5ec3a58462e99533ea5200de356302181d634d0b
+# SKIP-SINGLE 04ea55fa471f0c75eeee6ccea33cf91c81fc246c
+# SKIP-SINGLE e9ec1c5b26139057f85548184ee4b47f3e29f564
+# SKIP-SINGLE ee9970734facdff57c79811a7b60973a0b9ec6b2
+# SKIP-SINGLE 4c1d7acf81a4dcec97fa4daf9e9f414e1321bfdb
+# SKIP-SINGLE 01ebe5dc0b1c71191f6a713fec245a188d587772
+# SKIP-SINGLE d8cca4d8c56a90ec9215d7bfb0b0edfa3a36ad4f
+# SKIP-SINGLE 382f6603ad4ba2a69b3961bdc68580ce77d222f9
+# SKIP-SINGLE 490fc5a5029c0d8e527a0c7f423ba83fd6afda60
+# SKIP-SINGLE cadb044fc2e69266308cdcabe6181be0f624b484
+# SKIP-SINGLE fea1ad36a0f7b1538984ab0f077095a53c570aa4
+# SKIP-SINGLE 84eef501554324b22c7a838aabed77aa79315121
+# SKIP-SINGLE 44c95c58b26b7b9d75965a83930ec3d77ffae28f
+# SKIP-SINGLE de456d1e4a1d7e34be6d040e0d8a04c42b14e62e
+# SKIP-SINGLE ce16aba66d39c076aeef0c898403e44cbfbfabbb
+# SKIP-SINGLE 89159e78bb449d3c13506a37d4a5df4424958279
+# SKIP-SINGLE 4db844a4532592ed2542c05a1747dad7ed319e15
+# SKIP-SINGLE 5b0fdefb4ca54b0d3dac3047ac1e4b380beb6ba7
+# SKIP-SINGLE c1e71d3899daca49e216dfa3a6e6e07169d02e1e
+# SKIP-SINGLE 735ae5cd3a76735c1b51913eaeff5df5f0b2b53e
+# SKIP-SINGLE e0150de010af2d9770380217f90bdc09592c968e
+# SKIP-SINGLE d22ddf5944b97ca7f853d034f9e2e812d9bf5552
+# SKIP-SINGLE 46dafe4103d1d24a9ec9b3a7a561829bcd5807aa
+# SKIP-SINGLE 622c24a2b75a564b9861fc3ca7a7878741e8568d
+# SKIP-SINGLE 6e45de6bacc508db11b15b2c8ba86aad8c0570df
+# SKIP-SINGLE 2d0a3feda61186319b7c834ee08c96926dd7ab92
+# SKIP-SINGLE 53f8f4bf2db097f4a2c68194c55a87c5a1176c8c
+# SKIP-SINGLE 2205546269bf5af01d766dc38720f71046b08dfa
+# SKIP-SINGLE e589018b48f802d69f62ab1e7e266df1c7d8cf68
+# SKIP-SINGLE fe304efa5155cd6a5c20a0731475a0ad6d087c4c
+# SKIP-SINGLE a1f93c1dfa53dbe007faa09ab0c6e913e86e3ffe
+# SKIP-SINGLE a02885a37031ec0e199dcb38ff9cb93e65e7b7cb
+# SKIP-SINGLE b20d05c6d76ddaf7e70da1430c9aac56ef1d6b31
+# SKIP-SINGLE 5317193fe55d130a456fe0cf06c56f027d617b09
+# SKIP-SINGLE 03f63888923404cd99023b853294f92536d3c87c
+# SKIP-SINGLE ea9acccd643272962831b63d932e283b8ecca7a7
+# SKIP-SINGLE 6df3eea9380f3684475e205a680804f3ff355402
+# SKIP-SINGLE 6fa9cc0593150a318f0e08e69ec10672d548a7c1
+# SKIP-SINGLE 4713dd425beac5cb459704e67dcb8f6faf714375
+# SKIP-SINGLE 2f6769f9cdb799e880fdcc09057353a0a2349bfc
+# SKIP-SINGLE 8bb5d7adaf45264900385530c7f76175ba490a77
+# SKIP-SINGLE 43c84577a3055d5ddf1f5d1b999e6ecca6139f60
+# SKIP-SINGLE 66dc8dd6d13d37ef23b52873293d95d87dca497f
+# SKIP-SINGLE 1c91bc9221d12618c9fb5507561dd35b7e392cb6
+# SKIP-SINGLE ace38bafa6ae0d40bf3fac9f998c8ecbe36d5f41
+# SKIP-SINGLE d354fc38286cba05b3ba2fefb9d9cd6d30deac3d
+# SKIP-SINGLE eb52828a439f674733ba70844b795c6673733572
+# SKIP-SINGLE 401e41df0c6aee6c071a26e0b89f16c70375fc2d
+# SKIP-SINGLE d812d20fbc3e1eff0f10443baed801adda9031cd
+# SKIP-SINGLE a3b8618d79657af0d7fea9cb6fd914ccf0f67849
+# SKIP-SINGLE 89898e43c7ceef28bb3c2116b4d8a3ec96d9c8da
+# SKIP-SINGLE 72d7961d678f9c5f4cb812e0bb9b6dffafb47c68
+# SKIP-SINGLE b1fe497a445a8be1b50c5b5952f3380ee9546710
+# SKIP-SINGLE 0ca61907cf4fe8afc723ed1e89e1a15ee69507ce
+# SKIP-SINGLE e8875bcbe067ea020dba95530ec4e9485942babd
+# SKIP-SINGLE a6b375ba4bfc9453abc428dcb73e65bfcf61b794
+# SKIP-SINGLE d490770dd09f1121b637eebdad82531de654189b
+# SKIP-SINGLE b389379c87481b6bc647ceb4d323f861281cad72
+# SKIP-SINGLE 4364a769b489c044c4e9eeac6cfbabcc844ab332
+# SKIP-SINGLE cd56490fef9cf585708b9d11de2f3f2ec1e2d5b2
+# SKIP-SINGLE 992e2019d3c535a61df064de25f664c01b8c309f
+# SKIP-SINGLE 41a5b76f79e2ef12a089e94406159e2d0e1fad1f
+# SKIP-SINGLE 3533623c4a007df80d57fe2dbc47d7e40d85041c
+# SKIP-SINGLE 21fa90b0488b2344b9b93ccc77263968d1b903b7
+# SKIP-SINGLE aca21d42d3c1327ddc202a03585416f2821e6839
+# SKIP-SINGLE 0f8343394675480f18c121520eed2203bbe1d6ec
+# SKIP-SINGLE d831312d668fbedeffe3711b13cd455309da84a1
+# SKIP-SINGLE 0c98dec5c9d0e0146a1519b9a7e099aae668c059
+# SKIP-SINGLE 491531b20d05a0f2cc747aa01e697a764c34a99d
+# SKIP-SINGLE 861824dbecc96339c68b1e15008a21c31e04721b
+# SKIP-SINGLE a13eaddce2ddbe3ba0b7f4c81715bc0fcdba99f6
+# SKIP-SINGLE 4ad6be65f68a5c875ecbaa9e66d8ced28f43670a
+# SKIP-SINGLE 2d42bf7f5e57001a836b7b4e6303fac9d3f00a1d
+# SKIP-SINGLE 2e3a33659fb85330ec76a67b2113472e7e0b546a
+# SKIP-SINGLE d0397f4a5764d3be93be3e3d35bccc1bf27522cf
+# SKIP-SINGLE d5ead735a07e619e514dd10b9e84e5d788b8a5f0
+# SKIP-SINGLE b8e0d203febffe7446cbc5e0ee7d9bf168854a88
+# SKIP-SINGLE 932698b7891668318ba9ca93375d8d27d52a07f5
+# SKIP-SINGLE 09eaf661eb6ea49c6324d8819a872c523133dc2b
+# SKIP-SINGLE 630df0587e1069b2cd2f2536d5fb61175adac3a2
+# SKIP-SINGLE edc63bf94f3cd3f52fab86fe7b92a3ec6a19de40
+# SKIP-SINGLE 47122295521c63febe9fc64680430812da3a3acf
+# SKIP-SINGLE 750721c3943e5837d7d9292d6462a144a49347c7
+# SKIP-SINGLE 1cad61030160ebc4b73e1f4212155a180d417be3
+# SKIP-SINGLE c68cce94c46140f2ad1411550427d3cc2658ec02
+# SKIP-SINGLE 8750a4546a1da4f03243df12c7e5b89f2c32d27e
+# SKIP-SINGLE 8d96feae07c618f591a952f8f10ae949735b4050
+# SKIP-SINGLE 92879a1b035baf297158812ccdbaf6ae1d157e16
+# SKIP-SINGLE bdd0c8600fcd33b6f8a535a66343591a29575042
+# SKIP-SINGLE 58430f29968a5661caff630d20dbbe7c864fe08d
+# SKIP-SINGLE f3b24e90dc9fad355102e1fdf2828ca33d447a07
+# SKIP-SINGLE 1bf7ca623b3d3e02617cf0b5f8d7f980384838d3
+# SKIP-SINGLE 0ef7f64407525a1e1bcc8aef4d1fd19a1cf60ec6
+# SKIP-SINGLE 23d3eeb798c7edc27898b0dbd4c2364a6ca6247d
+# SKIP-SINGLE 28718c4449972640c39a7be1b62ccc7f50c6e801
+# SKIP-SINGLE e6750596ef55352c260c200747bec3303e181fe8
+# SKIP-SINGLE fc05d4fec98387097c30a5c60e2f343cb797af26
+# SKIP-SINGLE 96644ed496cfc36ef886c401250203c57d77ab75
+# SKIP-SINGLE 86e512ed10d83e2d233cfb95bff68b6c05729686
+# SKIP-SINGLE a855473b7079b467ac01dbcee89cb57b3599fdac
+# SKIP-SINGLE e8adf68824178ea25a5fda0c53233a42883de861
+# SKIP-SINGLE 393228bd7a96b121f2ffba5fb7072a6cbf5ecefd
+# SKIP-SINGLE ad128fee434a954da2ead75647b6396ddbf91f6a
+# SKIP-SINGLE 056548283884d61b1b9637c3e56855ce3a17274d
+# SKIP-SINGLE aa779b0f15faa114fa5e3f59b17e628b1a837af8
+# SKIP-SINGLE cb8fcbc3cbd8f6cf95bb858b72188d752672cf6b
+# SKIP-SINGLE 0397f85c6f9b0a5325f774e2a56e7cd85176e228
+# SKIP-SINGLE 22fc91704be4737865b3715e5278dc78029791bd
+# SKIP-SINGLE 6d58dda40a0a43d14dffdd995f0cb3dcc329fa4b
+# SKIP-SINGLE 5772b920f40a8c9f0a5266caf8d0f4729f6d2c13
+# SKIP-SINGLE b104d764216026d77680a79993a051725e5ab94c
+# SKIP-SINGLE 89b5a8283375f83b8f0e174a3a8760158b99be6e
+# SKIP-SINGLE 1784ce6080e4895a48ce71747a136d9642baa73e
+# SKIP-SINGLE a3e9694078e24d19db860aa4ff8dec8bc34b59b7
+# SKIP-SINGLE 5e47c2e52b9b7616668c5586084e0128b231272a
+# SKIP-SINGLE 7a762fbbfc1c05be8de3d253251f5e7b32da2c73
+# SKIP-SINGLE eebb9783e1674732b7c63d50211b524ff0fea7bd
+# SKIP-SINGLE d533f5f2a783e4c6448f841e709f4528f498b7ea
+# SKIP-SINGLE 85f6aa33f55da97b13b5e81616f16a517d24f3d5
+# SKIP-SINGLE 59f3c86659c061e2673eb0da0bc78528d30f8f76
+# SKIP-SINGLE b91455633b03add918af3eb166ac797fd6c95722
+# SKIP-SINGLE 6c106712a8d2ffd0c932541cb50cc59a6df732f4
+# SKIP-SINGLE 65d428228bb57ce434a8eb5a4eeb2274171586b8
+# SKIP-SINGLE 4219240e1df6abbd842f4474fe7862f341cc355a
+# SKIP-SINGLE 6f6639d6ed6c6314b2643f6c22498fc2e23d34c7
+# SKIP-SINGLE 633db417fc3e905b28b017facdf596b36914b44d
+# SKIP-SINGLE 28e6584861a7f80b199edcd0d9eb3d97e344958f
+# SKIP-SINGLE 9b4b2e9fc8dfd37ad8f44940a16330c477f896ea
+# SKIP-SINGLE c3ac93bb9ff8b1fe1fc32f99c725e6cc209aa6ca
+# SKIP-SINGLE 885c512603f946dfb7a45c181e94b8677be2678d
+# SKIP-SINGLE 2cb9805702a4f15ca7ee4ef4edb6e6048b1d3320
+# SKIP-SINGLE 66d37175ecac41dfb2f854dbb148dcc7ca87b345
+# SKIP-SINGLE bb47c72de35312b742a1964b31ff315727baed00
+# SKIP-SINGLE 2c39565dc046d428127735552db6e7814631d4d4
+# SKIP-SINGLE 3c2e8eff8cc9a4a535f473b3e150cb056d8f891d
+# SKIP-SINGLE d79cf638f278e50c22feb53d6ba556f5ce9d7853
+# SKIP-SINGLE 06e452a57287c797cb96a6d4b45220358daab379
+# SKIP-SINGLE 85b4e88194cae541a0093a9166f4306e6fd3109e
+# SKIP-SINGLE 9613690f6e51e2f2aa2bcbbede3e209d08cfaaad
+# SKIP-SINGLE 6735df4443fe0aa60862a95c38746edf2b053862
+# SKIP-SINGLE f07c325d1f49e4b722f76aa730ac5d084bd0e77a
+# SKIP-SINGLE 151496a4b96430924bc148f85b9c8471d1e132b1
+# SKIP-SINGLE 9793a4616833a26157b4c60278ec17a9be233d8f
+# SKIP-SINGLE dad1aeb30760ef524e95e636c22346b051233a38
+# SKIP-SINGLE 8ba61ffd8cebb0ff9f7a219022f3c1f3eac2f6d0
+# SKIP-SINGLE e9ca57cfcbaf1a8dfc6bde5a2afd5f3c7b357cb1
+# SKIP-SINGLE 682118f5a06eebdc38767047e65d42aa9356cfe8
+# SKIP-SINGLE 2825d849451be45ea738e2d2b2567c834fe5a0fb
+# SKIP-SINGLE 0263216ec39d0914f17b662a3e45b4163ab6cc78
+# SKIP-SINGLE 3ba07bfc3ec43aa10d8e2d06a8f36f7022287573
+# SKIP-SINGLE e442879b5a963a6eb37403fe09f476e7ee8e0f55
+# SKIP-SINGLE 4575ae5a9c5589ac903362486951f0d36c8ff8ee
+# SKIP-SINGLE 67afa75e2b97c08976f0e5a8502dac5851d45f93
+# SKIP-SINGLE 64eb2fc74013a221927f9bef920e367758e1bc15
+# SKIP-SINGLE 37dd95866a004a9db1d77f075715243246033773
+# SKIP-SINGLE 8af26410a91c3c9679bb0281ddd71f0dd77ec97c
+# SKIP-SINGLE 76715f8921dca740880cd22c644a6328cd810846
+# SKIP-SINGLE 678881e428073b39a906c1ffd01e1b76e271cb5d
+# SKIP-SINGLE 155ec5096928ddb121fb725fca65436d6353cb67
+# SKIP-SINGLE cc3d7580fc1cab3119e5e05c427575a2668cbb4f
+# SKIP-SINGLE e2a78b0d6d844f29acaaddd775c7b1cd6dec7af8
+# SKIP-SINGLE 45eb3b3513619d97d046a8efbe0d16fafc75a734
+# SKIP-SINGLE 27980e36040d0693fe997de6b6b73c09c3ce1cb5
+# SKIP-SINGLE cca0e79ea81712786f92a6668c61001e60d24f32
+# SKIP-SINGLE 3dea8f8f53f81a1d15a55c9e3c87a7eade7ca273
+# SKIP-SINGLE d0fac17abdf6883bbf82b1752988db38d05282e6
+# SKIP-SINGLE 8fb995b9e360270b6a4d7b7732a127a6234eba23
+# SKIP-SINGLE a770fb44288c75fa2b0471ceaf00bf741376e40f
+# SKIP-SINGLE c7e393bc4130c871a92fef7e9ac0c7c1832aa614
+# SKIP-SINGLE 0d868917efb46400cf7dd57a1cdbba7404f322a7
+# SKIP-SINGLE 025adce2cf43f4ce9f3c543c1b8973541e1414d2
+# SKIP-SINGLE 872faabbd8cb0f5518777b2d4fe7de187f684a92
+# SKIP-SINGLE d14808cd271abf6a723bf495a6a01c14d18b5893
+# SKIP-SINGLE 23eab9a6a67604b5ebcdc99efc42fbfd3345c0b0
+# SKIP-SINGLE 6d4bf2cedab365411f0aedb373b63291086658e9
+# SKIP-SINGLE 5875fbaa2dfd919a2ba22db1d20ffa6c4c6e13bd
+# SKIP-SINGLE babe0d4508273c5fe0a3228b3d2b4d3dcb72cd58
+# SKIP-SINGLE eb83344fc7c08ec08b51e7700f1ac2632afa462c
+# SKIP-SINGLE 5c3dba24ef5f40825a01e30d2790c66df202b8b1
+# SKIP-SINGLE 47b7a5bd492e92dda928843e28a707b9682cb32f
+# SKIP-SINGLE accb7b7ecc19f85c2750ded1046a464bc73c6a52
+# SKIP-SINGLE 10a45096988f6f19e36e2e7865b6eb35c0929b6d
+# SKIP-SINGLE fe859a07870d5204adfd5c9a7f83bf69658d37c8
+# SKIP-SINGLE 61f3a4b4fcc43241caaac63195205774ab1a5732
+# SKIP-SINGLE 410e65e4ce6f871fd1b8a2ef4b227cbeeb17c1dd
+# SKIP-SINGLE 4fbdccedd58ffe4cd5f7ed7b744123cc25084bc4
+# SKIP-SINGLE a9140091dd0df7e89ddbaabec17608a20f06f7b0
+# SKIP-SINGLE 0c9bce3fc490d6f5e935883e9690871cce4f9150
+# SKIP-SINGLE 6c560a3b16f9015a19044395f0ef41b718d73496
+# SKIP-SINGLE cd06d173a602bf0aa8a227ff1626dc70013fe480
+# SKIP-SINGLE d1ea675d2cfccfb043c8e853c410427ca62dd921
+# SKIP-SINGLE 5e841bc9e5ff878b3dce36a712386ed6f53b6e60
+# SKIP-SINGLE 284f635da833d2dbf0102af3442197b46adf78c5
+# SKIP-SINGLE 41e20ee4bc01576d23fb8fd4f875385ce57eb36a
+# SKIP-SINGLE a411517faf624657aa58979f5463115115093309
+# SKIP-SINGLE da9541dd1086b7bab52940c82915efe114bb7419
+# SKIP-SINGLE fe6c507f5ce0fd744b5bd1d0db6ea175e1188a7f
+# SKIP-SINGLE e08e0880f9892fba747abdb95b1f3382ebd17e32
+# SKIP-SINGLE b6d8d34aede02a6af7a614f32b86292ee4ba1757
+# SKIP-SINGLE c4bacb1215bfdf058b374312256c27eaea1304a4
+# SKIP-SINGLE 534c33cf375182c97291d2dd242f936df5953321
+# SKIP-SINGLE d8a6d82c4d34286b377fd7bddd4be0116e8dd4b9
+# SKIP-SINGLE b3df3729596332a39404c364798a61bfef2adcc2
+# SKIP-SINGLE 134edc10367a8434167656e631865c85b5f10c42
+# SKIP-SINGLE d3a0ddedba53b9e2c99274c8ec125d53f991da5d
+# SKIP-SINGLE 4498e5a13a3b63a3024ceef102ae3b5c50f58be1
+# SKIP-SINGLE 9813905f834aa43eb194023f579c7e7951d96d0f
+# SKIP-SINGLE ec2e5a54b3b6324f1039f355fa646034918f6dba
+# SKIP-SINGLE 4a04046b7200b9c7201c252c23a8c313d4687b5f
+# SKIP-SINGLE bfcff8f88a472bd1a64922da094cd007d3b7a70a
+# SKIP-SINGLE b552fc05c231ca6800330a318d3a74ddd0f5a13c
+# SKIP-SINGLE 01963fbbe10d290ba037cd523d21ebbcd2536b40
+# SKIP-SINGLE c31823a51bba1e4f0c87af1a08ce856cc600f5c8
+# SKIP-SINGLE 66c388c21aa83d3ddb5a1827f81dd432514242ac
+# SKIP-SINGLE 77b1148b5164c71c4ba673173eed2a37918d4f78
+# SKIP-SINGLE 63091313490beee4c5ed9767195c2a3df98f0332
+# SKIP-SINGLE f0c0b2cea3ffea7e3c53ff24c58e7a08ac40babb
+# SKIP-SINGLE 1ac5c6c3cfc4c50347af893aa72926cdf2edb8c1
+# SKIP-SINGLE 926a394997eaae55b797a90cb2cd037bbe3c3db4
+# SKIP-SINGLE 31c60dfbd8541c9f1b1bc8127dde85e5d5af51b5
+# SKIP-SINGLE be3ab9f301bf741b0410c1f9fb1c5ce6dda1c39a
+# SKIP-SINGLE 4bfde2a79046519815e2bb8a8eb72e22eca0641f
+# SKIP-SINGLE 7bba702e1ad1ed343618e44cf5bbc2a1f079be0c
+# SKIP-SINGLE c64cb02cca320811032bb300ea6d12cf59acf65d
+# SKIP-SINGLE f208d5ae77cf381c6f1db9b1aef76d5e9805a106
+# SKIP-SINGLE c113d6f3c1e12fed3aa627e74a2a43be0350c31c
+# SKIP-SINGLE fa3af359df8754423a197682d31245ad88c02033
+# SKIP-SINGLE 6fe661342a24edcaea255c3ba9a37613031554da
+# SKIP-SINGLE b93e5463885f9c99e74b52d2f569ad06ec2d0ff8
+# SKIP-SINGLE 8a11e430ec261c08cc928a7a5b05ee1027f50368
+# SKIP-SINGLE 699fce296b13d7db386b1cb5cecf2710e5196691
+# SKIP-SINGLE 698ff554ac2699ec48fefc85a1307cbc4a183b0d
+# SKIP-SINGLE ab9e58b8e39f19cb35513f77310141a344a4de15
+# SKIP-SINGLE 648fdbbcec159e6bfdb7cd06d32c59e8a17a055e
+# SKIP-SINGLE 52e17e53b7dbafb4877d98d99188c335db6a3b5b
+# SKIP-SINGLE 394282142563fe1341eba1845672e2412bf8c7d9
+# SKIP-SINGLE f0151e17d296bfdeb1ca3f002c9b430c8302a6e7
+# SKIP-SINGLE 90c25b245259e99013dfb9292bea054a0ab4ffb6
+# SKIP-SINGLE b26c2767edd98787297879c4570a2702eef031be
+# SKIP-SINGLE 8c17995f7f948955c765562f32526d0a3b87398e
+# SKIP-SINGLE 093f5d0045cc5facd3728e385a71ef84f218bdfe
+# SKIP-SINGLE 18a7e5414c534db38eedb06b16ef68f2c17b98fd
+# SKIP-SINGLE 34f01eb88f87fb8bd5b816d76a2527b5277862a7
+# SKIP-SINGLE a1deb6cac305a73e799c63e2fbfe7221790e1e61
+# SKIP-SINGLE 58a3c54c7ea86ea6b715483e7b017008a78fbf14
+# SKIP-SINGLE 2da3305c3c335adcbc9e541b7c50e4e814df87d1
+# SKIP-SINGLE 2c5a3f413b7477544ba8f5b18ed233ea6ab6f2aa
+# SKIP-SINGLE 45a0ce0905e495ae93b39e75cedb34ac95c6ea71
+# SKIP-SINGLE b67a6cb8dd7f8e6757a54f1547f631f26fe26e74
+# SKIP-SINGLE c2e27949d5917256bb419dcdae73566079844b4d
+# SKIP-SINGLE 0701634aa788b316f331ccbb6c44dfd8304a271d
+# SKIP-SINGLE 8b379bbeca9b3765e2b1e948d9d9c90ab92ff4b6
+# SKIP-SINGLE f6ab713bbc3dc8fccf5fe490615aa2b679071010
+# SKIP-SINGLE a7f71e8dfae9b1571a2ad34e44f000ff4a391644
+# SKIP-SINGLE f21ec24524c705e18674a2e9e4db37b11fa3ebab
+# SKIP-SINGLE d715ae8788e16b22f7f68cb82b51a40ad95c78c2
+# SKIP-SINGLE 7bbb56bc430465a6807a8129a322c704c89e3eba
+# SKIP-SINGLE 7f6b0c1ee93663892c6220b982f7bc3275dcaa85
+# SKIP-SINGLE 18c83aedd91023a677153abeafe561eddb430146
+# SKIP-SINGLE 68b8980eee5683128035800d6a04c27c764fcc5f
+# SKIP-SINGLE 26577415400b88c66add5ac8848e6e370739bc21
+# SKIP-SINGLE 5b525f4f56f458d88b66be73cae2d1fc5b382db4
+# SKIP-SINGLE 9fac0e70e3f5b7d0b12b77cac50078e01f68ee70
+# SKIP-SINGLE c717a5bf53a9f08f2123968b62800a8450589719
+# SKIP-SINGLE 73ab8f4b8cb6f08e7b694bdadcd42751b3916dae
+# SKIP-SINGLE e2e63dc3f062ec3dee56f003efb3e093b56692d4
+# SKIP-SINGLE d16b73fb4a9d87ec220444d220c6b45879806fc0
+# SKIP-SINGLE 982af7f516efb190d19946bff7bb37567328b4b9
+# SKIP-SINGLE 9645b5752a3e40754d22d9e805778e95fdc86337
+# SKIP-SINGLE 1743da11d0fdbb24f6c6e8d084e98d0b6e4d3f62
+# SKIP-SINGLE 7556772ac2e375d3812665dd8e31548e0dd1f7ee
+# SKIP-SINGLE e4636297c630a81e1e201210b4e6da7e99b823a7
+# SKIP-SINGLE 5fb3782e95d512ddb9a23e7d713de5980c7c4c2a
+# SKIP-SINGLE 7e911d007d25df9a483eaad54956a4273405574e
+# SKIP-SINGLE daf32f1f87b3d71cddd9ab2e9e4c3f5b523ae409
+# SKIP-SINGLE 0dc5a85a1c3772a6e78f077719d82f437f626b1e
+# SKIP-SINGLE 0c450e09b8eea8839d10c329debb3be37ccd9a34
+# SKIP-SINGLE a7aae1473c1aed7758b550a23cda61ee17668e23
+# SKIP-SINGLE 48daf77a9d963c05ee198b3ab108c7f0b3686da6
+# SKIP-SINGLE 8f522efe9a963cd3523ea6863f9bd44881cdf6b7
+# SKIP-SINGLE b82f34f996c25deda1b89fc7006833335bb1a6fa
+# SKIP-SINGLE d38110efa75372d4c3be702f157d3a8c6b7f37b5
+# SKIP-SINGLE 30026cfe666e9647aeef73e26df5ffca2fa2c662
+# SKIP-SINGLE dff4f9c759f5cf19047719716ea5ee8ffdc3006e
+# SKIP-SINGLE 6eb122c8db9d6a445b2002f025e01215ab560843
+# SKIP-SINGLE 79a01866a01754b9f566af76ef96e80cd90d094b
+# SKIP-SINGLE 34f1035e878a06ad181ff7fc533cd1fa0a565847
+# SKIP-SINGLE b478444099655f36f7b243e21e8f98051299ca8f
+# SKIP-SINGLE feae2de4242d7288f94c4bb41a9b7deed8679da0
+# SKIP-SINGLE 7fc0292f5c49d11fc39853f8bc25586d54221e6a
+# SKIP-SINGLE 278b7c1b52be11e8c49b8252953e8e84d45765c3
+# SKIP-SINGLE 2385dddb3338fd0f34aac0633dde78dd650f7d94
+# SKIP-SINGLE 5ea28ea4d12140ebcfaa293b6f29521a80b3de25
+# SKIP-SINGLE 981c309325d55e8c5947274e4df6346ea51a056a
+# SKIP-SINGLE 11c3ec3df6ad79ee5175094f0cf14248d9724aa2
+# SKIP-SINGLE 21f5bd6154f254a53942a9823c9c708ffa4b22a4
+# SKIP-SINGLE 9a56b9bf71af83292d6831e08a8179b7cf5ee7d8
+# SKIP-SINGLE 120f691e99d7d98a959ec9a6075cb4e473831bee
+# SKIP-SINGLE c4fcaf5e729fe5ff9249a56b1d0f5927ef3932a5
+# SKIP-SINGLE 9aa13cd4beccfe41e8f4930cb029bd60e7788e93
+# SKIP-SINGLE 8aeba640460adbad283d4a18f91cce8e0364c40d
+# SKIP-SINGLE f521225736b2a6ab38bb94298fb4d3ace3d9a9ec
+# SKIP-SINGLE eac531b760aa805c293339eba78e58b5b89fa211
+# SKIP-SINGLE a590a8058d52c1cbe0f80b7ed0d8b0abed7bf7ef
+# SKIP-SINGLE f0f2a53b27187903c86189bd03f072ac6ddaba9c
+# SKIP-SINGLE d8c2da46e7e51a11882dabd593af29f4146aa0b3
+# SKIP-SINGLE 7844846e3fedac8f32f0d81d3c5e906715d39fd2
+# SKIP-SINGLE 3886a5c140b03f07c8faea7cacad0a791bc54fa5
+# SKIP-SINGLE a397fa06d18d6ae37a3a1288f269e1ae9eb3b569
+# SKIP-SINGLE ad33e3e549e24c48259c6bdfb069e41be0a31f98
+# SKIP-SINGLE afe4969a3b3b38014387a828b66f5dbc3a462a57
+# SKIP-SINGLE 5c74b806a6fb0a4cb237300ab0a5418a109ced5e
+# SKIP-SINGLE d9c6b4378ac851f5e730daa0ae36c9ee2d0292fe
+# SKIP-SINGLE 7362554eafd7e255b3d96a4f711e11708dee950f
+# SKIP-SINGLE b293aa91bcc7f553ffbc6c67027f3c86d06ffbd7
+# SKIP-SINGLE 232a36f17e2796c52cb0b1afd5872c454b92ce62
+# SKIP-SINGLE c4687d920db081f29e93cca8156793d545a827e2
+# SKIP-SINGLE 3fc859d9550ff6d35dbb453eb75c3296f23a94cb
+# SKIP-SINGLE 11192b29adf4ee500f5056d1b02d35908f858b53
+# SKIP-SINGLE 3ba1b52e277261286738b637e45a675b7d587f58
+# SKIP-SINGLE 498468a2367524c7bd763826df5aad2b76345912
+# SKIP-SINGLE c4b886831acb82643a38f48c91456b15363bed75
+# SKIP-SINGLE b18f92a942dca6f95c9a74835644e482f3b1b907
+# SKIP-SINGLE 6c77a9e046de682aaace72aaf3af78e6ba9e5489
+# SKIP-SINGLE 976b7fcc8ced57fa12a0504899974b5b2057c943
+# SKIP-SINGLE f0290502f3354f9ed7e8ec84c24ac13a7bad2fc0
+# SKIP-SINGLE 4946ed48fee637eba75b674b9ad568b9df26bac9
+# SKIP-SINGLE 2875340c9fcc3bd6a799a3c4a4d875fc753ea7b1
+# SKIP-SINGLE 037b9897a464bf25ef9587ee860cc7f20376a97c
+# SKIP-SINGLE e666bf781f1d3d74068e8d2b505e35dd75b5b423
+# SKIP-SINGLE 00f7fd7d427b85e69a53403a1d10ac122a92a95d
+# SKIP-SINGLE 0bb5a47402313634b0e8654355e519388851e07f
+# SKIP-SINGLE c00236a880567c72dcdba5fc90d6de1125616c76
+# SKIP-SINGLE 1c08dc82121d50e80bd2dcb0d1f39654cc6762dd
+# SKIP-SINGLE f4cb9cc9034c09a8798df3d98f6fa9313a777a96
+# SKIP-SINGLE a5a1b53807a9449298f62c761223e6a1c5654bf7
+# SKIP-SINGLE 92e285fdf0821d8a01db598c4e2ac7e2e0fbb3cf
+# SKIP-SINGLE fdb31d6a2709bff751c2ad240c41b30db1848b44
+# SKIP-SINGLE 9514dbf7ed70b6c08a11fd58c7889ff49e30ac13
+# SKIP-SINGLE 4beb850efb99b881fb8b648ad7bb43c6539a2431
+# SKIP-SINGLE 5f63ac26ccc18bcf9e364b74af4424f9e3677cf8
+# SKIP-SINGLE 726d8c5bae847a3240b758a1d25135865e9304f0
+# SKIP-SINGLE 44db9b912f1d8165383b5b30732fa9caa3d3a185
+# SKIP-SINGLE cedc19297e47473ae599faa7cbcb2f3f6c9d5846
+# SKIP-SINGLE e678021f0c3db705c91831cff466561fd73c3040
+# SKIP-SINGLE ef59b67e4657fa80d1528b9d476c67f01abecc35
+# SKIP-SINGLE 2ccce1bc3954ce5f2faa0dcf7fa68ec5cae710ca
+# SKIP-SINGLE 568883c9be8bfbb15ea48ae0de2c117894e8db4e
+# SKIP-SINGLE b6d6e7feb75b792c74fe3e1d036b9edf540d771e
+# SKIP-SINGLE 15ac087712250b5ffeb4d162761b2495a5e572a3
+# SKIP-SINGLE 36ab5c6d49f8fbfb858844743223414e6f2f2564
+# SKIP-SINGLE 080dacda7896e0eb5ee54b1550097e45a4f423de
+# SKIP-SINGLE df62baa7d4e8ce0760f32122899ae3c803180907
+# SKIP-SINGLE 8b1d9b8e5ed8035bd2f42517bb6bc3c8a6d6f0ae
+# SKIP-SINGLE ca8d5ed6ecd5ca3eafa2923ee04e56dc474bd964
+# SKIP-SINGLE df0a7547cbaf19152a74b5dda760e5d1f6c92ecc
+# SKIP-SINGLE 12639610f78f9006b70933bfc6898c1312f95290
+# SKIP-SINGLE fd3c00ff92826b466a3292a05072eb5b4f23a701
+# SKIP-SINGLE 0a74771ee9c406cf98d391378340c79645c88d52
+# SKIP-SINGLE 5dae0a9a55101aeb668f90e1fece1ffbab5e7ee2
+# SKIP-SINGLE b275ddd63a24b15dd8f90ea0c4f27341a8dfa977
+# SKIP-SINGLE 5ecb71c1e65038b79933c06e1c0303b3e58ef4b5
+# SKIP-SINGLE 42362d991443689162c3e0bf1eb683a85481a391
+# SKIP-SINGLE a88e5f0f199ad018d57d07016dce20e5462dbbca
+# SKIP-SINGLE 4c8b46514d87856e5e2044bce804ad0156097d04
+# SKIP-SINGLE c5bb62f99db4b1c70e68e7c7a30ede8227f199a3
+# SKIP-SINGLE 79436f0c744a65ed2757f0119f5bd13e2fbef995
+# SKIP-SINGLE 54677f96f3ad8e489e04c8bc7875e1ec4d6b9a79
+# SKIP-SINGLE 9a8f33f285295daff8ed02d35ece5e8fe11ac887
+# SKIP-SINGLE f0671c60637e218a54f9f3ac8e5950d17884f50b
+# SKIP-SINGLE 4496a3f5ba899c89e45cd478a22b25ddf77869ec
+# SKIP-SINGLE b3cbdfc86474932e4ef8d1237ed100a6f4f4c854
+# SKIP-SINGLE a647a97320e72db275a05961ae09e487ee3063e2
+# SKIP-SINGLE ee4feb005ffe1d35ffc4d390d18b88ecfdebe2c2
+# SKIP-SINGLE 88671e638b308886a9d6b5a590ee1aee56746d7b
+# SKIP-SINGLE a10405386f83333184c94a0a194b404e4273e2d0
+# SKIP-SINGLE d0fcb15fa9858eb600b0a8f35ebbdf5aadc2cd7c
+# SKIP-SINGLE d0173ecd0ce8c2ac458cd84c25216f59f3fc9889
+# SKIP-SINGLE ac08a7f26c53d65df7d9c2a5d76300a6a1a8106b
+# SKIP-SINGLE 694ece772220346aef12520bc66ca401d08809bb
+# SKIP-SINGLE 740462da6153b111a8196b003791a55c7f7fa878
+# SKIP-SINGLE 8234a62e6fb9f706f410a96e2ce9877c19e44a20
+# SKIP-SINGLE 26ce5664ae431ec141e852a4183844d83c3f8856
+# SKIP-SINGLE 54e0b112d3a91c86230bc4329e00ae8f2faa05e8
+# SKIP-SINGLE 6c9acd13d0d2aa181d21bf78d6530b3399520533
+# SKIP-SINGLE b3db331e8c36ef9706ad16c12055079bcd93c022
+# SKIP-SINGLE 3345399e87fe6100ef82c399337760ab01182240
+# SKIP-SINGLE a248dfe2c3341ed73de38c2feea64ec12f053aaa
+# SKIP-SINGLE 48f5530e7922e4c46db1c4ab82b1c3532db724c9
+# SKIP-SINGLE d7071c64575bd3116e154f93915ff099c6e0f3a0
+# SKIP-SINGLE e2855d93ee41bf23a72fdcb49bd5347512989f6f
+# SKIP-SINGLE f4de790beec514808eafd1cb22fa5eacdecd4552
+# SKIP-SINGLE e05253cb9bc4a35c7dedc3cbb2830e37d385a339
+# SKIP-SINGLE 60a81f44e49c77ef9143a665f94f89109002133d
+# SKIP-SINGLE 4a639f3ae9594f0d16835d5151b6dda7e83e1a1f
+# SKIP-SINGLE ce254ffa44e33352605e49aaa7d5fc4f545c1add
+# SKIP-SINGLE 9a87c4404fd0097e2efa14f63b97a9df8df6c07d
+# SKIP-SINGLE 7f5f60d54340aa0b36f22057fd3f2665fbcd5d67
+# SKIP-SINGLE a214a29e48397cf259327e1ffb44479648301e47
+# SKIP-SINGLE 5411beae0225937446eb8509c56277b120a2eb92
+# SKIP-SINGLE ba51c31b47a62e6815d8cb2cb34ecd642a677105
+# SKIP-SINGLE 10adad440b2eb3b09d9d4e876023dd13d8b3dab9
+# SKIP-SINGLE 6a3624eecbc0a116b293d05e044b8b40a86022e9
+# SKIP-SINGLE 44023f3db21c0365ceeb179657447d7cdb1feb8f
+# SKIP-SINGLE ba2bbea816ac5a20fa3090b634a17ed0d4a1c2ca
+# SKIP-SINGLE 9650e5a1a90768953ce9f3eef014616180bfed8e
+# SKIP-SINGLE 831f5e606125c48f783daee9643d101b7fad665f
+# SKIP-SINGLE f0b1519fbd0fea728238758d6bec074c32be1142
+# SKIP-SINGLE ea421cfefef6826dd99a9cc884b46178b2c0e1a8
+# SKIP-SINGLE d4a5aba954c838b32317560dd84e6681578b0e32
+# SKIP-SINGLE d2d229043674c59dead9a58a9ae20f8e62427fc1
+# SKIP-SINGLE 4fc8524df0e2ce0579d6bc298dc07d1e442587c6
+# SKIP-SINGLE 0c94e69fa6ed5a4f5d551f37f7f2632d2f2b2952
+# SKIP-SINGLE 960aa0c7985f6c61a26f99653c6e9ae9369e944e
+# SKIP-SINGLE c039822082983d6618b6e06c73a31cf6b63467cc
+# SKIP-SINGLE a421c277237ab6b5923473f6dbb9c196b16bc833
+# SKIP-SINGLE d901221e2bb2168cd1f05e3b2355e078c45f1f42
+# SKIP-SINGLE 954eb9b4a0b9d616db9646f081d11b2c6dd19581
+# SKIP-SINGLE 8ef0a1814eca5dc7f32e2784b3fa61498d220a70
+# SKIP-SINGLE 99258421bbb123e6f277610dcf94e022dde3a5c0
+# SKIP-SINGLE d0e6a276643b2590eebf81e305b006c768653b10
+# SKIP-SINGLE 0bf55d3a8131da02999fe694caf34096d7408952
+# SKIP-SINGLE 71b363e2b3c709e64f8ef8ab7446cc3a19573eeb
+# SKIP-SINGLE 23874aee8825a6f670b6c2da9eca2d9cf643b3af
+# SKIP-SINGLE 4fe02acb6b0556c4b17c7a8e01f41698f5109512
+# SKIP-SINGLE 95eb82644d348c59af9f4ec10ad315bf5e498353
+# SKIP-SINGLE eae7f30a9a338b5713d7808c9f791e1a7f79b3cf
+# SKIP-SINGLE 630fcab4fcfa9afab4688d803892d76cf6f46961
+# SKIP-SINGLE 37989f9431bc32f7ebac76cfc02f5e1d03486bcf
+# SKIP-SINGLE e97826ab845597fe09be43b2df888e96c7502bee
+# SKIP-SINGLE 0c60b3bae71a010e6abdcfd4d8d38b92c7874609
+# SKIP-SINGLE ab5611c25b92ca06238de3d0ae53226176c2ae0d
+# SKIP-SINGLE 407f5aac70f1481dfb365db7ba2e435f439498d0
+# SKIP-SINGLE 3681402bf163a3b5a7b7642f553e87693028649e
+# SKIP-SINGLE 16fe8a4678d20eac893bd05941071396b67bc84d
+# SKIP-SINGLE a99a3fbc40076aa3965feb759e816a8a25621c6a
+# SKIP-SINGLE 42b08f8a9ada7791c992894e88f648909e1ecc95
+# SKIP-SINGLE 41bfb91f5db878d139d5c0c631c569475018a7c2
+# SKIP-SINGLE 77c9236957a195a4ad0f50e8f19653a5c6918c8e
+# SKIP-SINGLE 41e5c9400cd9eeeecff2262907c09c3b10a5cde7
+# SKIP-SINGLE 3850be836ec7223c895901dd21f2a4e429314b94
+# SKIP-SINGLE 065dd0b5c6a7e11e79fe5ec02b153bb53bde0e77
+# SKIP-SINGLE 207b15147366be47d58c40a6f03888243602b11e
+# SKIP-SINGLE 6a546e63d0134861b208ab1bac259f71fcb30b83
+# SKIP-SINGLE f6b58e8016c7ce7b332a3b2a8a56bd2f9987d95a
+# SKIP-SINGLE ab3f36fac2da2979713109561f086d95bb26d580
+# SKIP-SINGLE 437c75cfcda4a0e9fd387d22aa8c0177c835c66b
+# SKIP-SINGLE 13f3b52fa422bed85fd7d50b43a167bb011e9070
+# SKIP-SINGLE f7c52087b2a836ab8913b7718ad37230a2895ef3
+# SKIP-SINGLE 3d0a3a51b8f1635ec872fc3f0a54c2d58ba48b4e
+# SKIP-SINGLE 76fcc2a69a96a7ab68b82ebc96c234dd58ef7e61
+# SKIP-SINGLE a82f1929fef5072a4b04e326b467cca8a8a21c0e
+# SKIP-SINGLE 4bb671f1c6adb6cbdcf90abe73967c24e5296372
+# SKIP-SINGLE 11b34169f802908348e99d0a52b9c50a64028964
+# SKIP-SINGLE b91cbf80aeb4487ad3e1fa0e64e3cb5549ec663c
+# SKIP-SINGLE 787444c7690d97d8702db059cb51ac506cb8a5e4
+# SKIP-SINGLE a1fd3d6eacaf425eadd121dcacee95a26f96505f
+# SKIP-SINGLE 0f526028b1830e72df1c39220c5efdc7e545885b
+# SKIP-SINGLE 9b44051ea530247e73dbc0bdc2998d2dbf9688c1
+# SKIP-SINGLE 6317f9e7b847f83e6a6d0f9ce9233a0566d84f0c
+# SKIP-SINGLE 0f59ce58fc558643f97175a32f2a82cc209f2bb4
+# SKIP-SINGLE 06fc663f519eefb431912ebdae8711ed016e0703
+# SKIP-SINGLE f59a96f5655c0ac2846a06cbad11ef3039476fb0
+# SKIP-SINGLE d8f3f8736c7d36b220a478f98deae9f82f25a4f7
+# SKIP-SINGLE 8b8b8539d7415f1decde46d088c89c2fc69b1010
+# SKIP-SINGLE 4320307843b44fa049ba7e8217f0349932ff56e5
+# SKIP-SINGLE 0cf4a9fdfc63577c97ff0d0e46f49cd685c5291f
+# SKIP-SINGLE fd42b6c696564cdb44999f6d4d3f91a63799191a
+# SKIP-SINGLE 009089f0d69a26e9779628e5b9c1d139eddf20d2
+# SKIP-SINGLE 7c9a3556e3d66c1ebe75f675341117bb28041da8
+# SKIP-SINGLE 37a04737218281fecf7b4e8b9a58839e25f02815
+# SKIP-SINGLE 3bc77cca86fbed8c12fb6c10c51e1237d65c9143
+# SKIP-SINGLE 13816f14b2f459a97d309f202f218282888e9bc9
+# SKIP-SINGLE e1128305102bab268272770b4a77361dcd9efb5d
+# SKIP-SINGLE 942702f506de1c7c3eff4e13470248be1a26e778
+# SKIP-SINGLE 00c493f01703f619a62e08bea17a49ce12f2367b
+# SKIP-SINGLE c9f367950652a3728cc94c7a7faf0aa55c2aae9f
+# SKIP-SINGLE c33c2ef5119a3e1ba9c97ca03e001916f83d09f9
+# SKIP-SINGLE d5ffb4949044ae58fb418b1b214cc7c6eb16a29c
+# SKIP-SINGLE f9ea53442e6f492f1543a5e21479e72be8eff4c3
+# SKIP-SINGLE aee75b87719abfaed605e33ed0c9e3a9a81417d8
+# SKIP-SINGLE 76dd30a98590f2266290a70f2e3d4d272c092310
+# SKIP-SINGLE e176d04d45adbb51f6bfa0b5a0352927056f3519
+# SKIP-SINGLE 26aeca29801a8e8950141d9d54aeb9a22ee6c5ad
+# SKIP-SINGLE 2ee2c67736cd76a52a2eb1002d0ec15e883082e0
+# SKIP-SINGLE 105e7180230dc22db91af2c8cbfa6fc3d2fee7e6
+# SKIP-SINGLE 3ed524c908d4aefd174ae6a8adc2bdaabb4bc4da
+# SKIP-SINGLE c47892201b2b9f1ef903ff2a12bb9ed9e64d19de
+# SKIP-SINGLE 6d230fc2c04532b4abf2474411b2995c237d5cc8
+# SKIP-SINGLE ce4375f57f9b89d68fb639590f3e4a0a28e3a627
+# SKIP-SINGLE 6a34ff5d9c13688a7264b2654f04982c5a3cfc6b
+# SKIP-SINGLE ec00ef8d48afaef65527c02ea013ba4489ed279d
+# SKIP-SINGLE eca71dd5c7a8b7013eb20e1457eddf62776e6c29
+# SKIP-SINGLE 6761e69a2bce255bbd78e08b5c592f4de19253f5
+# SKIP-SINGLE 93aeb781e1da3cab6ae90c90cd3668862155ab85
+# SKIP-SINGLE f97c03ebca440229ff953baee9e458a3ddcdaa70
+# SKIP-SINGLE 33d8b736b0330f51050ca1fc389527d708b1eb23
+# SKIP-SINGLE d392276b63cd0d9eb16f0e624bd8da9737cc66cb
+# SKIP-SINGLE 9f15b4c3ca98e6af3dfe61f70d0043ae896167ac
+# SKIP-SINGLE 9ee6b685a338cd06d4b053e39f3e2da505d20612
+# SKIP-SINGLE 809bd5aa34727151bdf40230e2fbc3151760466b
+# SKIP-SINGLE a2ed435e3aa18c0e6d4997cbb9a81426c952a622
+# SKIP-SINGLE 5c188552341204daf53f0ae2aa4e0c73ec4feb1e
+# SKIP-SINGLE bf91dd23fb7dd37650dfdb218358c8bac659c5a6
+# SKIP-SINGLE 03d2dda12f9e5d877edd15e31d6076361ccbd75a
+# SKIP-SINGLE fb41165adf7c6a354876a26fd7a6cc686f3fe142
+# SKIP-SINGLE fb309c14f0f5075cd649c083abf2a0713b949030
+# SKIP-SINGLE 5eb8d3dba14d94386f42dbb8fcdd28a98d10ac64
+# SKIP-SINGLE d6ae5369b0682ada2e7d801a3cc54f671ed03bf3
+# SKIP-SINGLE 0720354082858f59db9f70ada33efc424126d668
+# SKIP-SINGLE 0f68de830acb5eef41307efc119f3f16fdb35ab3
+# SKIP-SINGLE a18e54f54bdcd5d9b2c11b0307b0a157f52e5926
+# SKIP-SINGLE e0e0b92c1d3fe39085731db04bacd9def31f3940
+# SKIP-SINGLE 515644edc0ed2e73198f4c4eeb822715b2589dc9
+# SKIP-SINGLE 0b9bec6863e138efee77c2948c355b53951e6d18
+# SKIP-SINGLE 283b0db31c87a8bed736a8459ab16ae066ceb024
+# SKIP-SINGLE 10c6303d242ce8f01f38e78da71d01c7a379e651
+# SKIP-SINGLE 96bca89e5b03b6d5ab7ac8bda8216adfc1911205
+# SKIP-SINGLE 475b4768c856c0a25ee236faf0c30b39d5cd804a
+# SKIP-SINGLE 67ac8603eaa5618622d746f4097a0ba6ca2f76b3
+# SKIP-SINGLE 45158ed98b345145eb3e9f8c27b0591433465ff1
+# SKIP-SINGLE cf72d9de0f46960d260e3f5eba843ff01f30eff0
+# SKIP-SINGLE face460c41f59b5097748159ce64a5a09b277dc7
+# SKIP-SINGLE 59f7b155119b5718b83f0bac7409dd597002c89b
+# SKIP-SINGLE 1d3c0d1716eb2025c1dd2e07195b55bb5781fdd3
+# SKIP-SINGLE adac6fa11a95b5c3dd5ae5766b1539687d5931f5
+# SKIP-SINGLE 4847522fd4030af7ddb92b789545bc4e253524ee
+# SKIP-SINGLE 96e2863f2e85bc907e5fc0cb7d86e0b6ff54317a
+# SKIP-SINGLE 8d08a8a1070435e12b77517808df34a8093abc67
+# SKIP-SINGLE 7ba9a4c895b61d5c12118a18cb337f621bea4442
+# SKIP-SINGLE 922c4128034149abb130c6a9a06efa72659ffaf3
+# SKIP-SINGLE e4684a2f9d07ca6ad836028514dda8e3e6643bf8
+# SKIP-SINGLE eab243d22203e0aa56576b00568a93f18e8196cd
+# SKIP-SINGLE 50604ff3872a46baec8578b35db92d9892a35396
+# SKIP-SINGLE 63a1f317d05c8eed256251e7952e621a37b5cf7b
+# SKIP-SINGLE f24c0c7111d9a11921c057eb8d77ca4287294c0d
+# SKIP-SINGLE 689bb582623450826a9e2cdcc2aa63aaa6ab5764
+# SKIP-SINGLE aadb83da748c6befaabab0583fd38bac7fb094ba
+# SKIP-SINGLE 661567b7cd8092e1b41346b77e97201ea4d2efc2
+# SKIP-SINGLE f0e83548ee9d08a558363f73d6ec8e6f30e1cab0
+# SKIP-SINGLE 1a4aa391eea22fc053aa40c1827c7726de5fa7ac
+# SKIP-SINGLE 3b58bac273b517844210c9ecd07757625dc9804d
+# SKIP-SINGLE 26db0a032640a107bb0155b2f1eb7a586dbd8985
+# SKIP-SINGLE c6d819ecb5dafddb7b4dffa4c84f5264a3061d53
+# SKIP-SINGLE a90803a4d1bc47fcfc3b9a3af519cd8441bd92de
+# SKIP-SINGLE ca907fe89b16d59b067669f1c43af3eace1509ea
+# SKIP-SINGLE cae7d6cd58868916bcec34d9572736e7541b9710
+# SKIP-SINGLE 6bbbf3fd829f5000acb63536b5019b5be62d3e66
+# SKIP-SINGLE 01334409d6b03ef101bfd5cc8f5589220fa16483
+# SKIP-SINGLE f69a2b851d80602a158f8878811a63b219eb7fc4
+# SKIP-SINGLE 4a00e47d4d75528ec69291c03615bd669c58ed7e
+# SKIP-SINGLE 4a526ab48d10a26c9f58bde504023dd83017b088
+# SKIP-SINGLE 4cc1374786dcc28b80da546e708f7360f102abd4
+# SKIP-SINGLE f8a454f3efa10d59b8228b5c1373bfc9fb8ed718
+# SKIP-SINGLE 63078fb5af152934c5aa5facc5afd7f8e1907ade
+# SKIP-SINGLE 0cbe9c204e938977fef12dd4cc47d43a702ebfa9
+# SKIP-SINGLE 0ae14c17a24545dacf8ed309b2a75f8f1ed7da5c
+# SKIP-SINGLE 65c0d931f79672e15c6dfd633b619eabfbe9183a
+# SKIP-SINGLE 1f91b8c6eedc12fce03e76ebf8b9c039c5a0a0b4
+# SKIP-SINGLE abac70f198fc6502e3b4d81f9d9590e9d7432378
+# SKIP-SINGLE 9ff098615f92cf9fe4aa0f1c6835dbf9198daa6c
+# SKIP-SINGLE d19bb4861553fe82b86ef09db6cb6b1fe1eae829
+# SKIP-SINGLE b8127e988e2af662bdcd7cf25d281469a5142df6
+# SKIP-SINGLE bf253dd2e9e41a14b813692828ffc43ed24391ae
+# SKIP-SINGLE de1f89c202427a8bcb783f0b44fd02326b320a65
+# SKIP-SINGLE 734eb8f940c197e4b3548e7b79d716203e37aa8d
+# SKIP-SINGLE 8f1670b40fc9a779303207710a913b769170e82a
+# SKIP-SINGLE 9da698575addc4b9c007d7d6c1590bc5ac245bdc
+# SKIP-SINGLE 7d3da0a37edd57f6a31dff4864bcf1753de48698
+# SKIP-SINGLE 5630ebaf74f2f86e5d59fe4cba5ba96333e9fa6f
+# SKIP-SINGLE 9c31066ccdd6dbc7e9bd7a9a56de5c3103841018
+# SKIP-SINGLE bb25117eb40a08824142a5a56acc14d3fb4c89a4
+# SKIP-SINGLE 82a018e0622221910a7a02f683601c9f8c569cb1
+# SKIP-SINGLE d66d6ec5138049b98d99c4dcdd2c78582a6afe0f
+# SKIP-SINGLE d9db77704026ab0871325d431cae765981d167c2
+# SKIP-SINGLE c0ac7d039fb003444769700d60d06538341ba884
+# SKIP-SINGLE 8f3af3f61f43f2090bef30edbb9f8ae1a36c2e5d
+# SKIP-SINGLE bdea0f62b55e986136f5677369f354e4f5849863
+# SKIP-SINGLE 414a2b5bbc6ce441a8102254c593699e503d4f57
+# SKIP-SINGLE 89abc8d66f7668060305e9f0e5dc3ebfddfff3fa
+# SKIP-SINGLE 9b5f8ebb5bb970c34400b149190b2d16886ae814
+# SKIP-SINGLE 59d53e1fde516b911c29cedf338779df29f59dff
+# SKIP-SINGLE 84caa1a404cb89a6f02aa1cb517f5251e7e0e022
+# SKIP-SINGLE 6eb77feeee2d85cca1d6695f809072c357875ba8
+# SKIP-SINGLE eaade31040503efdce5c0daccd4c06f856d3fe2f
+# SKIP-SINGLE d9670ef135893c41d33e5bd12c69659bb5d6158f
+# SKIP-SINGLE e3ed0208a8ce25ed1d6c82e7e5bb3058d074afc5
+# SKIP-SINGLE 86a22004c9bdd1e93aac773cfda1932061f3b724
+# SKIP-SINGLE 6e205873992a2f8eeaecb30adf56346481a2c192
+# SKIP-SINGLE 772357698a226cdbf123d04d58573b79fd8814a2
+# SKIP-SINGLE c8d745d10a45ca3f378d7434f1cff73ae02ba42d
+# SKIP-SINGLE b45122b7132bb4b7e41fff5434e669e4ca671b8c
+# SKIP-SINGLE fcab7f72e1765b883537a0ae2c3a82a802539375
+# SKIP-SINGLE a49be9dba96575b68f0657c21eebcfbb56463021
+# SKIP-SINGLE 4c33696014d28975bce559a333c845fffc695428
+# SKIP-SINGLE 4a0adfec2a1caabca3bf99881f98f24ad12216f9
+# SKIP-SINGLE be1b64bdb515d8328228138982850475d15a0feb
+# SKIP-SINGLE c6be6fd6ccca9b9af1d9c5916d3da39f965e0ec5
+# SKIP-SINGLE 5976919a3325c4512e450b9649a510f05e7d4fcd
+# SKIP-SINGLE 0a014a386200532d92974d255b0b3f6b33d07a22
+# SKIP-SINGLE 82778374fef72583ac7c64f96187f56b1641ddea
+# SKIP-SINGLE 10d7284a2a1e8a543b31e5c99c2fc0c26c8eb681
+# SKIP-SINGLE baf16746960ad5f7baaf21b44feff9c8f3a4fc29
+# SKIP-SINGLE 2fb2862facf3eb70897a2e5ba342971ce696bc5d
+# SKIP-SINGLE bbf8b1df90f327a74423b2ccbfe557da9b04dd9d
+# SKIP-SINGLE d87d9e41f5890fbe7d279053c9c7328890c94b2f
+# SKIP-SINGLE 89172ac4376403b987bad897cdcfd22f9e5d97c8
+# SKIP-SINGLE c31b471cadcb9b8171de04b09a044bb775682a3a
+# SKIP-SINGLE 4088e467b3be3fcf6a1813bc74de7c4d3c193f1f
+# SKIP-SINGLE 8124ddf387451ec95ee4f8e0f726ab234bd8b762
+# SKIP-SINGLE 2cd60cb592930d985565612e0f22766b98fcf341
+# SKIP-SINGLE 403a7e59d5c79d81ee018fd9e648a2af744211c1
+# SKIP-SINGLE a8d358ed231b7656be50b034484b498b0b222445
+# SKIP-SINGLE 9709ff1436d547664e6b3ca252cd37665467b4de
+# SKIP-SINGLE bd3cd579cb43ace253e245a7026b172f216f3a1f
+# SKIP-SINGLE a317620a52746ea4346eabf4559a1caac2b63011
+# SKIP-SINGLE 47b22e55141da090a3d4688851eaa808f9489078
+# SKIP-SINGLE 69cbf2b2f304f82c6d77cd663d4211bf125ebe74
+# SKIP-SINGLE 83a146b24ec230539c4520a4315b8bcdeebdb434
+# SKIP-SINGLE 17ecb1c728edebd00a787fd6c4bdf8b7722e9a2f
+# SKIP-SINGLE aba160b043588171eac8235105d45b30a7f141f5
+# SKIP-SINGLE 05b733e86c108bdacd3ff45d05d560d7b8778a9b
+# SKIP-SINGLE ca28d5fd72d3cc7e960f4f2bd1d8cf00ac3622dd
+# SKIP-SINGLE 6d1c453726cf8a903c6bc555bacf20b7a4ac8651
+# SKIP-SINGLE 747c6a0dc8e53d66c785500d122957f4a17a9325
+# SKIP-SINGLE 351576f913ded76fc2e984c3ad42d47c5c5bc482
+# SKIP-SINGLE 94cae7b2bc02f49f238496ae4c386bcb9cafaeea
+# SKIP-SINGLE bbde29c012868e130388d9975beded563643a7a7
+# SKIP-SINGLE 33ce5fe9da02f0d0f4e0c32b86dde5c5e81c9565
+# SKIP-SINGLE c74f30c8e0f1799ebca7eb144c56506a53290243
+# SKIP-SINGLE d7173579a7e9a0f71ccd02fdc9f694b49aadbd47
+# SKIP-SINGLE 7abf1ca1212d91d0d50d3dd4f6386fac98fd2209
+# SKIP-SINGLE b7d1b2e9462e8d81ec44c41d82d1b840ebc831f0
+# SKIP-SINGLE cb2e6461f3db45df70334016b2a8411605eb847f
+# SKIP-SINGLE 6963deed24b13b448835be0d72d9b943ae2a345f
+# SKIP-SINGLE e4b32e3c572ef0786d2e6215ceeffb21d6046177
+# SKIP-SINGLE deeae4c415166eb144d008f0e904ffa70034c146
+# SKIP-SINGLE 634f71a2238b9e29d6bcab196092edfef19ebaef
+# SKIP-SINGLE e39f5e5c806dc0f7ee0f3520993ba061af7cb040
+# SKIP-SINGLE 03045e2e73eba5578218e09127055ab07a7c398b
+# SKIP-SINGLE c158b52ea421b4ea49adb79c445b712d18ad8273
+# SKIP-SINGLE 89c144b83077aea584e9bbbf04e1d786220aec4c
+# SKIP-SINGLE d6d5062bbae5ee708a0b80ad9b5f400320239fcc
+# SKIP-SINGLE 7edbb163b322072da6666240a698b5dc5fc6aaef
+# SKIP-SINGLE 77e80ae0136d1d79c0ee33b9780445aa6498664d
+# SKIP-SINGLE 6a69e49f01fdd025912e2d4397ebe2f51e3f188d
+# SKIP-SINGLE 59035c17d08f0999ba96c74d1763eedb0347d11e
+# SKIP-SINGLE 24dcbf47d826f46821ed484f93ffb89d306a0b2d
+# SKIP-SINGLE 63ecf01d0b0897b948296eaaffd690290d536b72
+# SKIP-SINGLE b9f37a2a09ac6bcef1a03cc49489f15ff01a74b7
+# SKIP-SINGLE c702e25a7a9e1ba2b75942dcc00402947757786d
+# SKIP-SINGLE 5f1039630dc8bf63f65df5c7882246f267d01295
+# SKIP-SINGLE b32900474fb5e4afdfd0c0015f6b08d58b5e7847
+# SKIP-SINGLE a8517ba3ceb21f3fb5c452226d5ca6a3981ae852
+# SKIP-SINGLE a70e54f6f7a6e711bcc49fce4e117d9c3e9d71a1
+# SKIP-SINGLE a2b9d58b2e2f56679b33995e2d86b0624c0b1905
+# SKIP-SINGLE 5adfe6520b5a3ff2e3bacc603487c4f12e54dfc7
+# SKIP-SINGLE ef6c633b9d5532d8888535a43ec8abc7de0a34f7
+# SKIP-SINGLE 1b9b19ebf911a959948de513afe3f639e23f346a
+# SKIP-SINGLE 4c6272373d4e5a6fbb8668f4980bbafbdc28405e
+# SKIP-SINGLE f74ab3e9ef7a5a63efdb4a7e0bca0c9cc71bf575
+# SKIP-SINGLE 038f46c2526fcc3643a74a6c3e9fda40691f4067
+# SKIP-SINGLE fca675dae325a974c625893fb0ad1aa88abeab8f
+# SKIP-SINGLE 59a428ed6ccd7ee41e847b1d63889845fae7ebd5
+# SKIP-SINGLE 314f9fcf6cb8a6f513022a40ee384ff0e4ca513a
+# SKIP-SINGLE 555450c7b1b1c02126bd9fc86486090fe2b829b5
+# SKIP-SINGLE 06ad74581385cd1930a073b2fda314230b254608
+# SKIP-SINGLE 17259826f263f87d45eb98c8effe0ba7ee774f5d
+# SKIP-SINGLE 4814c6b1184a2b3fe673c5389ce0a8d2c67aec09
+# SKIP-SINGLE ac47ef773e0cf734a3e3e4237aca50704a0a68be
+# SKIP-SINGLE 29fcb6ca1280fc01c652dcecc331b20cd88a5729
+# SKIP-SINGLE 37a794ce21aa52180c3b5037c3825efee91ee7a0
+# SKIP-SINGLE 3d9d7b34511bc3601efa2ab4ad24d62c73b80cc0
+# SKIP-SINGLE 2b51859d447cf2914cb64936f18231363d971b21
+# SKIP-SINGLE 82eb75bd542ddc97b94a21bab25387f34c86f54a
+# SKIP-SINGLE 9913638cc596a018c7d687652a3abb61325dc4f1
+# SKIP-SINGLE ff7093d74b51f094b65314e3567fc96a3a37ffdf
+# SKIP-SINGLE c05d414844f6e1e0af05ef0cbcabe3313f5089d0
+# SKIP-SINGLE 43172dd01fc7344f71f6e1d92fe051942f360355
+# SKIP-SINGLE 5d6e42e013caf236f5f1c7a8bca6d76916bb404a
+# SKIP-SINGLE 7e92976bc7973a4b4be0719b06d3751e57ad80ea
+# SKIP-SINGLE 6d4d9225afcca63f36b318b11be945146007b00e
+# SKIP-SINGLE 2f559c267806f8524d43bc46c5814c69074b0b0a
+# SKIP-SINGLE f23894516ac731bc858158c3e7198db8aa54bfb6
+# SKIP-SINGLE 41f1fd53c830666c1274a602ca48c433da2425d6
+# SKIP-SINGLE 6cd45fbf37bd344c87b83424ecaccc8119c30dad
+# SKIP-SINGLE d88d35ffed6c1073a0695ba1e980cb8ea7f09c3a
+# SKIP-SINGLE 17cf659fdfab02d7c5008d4a4b1df11f93b4764d
+# SKIP-SINGLE 6ac6e5b4752a596436b35419e7ca111b04f35d95
+# SKIP-SINGLE 3f841a942b22c4b6b140654d3d8de535b08b672a
+# SKIP-SINGLE e672990d882ce53167b22969eec6b32e96503573
+# SKIP-SINGLE 211db146a2f475047b38b010ea55c27c08701114
+# SKIP-SINGLE 6df64d170a93970fd57932980fceed6bf1853ccb
+# SKIP-SINGLE 94c542da1ac13fc6052d02fc7b960176c09bbaa8
+# SKIP-SINGLE 895bb4c9112c715a1bfa66d9af0d945f4719db55
+# SKIP-SINGLE b9b5cf4196e7a5368c5e36c0c5e0364b5d3e15b3
+# SKIP-SINGLE 999e625bc94d08eadf92d42d5bb0fd6f6d35c268
+# SKIP-SINGLE bfc298ca31d11c09d49d792a88a9f72415bb4513
+# SKIP-SINGLE 76021e1e06c5c1af05b658310505da333bc0c214
+# SKIP-SINGLE 90425b6d4b314f8f4c26cbf61ec24fdffec4c0f7
+# SKIP-SINGLE a102f471b3973d46d6954bc31c6170ddffd508da
+# SKIP-SINGLE c698ac791b3755c340ff945c137f6732cd4e20e4
+# SKIP-SINGLE a2b1795b96b5ac5981220b1056f6ea222bc193f5
+# SKIP-SINGLE a2257a531d0cd4c1d2bbfe374f490fa956be0330
+# SKIP-SINGLE 3b696d1cdcc79505313b2f087fbf742e503a1998
+# SKIP-SINGLE 4c03c46946d95a7e9079a087b5e0e835f5a5beac
+# SKIP-SINGLE e3163f1d4cec335b5941c9bea267fe161c5ab83d
+# SKIP-SINGLE dc52036074c46d1772557436cda2866b346b4d16
+# SKIP-SINGLE 9413488ab4e8752a2fe88ce9f42ca83ffbe5f1a8
+# SKIP-SINGLE ad5488cad62b04ff1ae28cbbe2a0dcb2af817f27
+# SKIP-SINGLE cf0053a66a8055e05e9842c41f60c2130f4dd642
+# SKIP-SINGLE ed2d884872ab18e38ac7d8ba17e1d3a3446029e8
+# SKIP-SINGLE d34eb7a39f15524dd13681864be14f85d15b4a0b
+# SKIP-SINGLE 620794aa93107115b52f3622c7b6934ebc3fc8ac
+# SKIP-SINGLE 5e06f2fc31a12012d73ef741715a68e47f0c3a09
+# SKIP-SINGLE 8bf2e4e282ff3c0661ebea70e574cce16bdcc356
+# SKIP-SINGLE 5ebc3fc47cfefb9f6726e9308f153c0df6941c12
+# SKIP-SINGLE 79d4b6915c0dc3e27ca18353bf53ceb31a14ded2
+# SKIP-SINGLE 20d42249ce8d7fad1e377621e717b238df3a4b05
+# SKIP-SINGLE 4d7a51eba2c780d10a0b0dac33936c178c677f50
+# SKIP-SINGLE 70a7c65742244403422d7c3e4b79a2046c1cefb7
+# SKIP-SINGLE c8a0b81f8ffe093910dd3ad2852dd47a15587d9e
+# SKIP-SINGLE 6f6362207f7d39b5fb10b2968d238e37848a5a9d
+# SKIP-SINGLE eb6ac423aa21a50d86056fdda4b2bd58278dbef4
+# SKIP-SINGLE 6a65498228c80a6cafc514dee7092b64e9bb84c4
+# SKIP-SINGLE b6540a8ef5b2725812760f5a9a5cdaef591cb5b4
+# SKIP-SINGLE 765e57e2d25d34280b25b925dd8ede4cbfd39020
+# SKIP-SINGLE f5ab0db4b03c497112fdcde3b8b270c3fa14a3c3
+# SKIP-SINGLE 7cd401f63db705acb8ede6624c293843b41e7e20
+# SKIP-SINGLE 941937d295dce322e00a1d77b61041e6bda5cfd8
+# SKIP-SINGLE 52089993aa3231ccdfd0469aeb7c3e7b6b89edad
+# SKIP-SINGLE f4603ab67438ec1a31b35918608dc4db410be9c5
+# SKIP-SINGLE 311c278c5bb26291fbe6d2e28130c43a08dce096
+# SKIP-SINGLE c4d723e865e86a83cf87d4cc42e7dbca799dc4ff
+# SKIP-SINGLE bdcd8dd9fe4a9926a0dbc46ee1180ef53a91bf17
+# SKIP-SINGLE 24fe275711aa0964051f3b95c9bc9b4a3e524826
+# SKIP-SINGLE 281d3a7aadefb673917bc585224c9bf7dae449e6
+# SKIP-SINGLE 291531a7e46edcf52f49e193114e818c111d7af6
+# SKIP-SINGLE fd6c673cfa76b30d3910963982e2c28ca208e827
+# SKIP-SINGLE 15e31a4a1fa359cfabda074903fce79f4982245b
+# SKIP-SINGLE 916a87f0a9748b4c31f20496fff3223553f5226e
+# SKIP-SINGLE d73dd4c12c92db4419df1b96b1562c5c821bf877
+# SKIP-SINGLE ac036532599bdd49ab3bdd36437a06a12224a620
+# SKIP-SINGLE b72d1c5b157214bc8feb4e6364ba624f9feae271
+# SKIP-SINGLE 4ed657604d669b4ba05a9280734c5f006939cdab
+# SKIP-SINGLE 92fc5baf17ccd0999f631d469708523de50ac06e
+# SKIP-SINGLE b30bbf030bacdb0b66c0296d1368db7b4c07558c
+# SKIP-SINGLE 643771818e36a8448744f061184cb3411b13291e
+# SKIP-SINGLE af51e6556daaa4e847209f79ac9dbc1a3ecc8836
+# SKIP-SINGLE 757a95906805b1d7fcbe4b536841a7b53ce0c047
+# SKIP-SINGLE ab69bb63641d12f8a53a262f37908d8234935e13
+# SKIP-SINGLE b6288d1322ec476c156c165496d08e8f782bcb03
+# SKIP-SINGLE 74635dafacb9ebb640a4a69108dabdd897c2498f
+# SKIP-SINGLE 29e17e08b395db8e08e4c91a543750f8021376e8
+# SKIP-SINGLE 0c33a8ff4bd20fcb5f2d4d2a27907c77804f4e42
+# SKIP-SINGLE b6e7df0926b1a569a582b0d3ff0da0c27ad368bd
+# SKIP-SINGLE bb8f8f5cfa0f66729c6c6a333bee5bd4ba16c24c
+# SKIP-SINGLE 7dc99d5d51fcadafcd7e38f169ef8b353db61e81
+# SKIP-SINGLE bdadeff503d1796758a498dee218751520bb0cf8
+# SKIP-SINGLE 128cc4a2f401e96936e9e5791e65fbdc35ace6b2
+# SKIP-SINGLE 3e18100038a0514b1ea6bee01a141f1477fdfbf6
+# SKIP-SINGLE 5992502ca42263855e327239eeb7f51b59a2703d
+# SKIP-SINGLE f63e1740edac418c2ab88d72e1ee56cecfec038a
+# SKIP-SINGLE 5dda07d22c8d974b31e196a802414c267fac5cc9
+# SKIP-SINGLE 9901f47ef77e777ebe0183624024527ce691256d
+# SKIP-SINGLE e65d2f364cf40891d15009e9764143a45c2d164c
+# SKIP-SINGLE b9c228438d34b15ae2804a563d4d52b5e0de62ad
+# SKIP-SINGLE 9273afa89034783aa26d4f5bb43cf22afce57e74
+# SKIP-SINGLE df59970cc41cee834f2432a18a098ec7de16f7ae
+# SKIP-SINGLE a42d67628942244b0cb90276c4e0ec77e967c0bc
+# SKIP-SINGLE 26da67d10b93e2997679e27b56a072e4767102c2
+# SKIP-SINGLE e1757517c33d9c6428ecab8bc277aea14ec0c96f
+# SKIP-SINGLE 7720dceba1079151c37aa0a3117ac22dac45a119
+# SKIP-SINGLE b670b2d8be07dd47274e4e771437b6c4e8649d66
+# SKIP-SINGLE 39e224ba18485d7da68d13579c74afb2cc86f382
+# SKIP-SINGLE a5e428a638718223b0ab667382a8493a135db0ca
+# SKIP-SINGLE b3dc6e8f06892869e0dcf39fd226b63752ce6cf9
+# SKIP-SINGLE f46bfdf3234548f664824b7c96838d3f918950d7
+# SKIP-SINGLE 6465002b8a51d065a662cb589e8e1cf0a78ad160
+# SKIP-SINGLE dba7034ea10fb394b0dcf91256b7df094218119f
+# SKIP-SINGLE 63bcc81d1df8524b20dab1fd45b2cba4d822a786
+# SKIP-SINGLE c77ad1866d0e559db41118ad5a2c306c81fa3c21
+# SKIP-SINGLE 318c4772af4fa04fd8dc498bdc252b691b3cdab5
+# SKIP-SINGLE bebe5a9791f7db3f088e0c07b2fd68e1d21bb161
+# SKIP-SINGLE 79f7d40fa850806450621f2fa4c73974399bd7f9
+# SKIP-SINGLE 1b72dad74f2e193e8da8de58ef8c46341897269a
+# SKIP-SINGLE 8b22849a5cef3e81e8b81cf7f32c186471607e06
+# SKIP-SINGLE 868b6b454ea75361a706ab57b45b6a49b124231d
+# SKIP-SINGLE a2cf65d2030c7856d029e43fec378efe42934400
+# SKIP-SINGLE 976357769fe33e36afb37d5cd663587f46e88d0e
+# SKIP-SINGLE 759a15d446b7f728d2d146cb1bfd6d722df9e998
+# SKIP-SINGLE 7726cb254503c2c3d082ffb8aed9c12cbeeec12e
+# SKIP-SINGLE e25cf441152746a4686ab7adca8d3302e0740189
+# SKIP-SINGLE 6e1e1bdc2c6ee45ac12283f8e8096723d60d93a1
+# SKIP-SINGLE d025ce26f849ae8429f5250eeaf6f4915befe804
+# SKIP-SINGLE 80826b8220c6f26609ce916ceee3a0bd143a1b41
+# SKIP-SINGLE 8da012e224276e42c15d613c0aac3ce3e1a3d939
+# SKIP-SINGLE 13651c52ca6c90265fe568a62db1f81152cfbfa7
+# SKIP-SINGLE 231c71706b3b5eec8038986f54198a8983ae83c0
+# SKIP-SINGLE 45a4510738a0878267fca5fdd687981c70209023
+# SKIP-SINGLE c7341aad72ee4cfca5c989ef982f07fbd14d8837
+# SKIP-SINGLE f78257006c46ac537aba00658b11a75a11bd1fce
+# SKIP-SINGLE a556a2ef5b45a25ff5df9a7cf3dc50e1ec46224b
+# SKIP-SINGLE fb9711df98be83c357321761d06e902e5410da79
+# SKIP-SINGLE 13811eba32c8d43126e3d137ddcedbdab4dd81c6
+# SKIP-SINGLE c87027e054ec247f3c7b80b2159cfcc633bfab7c
+# SKIP-SINGLE 099f9159c4312ad17e51fd3c9571cf525fc01b15
+# SKIP-SINGLE f9723f947a919f70aeb54a9cb6515a4ead3c90d3
+# SKIP-SINGLE 53947aa60b193ec9a34442d4492ddee9ea36ff30
+# SKIP-SINGLE 5aee49d203aeae2dabd1263736c0c6bf799f4f8e
+# SKIP-SINGLE 721d1102986ad16bc71dc7a460ad08cbbe3ae979
+# SKIP-SINGLE 15e4c44564829f2eb3a7845ae94e064540ac1a4c
+# SKIP-SINGLE 8c149505a08ddec931b54e358f4d43e847920861
+# SKIP-SINGLE af7bfaad6a6efa67cab0855b93ebdd920548a007
+# SKIP-SINGLE 988a5133dc86e28e4b097d2c8d64d25e37bb6c5d
+# SKIP-SINGLE 1deb54f5c9c0b4f3c594e4f4aa76b42a67643976
+# SKIP-SINGLE e1d945421522f5b944b35e70cc0a535acc942230
+# SKIP-SINGLE ac297b67bb5fbd4488023ca693a1dc62f012da5d
+# SKIP-SINGLE 210a3c0b3ad2a944bfed4e87a5039a9e4e14329a
+# SKIP-SINGLE a11dc2c8ad5f4162fbad497ce7a813d9f58837b4
+# SKIP-SINGLE 8f446c06498b0c41e58d9265aa72c4615a220956
+# SKIP-SINGLE 79dc3a717e23cf66d04cf3ec3392bd7635839bd0
+# SKIP-SINGLE 187c1eed6f5e21088c5b9b129c65b3e2fe512d1b
+# SKIP-SINGLE d88694315f88baa24d4e0bd40be450218088292b
+# SKIP-SINGLE f3fd0293d9112e5e1ad9ad3bfb1e982dcb0d032b
+# SKIP-SINGLE d6ab30499153b2d6b9565039714f210930a10f65
+# SKIP-SINGLE 592bfe5a978c949883472e66bd6c00f58808a506
+# SKIP-SINGLE b3d858da8d577449e2ab40572422fdd1bdf8b538
+# SKIP-SINGLE 4da353c6a3900ddacab00d685432fba12099dbd0
+# SKIP-SINGLE 1001af9b847c1c338638ba1aee037dd8451882d0
+# SKIP-SINGLE 87bf022f2f5457febf23c2ce792c549928771bbd
+# SKIP-SINGLE 203b6ce9fa148ca05fc2688a8a1a607dc922acd7
+# SKIP-SINGLE edcadf5c440a95c0c6a564d89eb9beac64e229fc
+# SKIP-SINGLE 3ee58c64e57cde232a062cb199688b2686488ef1
+# SKIP-SINGLE 5c406adac75e1b007545991fb7f20068bcaa5b22
+# SKIP-SINGLE 7ce2c17a0fbde3203f311c6b91d8bb2ba77adeda
+# SKIP-SINGLE 65eb55ff4194c67ede020ceabd7b92e7d2128908
+# SKIP-SINGLE 097f36bc75a6570e64f80451ae4bbe2172d610e0
+# SKIP-SINGLE f867699b23ad012ad71f08f88ecf3e0e8df045da
+# SKIP-SINGLE a5803441934b5a128f02169c37e4e00b25b4fc10
+# SKIP-SINGLE 8bfe8ce8d0885e8022b2bea82d1cff9cbed86fb1
+# SKIP-SINGLE 96fc40d7dbdc77efa7b2e01f231bef9e19e96786
+# SKIP-SINGLE efd20b8c4bec0b6edfeb0c415719cb7b230496ba
+# SKIP-SINGLE 34d1a15307a4cb1f667e8af6ecca523369c436c1
+# SKIP-SINGLE 1e9bd1df4c1def12750b2ce6dc335c1921a21686
+# SKIP-SINGLE e642113184136a66fee782c3cdec832ec2ba4c0b
+# SKIP-SINGLE b8aeb2e35d99e14970d15561fcf161ce78fd2426
+# SKIP-SINGLE 16b2a5471eaa7ae2514398720696b3da12514e84
+# SKIP-SINGLE 5cbb6ad8951e8393c3cd728738214a0c87e149be
+# SKIP-SINGLE b3038fa86716edfe9f015c3d0a4c53b9a61c975e
+# SKIP-SINGLE 2b56339f75811a670a18439fedd17de932662c78
+# SKIP-SINGLE c43a9d940a9d033f7770f241f920a537167b211b
+# SKIP-SINGLE 37381fb9b2cc225d127d8eb7cfc0e42c27cc1413
+# SKIP-SINGLE d234e9bc8ae3c8ea1ecb82970a4fd1fd89850249
+# SKIP-SINGLE 70fc2a742d28697b0bb05c16665f038f6f79c86e
+# SKIP-SINGLE 3943db1ab27a29105520bb4e2975e68540e3f055
+# SKIP-SINGLE c6680e15d7c46b9c15358c5bcca4c70b3b2608be
+# SKIP-SINGLE 1121416cfde99f0738d0dac63b6fdd2667de2c5e
+# SKIP-SINGLE 15b4f9d8786d4ecc9eab81d114f09448de2b9ce9
+# SKIP-SINGLE 68472f45a6a441b1436b5949c0384dd57111077c
+# SKIP-SINGLE a80140032be992d170925f274fad215de97d9a50
+# SKIP-SINGLE 7e3d6657e7a952c2eaf9d814ac639613ec81ac1d
+# SKIP-SINGLE 7ad90d410813dae9d2fda3c251d14678b8f104d0
+# SKIP-SINGLE a5524504164ed9077984b90ecf5067d1e8bcbdb2
+# SKIP-SINGLE 2a5c81a5c92d15e8db471d16f3a014a338f9c271
+# SKIP-SINGLE 6ce8092a01519acd2afe29a68b11809280677ad7
+# SKIP-SINGLE 28cd3abbdf24660d8c3587ee983037f82058b87c
+# SKIP-SINGLE 38a5a36a17578a5e06ab18986ce6dae68938e1be
+# SKIP-SINGLE f42b2b0143f5f6e6fd9741b482cd98785feb95da
+# SKIP-SINGLE 17807af213da9eb08507d47dff142a1f8672b4e7
+# SKIP-SINGLE bebd14acc1f646c79702fca4f7081df30a49a66c
+# SKIP-SINGLE 770e52e7001ccdd309a47cbf8b8c9862bfd44ab5
+# SKIP-SINGLE 2b48e5f979610de9c92df24d7cc6c47b6d8d83da
+# SKIP-SINGLE 5a9d4d67043e86831df9c8b3dcb398c45b01bb06
+# SKIP-SINGLE f4d2f75a0782c53bfb09b70bc75de3c974ae5002
+# SKIP-SINGLE b21539f6083bb7be6ce3b7d7701b270bc0bf384b
+# SKIP-SINGLE 1f2529df7d4663597d6ac72ac001def4cd049c1b
+# SKIP-SINGLE 25127da57f5de6ca42c90206f1bb7de0efb41ea0
+# SKIP-SINGLE 54e18532e7e731ec556e4039d677592215a78ac3
+# SKIP-SINGLE 5238cd1e6a9b3c310743fdb4497f8f16d965367e
+# SKIP-SINGLE 01442a9ac9c6e6a652b628cf18b90a7e30bff845
+# SKIP-SINGLE ffa59bb1611609879151b6dfa94772f9e2144849
+# SKIP-SINGLE 6696b561d4d37aebdbb42833d8b5a8d1f4e14482
+# SKIP-SINGLE 530faee2752c7b316fa21f2ac4d1266d3e7a38e6
+# SKIP-SINGLE 53f9bc6908a4da8f5c985e8f204a479c828c432d
+# SKIP-SINGLE c69c185109c90ecc486ab707ed32d7bb7aa467d5
+# SKIP-SINGLE 89cbff32e41771a64ba62e449ec797d55f86f15c
+# SKIP-SINGLE 3c5e3ca2badeda8637e84586eace6ba619f0110a
+# SKIP-SINGLE d5f6dc131b63d6bde096c03927c05a490c707c41
+# SKIP-SINGLE 9d8ce520f03217e5aaf08b3e252a1bb82c3fc641
+# SKIP-SINGLE 05f89e8ef4eb5fbcd04fcc9c0dcb92f90ad6b28c
+# SKIP-SINGLE 79483a5873a90bb28178af59acfdb00040c3d23d
+# SKIP-SINGLE bb0496e7e55a7fca89c51eb0b85dcfa6904ea3ec
+# SKIP-SINGLE 4acc4ac66753ff1556be907f2611b48ffc3fc79c
+# SKIP-SINGLE f7e10297d18b17f55b4a8442a3307db00605d46d
+# SKIP-SINGLE 73ced8c23ec3d5cdfa6d926af649235104707d85
+# SKIP-SINGLE 8cc8adb04d2861fb1b1bbb38e53feccf3a2fc1c5
+# SKIP-SINGLE f8b07ff4f318d799a471c9363903e3929fd5c844
+# SKIP-SINGLE eb1d22b136a3f7a49b4060553b79ee188f55a498
+# SKIP-SINGLE 6487d4ac5da92aab4d54b5702bba24a5a1ce8432
+# SKIP-SINGLE 1f3ba658fccdb0b35bdbbdfeb8591dba72ee983f
+# SKIP-SINGLE 43b6f05dfb46637a414520b27430fbe3b0f005fa
+# SKIP-SINGLE 65cc8efa333bbb66acd7b19f4b39c3138995e864
+# SKIP-SINGLE d432cbeb27c1f0a2e59c6853b61ecba3615f645e
+# SKIP-SINGLE 886ded1b70f24c52ee526f0c4a69ca06829fb2a3
+# SKIP-SINGLE c5ed3a72a8a70931ef9b0f9d69f73ff0fd40cadb
+# SKIP-SINGLE 208a11d3f0ede17b29da45c2491b703b6942a764
+# SKIP-SINGLE 1b809f378f6263bc099da45c5e4a42c89fef8d71
+# SKIP-SINGLE 5c890bfc191d0cf18dccbbf50ebdcde946a0d7fb
+# SKIP-SINGLE b16d553ecd1b0478ba28dca5d898fd22aa130fd8
+# SKIP-SINGLE 3568c5d86fc8d37d761245c19246f76803fb1f16
+# SKIP-SINGLE 1e09364d677b0fb57efd18369c55e8c2d0e826f5
+# SKIP-SINGLE de1b33f5a8c6ceee9be59285f70370c3cb2efd34
+# SKIP-SINGLE caf155c4638d4704b2a099657153c9abc115720b
+# SKIP-SINGLE 79e133da034cd2d7cccfc5a6eb7db340f2dc45a8
+# SKIP-SINGLE 7be160d80002cd000f33da38d3a2f7a2920c1bf5
+# SKIP-SINGLE f6d6ccc984ac241e1a5f61d770bf77c15f30ad07
+# SKIP-SINGLE b23daca20788ab6b54362c5bdb0470887de106fb
+# SKIP-SINGLE 0fc8671d10ccab52d78afdaeb715bcc9e52c0ac0
+# SKIP-SINGLE ba0a61d10a5aedaf4b7bb61aa3626f385d6aba12
+# SKIP-SINGLE c6f42387e32a4e99cd9ddd203ab51f3c5694054e
+# SKIP-SINGLE 46e7613ad3b88807d25cfab3d78bf46c9e2fe13e
+# SKIP-SINGLE 843b55f6822bc1e8b97b91222e7bc03b5caa9919
+# SKIP-SINGLE ed943db794987cb6fc87b55d68d6164190ba9a24
+# SKIP-SINGLE b799cc271d69fc494da1fe04ca8ec6c529a19a19
+# SKIP-SINGLE 289d6b2265e19822ed5ad44e5c62e9bf3750f606
+# SKIP-SINGLE b42df36757e7c86f33730090a8a0789e957f8fba
+# SKIP-SINGLE 527b8a807143253ed8e52de004fb3cc9a17123c0
+# SKIP-SINGLE 2e669305fca1d20e9224dfe0146cef8267c47071
+# SKIP-SINGLE 99f8a1c91733a8aaa47818e78dfe86c5635ce086
+# SKIP-SINGLE a8e3b29b2b73292c8497fee8932b04fa07a2c08a
+# SKIP-SINGLE 8264e8deaf6d67492964b63bb729ab6fcc350781
+# SKIP-SINGLE 50dd037338784381300f411c64d39a9fbaaa7f5a
+# SKIP-SINGLE a2323c7ccb0eab1b6395d5d1d7e18db617354e13
+# SKIP-SINGLE 91d539b0772d4b2a6bdc3fbccf92dc1fcc7f747a
+# SKIP-SINGLE 4ea90a711d11b14be728241a4454f8c5ee7b6478
+# SKIP-SINGLE c3b53559965a4c6f48274c3cbcb43eb6ef23ae14
+# SKIP-SINGLE 97267d2bf1fbb9279d32f75eda9dbcf0c4316edd
+# SKIP-SINGLE e704a6956d86ae394ecb029e066bf8d8c061baf3
+# SKIP-SINGLE 809934f0220e1d9a1780ab97d04fececf2b934eb
+# SKIP-SINGLE 31ec1a7d329cc9374b16c5831d30248c99e93dfb
+# SKIP-SINGLE d93bca019713e98228aca9f4d1a4838a72b1cf92
+# SKIP-SINGLE d168110a322389a9f991d7a5bdd1cf777642c990
+# SKIP-SINGLE fe7263803c37c836b3484861fbe13674a5063b4e
+# SKIP-SINGLE 29c7f8c915c3889dfd5b25878aa0692f826cd38f
+# SKIP-SINGLE 6e73e07a6f5cbdd1c5ae6e0f3fbd0f8f56813f1a
+# SKIP-SINGLE 3b9dad88e02f05773c599808266febf3e4128222
+# SKIP-SINGLE fddd63f8b854f6bfa91403f69ba694ccb54197bc
+# SKIP-SINGLE 97eec9db79443f99eecfd84af73e5249748b9796
+# SKIP-SINGLE 11e22452b0ab6f2ea7679665ed8e9abcbc03eae9
+# SKIP-SINGLE 79d585c2befb81ac5480a9577eaeb6e8915cae23
+# SKIP-SINGLE 59698d924e541b1768a61caafd0dfa40b5ed4b34
+# SKIP-SINGLE 77e194971c5370856a63cf02397d79f85d6b342b
+# SKIP-SINGLE abd8c9b4d71651b00552d3d5dea119f22adf3874
+# SKIP-SINGLE 69caa111c290eb1f02013c407f4ac2549b172c36
+# SKIP-SINGLE 8933cf86a1c64fc3302188629356084bcbfc65dc
+# SKIP-SINGLE 6e90768143ff47e96a70d91534344161a1d85f46
+# SKIP-SINGLE ffdb91c6b344b6b341e75ae981ebdb3e66b94130
+# SKIP-SINGLE 2601aa9105d935441ed25370feeeae3e717cc791
+# SKIP-SINGLE 8d5dfafab7dc40d4b74dc0b56d1b314fd8cac390
+# SKIP-SINGLE 4467073c50d2c7fbbb30530d1a0a25f8272ff56f
+# SKIP-SINGLE 4459dcc07865f6ae1f21f624fcb09cf8fdaecdb5
+# SKIP-SINGLE 21e475ea0c0d04ae7634f377ed64fe179388b133
+# SKIP-SINGLE c0d24d5316626a3d5e76f99a0f418463cb355459
+# SKIP-SINGLE df06cfe4a9859a00d7ea046be8f82f1b9e4564ec
+# SKIP-SINGLE 1ae8a18d949e3a3dc3f7a6f2284ecb35871416ca
+# SKIP-SINGLE 6e974130d709e9e8624dab5c24a6639c0331cb77
+# SKIP-SINGLE ca194ae5c9d63c032827af6c58132b066bce7fbd
+# SKIP-SINGLE 6927f237679e73343aea0d70e356fc247c05c4d6
+# SKIP-SINGLE 673d281b82886490707f3356a87b5a992d1dc0ed
+# SKIP-SINGLE a902af6c1b04abcac4d6d221a2b0086cc076bda1
+# SKIP-SINGLE e2613f41213c89bfd90d34a7a5fb120e7366ec6d
+# SKIP-SINGLE 3a964dc5c124d1b5402e7e5cf7a6b6f28310e67b
+# SKIP-SINGLE ac4dd5f244032148595fb787ff926882390b36b9
+# SKIP-SINGLE 952550258dcf06bc03662974aa6b6db9d792aedb
+# SKIP-SINGLE 667e002e91a26c20089c5843254a39b771b64ab7
+# SKIP-SINGLE efd80237ca6085f28497bded259a92a48bb6005e
+# SKIP-SINGLE 22910e71e5092250b2134dae07bd8e2a82e4f750
+# SKIP-SINGLE b9683230ecaada87f23bdba59ef044c4b0374216
+# SKIP-SINGLE da383aeb8e629f642b46e9c64b2ffcec9976c23f
+# SKIP-SINGLE 0689a4ac508a213f29c11ed6230596885d42f89b
+# SKIP-SINGLE 1fdbeffe3a65cb23abb43a4ea59df9553c9246f9
+# SKIP-SINGLE 40842f67afb2931de6789237a49570f99b70404f
+# SKIP-SINGLE 4e1f92feb3a861f93b7a285715d03be930b41b91
+# SKIP-SINGLE a0f060939456f3680823e34f430e482fcde2f5dd
+# SKIP-SINGLE 5dd2d50f3d5e65b85c87da86e2e8a6d087fe5767
+# SKIP-SINGLE 0776ac06803100e36d2ff7532744186f70bfcb56
+# SKIP-SINGLE e490ffcf953cd2a82aef86e05da24352db5d4568
+# SKIP-SINGLE 58de11fe1339a1248f9b0bccb3a3601a9d8f56c6
+# SKIP-SINGLE 515eb6989575dc1d8e8f996ec65494e637f24ffe
+# SKIP-SINGLE 9034dd053163d6fc383d1ea4223c0b4dd7e9fb39
+# SKIP-SINGLE 13824c44d28427931a7e3284adec9a3a38cd2323
+# SKIP-SINGLE 681faf9f0bc41972932b72ef34c026419b6eb54d
+# SKIP-SINGLE 63cbb54d7e163f74657dba46829262282ccda0df
+# SKIP-SINGLE 3478e64c88fe0187f49343ed778d7e9231cf5837
+# SKIP-SINGLE d1aacceae939318f419e0c265358e041c53f1eea
+# SKIP-SINGLE 164aac0a9919fb34896ddd824394a65802343a50
+# SKIP-SINGLE bf9ec3d91a79414deac039f7bf83352a9b0a9a85
+# SKIP-SINGLE dc94ca7b2b878c9a88be72fea118bf6557259ffd
+# SKIP-SINGLE 9fc1fdcbf330b0a85cd019bb75afcb8d36243524
+# SKIP-SINGLE 758753431af51f7ac79a55d426b915443e66a077
+# SKIP-SINGLE 49c748e336ee3c50e28d2aeda6396efc358d961b
+# SKIP-SINGLE 6fecf6ef2552a9b44c4311b7d5af3af0a5a54dbe
+# SKIP-SINGLE 71857d410635743d437ce1ee73dff69de50030d6
+# SKIP-SINGLE d4a6e42e92ee215659d09b0456032714aab73ca5
+# SKIP-SINGLE ceb9da3b7125fbdf0da04a3b158ac1e792c87f4f
+# SKIP-SINGLE 252d06dd5d177ad3d6d0464eb3e65dd6ce4cce79
+# SKIP-SINGLE 155dba943263236ba2c41926bae3cc45229b15bc
+# SKIP-SINGLE a602d548dfaa1dcd44c3af017ccbbcd3586ca023
+# SKIP-SINGLE dd3f6b13f673433e590c55b24232cf0a7e70de6e
+# SKIP-SINGLE c1e45419c7ad9679771718e91205502d30da6f2d
+# SKIP-SINGLE ec0527d8e9a7f12898c8fe9fdb6daec21c1d2ba8
+# SKIP-SINGLE b2164df86ba80cf4b7f3499596fbcf803395b6e7
+# SKIP-SINGLE 3d49ad73e5a93625629c96b6c0b921bb019ea9da
+# SKIP-SINGLE 89068554d7d0e9970a7269a0963e7a2bd0b1cc99
+# SKIP-SINGLE 483df14d5c4e04ff2a9fec18b68399c0ab2b56b4
+# SKIP-SINGLE 0934363c96ff774ce242b51529688bbfbb48ba02
+# SKIP-SINGLE 159dbd5eb211e36d98e200781f2eae93f0973aeb
+# SKIP-SINGLE 56254fb98c3369392dc2bd4383b7ff2ea24f2dc4
+# SKIP-SINGLE 4633e02726fbd683332eb64dee97b109aef4361f
+# SKIP-SINGLE 79eb840753edb2dd9e0bf1d4befb8e3e1275e009
+# SKIP-SINGLE aec08e609e6c672c6e85d91b84f45e38019ccc9e
+# SKIP-SINGLE 7d9d3951c6736d5606828e2727a7319856511ddb
+# SKIP-SINGLE e793a73fbea3167368bd173211c1995e07dcf913
+# SKIP-SINGLE 404023299429a2619c6e4bc5da80eb248d060ef9
+# SKIP-SINGLE 59ff342869062caba72af7834c00b36753fa7461
+# SKIP-SINGLE e4300777e8cc7559ea29faaeab6cafd3f7ebf3b7
+# SKIP-SINGLE e40f5a91eed69b5d6131671ba1699ce3ccb92f16
+# SKIP-SINGLE aa6cacd7138519aa8906c850950020d0546ae355
+# SKIP-SINGLE 2e595b3e8b887068e47e64116d5a910c1045a229
+# SKIP-SINGLE 91e7df281ee628eb56e7d016093a751f4e04366f
+# SKIP-SINGLE 0aa9f478e962e3e2d146871fa37267709404c52e
+# SKIP-SINGLE 2671ea0de8e90e20241fe0441f4f8b79eeccdb12
+# SKIP-SINGLE 958d6b4cf77af951d1ad40c02c5d5dcc28f31120
+# SKIP-SINGLE e36d3fc452735d1a1a2293e18b8e4ef944f8793d
+# SKIP-SINGLE c094b8c20a79c731cd36e86a3a6bc777606586bc
+# SKIP-SINGLE ae9bfaa891c4f3cacb118aef6e35432d5fbeb88d
+# SKIP-SINGLE 9d14e410dac11990cf0e95a1a77e83827323530d
+# SKIP-SINGLE 148b136651413d8eca0f805c786fb04b9c5878b8
+# SKIP-SINGLE 3c972723e44c9428ea990562033acfbd84ed29d9
+# SKIP-SINGLE 194c299470e087aeeff5c496c7dfc6400e1185a7
+# SKIP-SINGLE 8f5d2a3181d22f858ede3fb6a1452f99272901fe
+# SKIP-SINGLE d50e0bdbac8e6683c6af4efa172c1b801d250486
+# SKIP-SINGLE 1e8074f5ea9e61a6fba33ab2af0c79b9af7d7a24
+# SKIP-SINGLE 9e79575486fb6aeb0deb23e17cb2ce9ec02b5fd7
+# SKIP-SINGLE 3be2a6b8b4098e5cf118d196e4cba37054d8292b
+# SKIP-SINGLE 0fd79ee039de664bc06b0dbcaee786f88a2b079c
+# SKIP-SINGLE de477ec683482a5dd27d791d7fdcfc4021ed3cb7
+# SKIP-SINGLE 8df7f89af672f0592b6a31be9d1687b1369692f6
+# SKIP-SINGLE 19206fd1e764cfe89234ae9245bafa88ef1ec354
+# SKIP-SINGLE 92ffe44834b8f77ee3f4d37edfdb19f30a376869
+# SKIP-SINGLE 5e5cde55e5be6e2d388252c3ccb0d019aee6b89e
+# SKIP-SINGLE f6339412eebdc027b00263ae2b5c38a029e2f7b4
+# SKIP-SINGLE 32d12840e666d1d07c92cc31f0b12965451f7726
+# SKIP-SINGLE 895215854db66ee8017e5ad5c3215eb089d33e07
+# SKIP-SINGLE 469fe6a040d6df612c00ea169670c6d8d7e58563
+# SKIP-SINGLE 9e131f55d8d5a1eeb44e7c5a3a5e56804be60dba
+# SKIP-SINGLE 73d6b19024db10b65ba368bd079223157d73e737
+# SKIP-SINGLE f25ad39983cc3e89b007390bc0fd860f48379497
+# SKIP-SINGLE e0ca8f791c2e4396f1e40d86c136ae547b40185d
+# SKIP-SINGLE fc520f8b7090fb95e61a498b5b23be6041475bd3
+# SKIP-SINGLE cea0d61a69ef443924fdd4e4c429d7103b4acb9a
+# SKIP-SINGLE dd0727e1ec1f535b9b06be88173b4d3ccd55abcb
+# SKIP-SINGLE 3e6c69de9d1ae99ebb71eb2ed04bdb9ee42cbb80
+# SKIP-SINGLE 34e3ad5ae449f4801af09d1df89d57350d0dc579
+# SKIP-SINGLE e726a00381e0f2d8dbfa52a10c82116a8352adf0
+# SKIP-SINGLE 32b9b22f66b1afcc614d5f76860d56d5630c5bc4
+# SKIP-SINGLE 0b43e7a49327ce32c67648eb898551002f135ef5
+# SKIP-SINGLE 81b589518c2e574b084907c7d7fb8e6e5049800b
+# SKIP-SINGLE ed77d1a8c0f005d4f158b635d39db0d5d79fe1ee
+# SKIP-SINGLE bc60ce7ffdf39fc3288938337e7f6c0706b37082
+# SKIP-SINGLE 35dbc79cc3233129da90ae2f4916d73e189b63cc
+# SKIP-SINGLE 41b1d223c6ab7bca1b626a4c07a4f2dda2855feb
+# SKIP-SINGLE bf79dad3f20345ddf095325ce22c0f2a3408d3ba
+# SKIP-SINGLE c4dab6c179a78ae17d02becf66a098bd72a12233
+# SKIP-SINGLE 4c7faf33776c6566fdb374ae2b54960fc70c3228
+# SKIP-SINGLE c469efbd8361cffff72fb6a4aeaeea40c5adf110
+# SKIP-SINGLE 9ea5a915bd1b9458af1587d63170888346e8baec
+# SKIP-SINGLE a516ab79c300517d5c3ab68c45ff9c90bda6c67a
+# SKIP-SINGLE d45e72fe5a9205b2e146d27e8e26233ee8518331
+# SKIP-SINGLE aa6a05c146e94c0afc35b5354d68da55aecb2db7
+# SKIP-SINGLE e2494bdaeea309c6b270dc09beba34da5f193573
+# SKIP-SINGLE dfc7338828a8db6cf177633f942efcb0d7930aaa
+# SKIP-SINGLE 6927841ecba6494858cc3af7c0500e6cd3c4923a
+# SKIP-SINGLE 105c7562dc38de31cda6dfed00a1c260a6e72ea2
+# SKIP-SINGLE 4844aaac199de9af8da0a62b5ae92b1f5a7abb2c
+# SKIP-SINGLE 7fa11be2fae2b9fa5981e01da05cb618859d77ca
+# SKIP-SINGLE 2f6b519eaeb3be4ee6a912b40a21686be12d4d88
+# SKIP-SINGLE 3f98188b864fb4f16a7c2878a96c880ec55452dd
+# SKIP-SINGLE 7ca865dc52a31374c68dc870246353db5acc023c
+# SKIP-SINGLE 5db380abad0482ae74aa71761f0da2b2351ce97a
+# SKIP-SINGLE d353c08d2bf25ea8e42ae4664c3a276d549937b5
+# SKIP-SINGLE 20ab7e07afef7a878565bac97f63bafe5f9d6e04
+# SKIP-SINGLE 35075267a67b6474416e0e413d0d60c1f5f5fc36
+# SKIP-SINGLE d633db5189f335873a03544f9f41dcaf77c8e31d
+# SKIP-SINGLE 88e1f8b02086aaf652e3058b36b7612c073c04b3
+# SKIP-SINGLE c8ea3f09e09b18b909f5a6c5434185b8dbf2fa63
+# SKIP-SINGLE ecdda194a82c8c52bdb948160f55ebbabe733d79
+# SKIP-SINGLE 4765487d5d24fc8a2a06c329dc9cc3bed9803391
+# SKIP-SINGLE d5499e3eb2765ddf212e3f21fed7b356b8f0ec76
+# SKIP-SINGLE c274bd5c52fd64c888b1c713060da881bf72caa7
+# SKIP-SINGLE d96db7b2e8c35ec2970d12c96e2328b684626f24
+# SKIP-SINGLE 935cc42795686710f82b8928b6802f20be8f27c0
+# SKIP-SINGLE 52d5771e0a803f57b8cdd7675bf15f2f9b946039
+# SKIP-SINGLE 9e1186a73279f9e6416cc594171482be5a223820
+# SKIP-SINGLE 905fabe5904c9588bf0c5d0ae15ca0ed354b3656
+# SKIP-SINGLE ba0264e19153281bcf264e99c01c130c701151e2
+# SKIP-SINGLE c1fa5bd8ee3c7f37a9b9304eab6b522cf8718472
+# SKIP-SINGLE 4290f64dc9948264b5d9bdad2330ee15aafe6589
+# SKIP-SINGLE 5a10e6377c2b97420e5617f114bb374d67ec1a58
+# SKIP-SINGLE 2a2b3f583430df8495b566a1dfb1f41c4d61292f
+# SKIP-SINGLE 58398dea254dcfdab58d5439061a513b48cfe895
+# SKIP-SINGLE 5acf75cec1c2cef383a7c022171f5a1d195c09ca
+# SKIP-SINGLE aab5d7b3f3bb6fb82924aaabdfdd6e2a79ad3141
+# SKIP-SINGLE b3023de5431fc308e2a6db61ed4fdd18db785324
+# SKIP-SINGLE 02ae85e8aa735b0d9a312f811d03204bf8fdbd51
+# SKIP-SINGLE d1f315751d960f003317713a65cc480b3d0ee726
+# SKIP-SINGLE 760107639be7657c4a209c9c04b17c79fc19f2c6
+# SKIP-SINGLE 8b7aaf3e56c63cae7e2affc249179e5022451595
+# SKIP-SINGLE 56fb536e78f3e3019b85995ba1d788065c3ac415
+# SKIP-SINGLE 02ef00d89c64d713f29f4ed12dbcae9f8d31bb9a
+# SKIP-SINGLE 6dc4e3b95ca9589f24530979cdc83ea346d1ca45
+# SKIP-SINGLE ec464789dfc5179c72e6929ea99a72f508c562b6
+# SKIP-SINGLE 5ed566cae08d4f39920bea81fd6bf2160f38348f
+# SKIP-SINGLE be0cf9e2995df4d0ff504561afdefba00b49438f
+# SKIP-SINGLE 8c153047e78e078b2001be9cf16ef3bbaa375a39
+# SKIP-SINGLE f14f6180b78656eec2f4dad5b79eb5da20bd0b70
+# SKIP-SINGLE 3f746d44decf9f991ee2a0a0529a2bba9ad12988
+# SKIP-SINGLE a0524584e93a66278dcf7bb998398f7484f9e8b5
+# SKIP-SINGLE b2a5bf142fb25094ff623dc93d2ce916aee3d971
+# SKIP-SINGLE 2f68673a712508f70de20f485422c7e01b8ab21b
+# SKIP-SINGLE 45694a25948146e860738cb4e01de7e7e9aa91b0
+# SKIP-SINGLE 91bc24c46768aab4a851c87edaea05c7476ff779
+# SKIP-SINGLE d2e0d1452b976a51579cf044257326850804c562
+# SKIP-SINGLE 3294ad44ebcd024b4ada68d00bedca33acc52de6
+# SKIP-SINGLE 3933ece030150908c9189c11cf683bb3df9e4e18
+# SKIP-SINGLE 7fa37d7a1439bf8cd76b336ea95d3a1982b3ae03
+# SKIP-SINGLE b257a7894b6b8536ee16e6b334207c8f5c887280
+# SKIP-SINGLE cdbb02a597298b7812b456fca3d61e223dc40b7c
+# SKIP-SINGLE 41c09d347feb94b9070a9aa2c78ccf65be7fd268
+# SKIP-SINGLE c7f141d67829ccef64a5e4e961f098f09774afe2
+# SKIP-SINGLE de0b7af169345442852622bb337483398c583a9e
+# SKIP-SINGLE 6fbea946bfd0119cf517211d058ea277c9209a87
+# SKIP-SINGLE cd479aa8bd498da4d7980a7fe7a37e238761482f
+# SKIP-SINGLE 36af7004e2bf0db1d9c2fd1312215a931c1db3df
+# SKIP-SINGLE 3fd58ad37e12845fab905c00e87ae1d49755504a
+# SKIP-SINGLE 58965d91e7fb5a26a5422357f44d6e841f67db74
+# SKIP-SINGLE c50718dcfa54293b695f8a3fa5cd4d77848ee084
+# SKIP-SINGLE 5276519255c27e7dd01cbc3fea00d1c29f44d514
+# SKIP-SINGLE d9bd334ef367f3e16967ae2ed714ff419f2b5328
+# SKIP-SINGLE 3d6af11c42453065d5ace1223fe99228b7927318
+# SKIP-SINGLE b7f227ed8bece1a8fafd36ce5f0ee0d5913b6f8b
+# SKIP-SINGLE ee93a06b8b1922b31e12cfe60566779f185ddeba
+# SKIP-SINGLE db03eda6369a9d4af3c72a8ab6ec29e3cc58acc4
+# SKIP-SINGLE cdaa3b51f1500ca1d91452037efe68fa0f7808bc
+# SKIP-SINGLE c6029ed34ea83c7c0adbd723d63bd78ff0ec0796
+# SKIP-SINGLE 77882158b2aeff7f235c409d6572173ae4c3a38f
+# SKIP-SINGLE 67a218d33926931b20096edce3eaba2958283bde
+# SKIP-SINGLE d3c4833d1350e26a2ae35e00eaf2d6bef1724679
+# SKIP-SINGLE 2bab0f2db6fff3a99d3bc498d6139ee42aab96ea
+# SKIP-SINGLE 4313c695cd6370667ccf086cef0d9201fdf796ca
+# SKIP-SINGLE a25cd7f68aa5babb7cc9002d89ff02077937927b
+# SKIP-SINGLE cd41ce8c6c107901a499bf55dd2b0383befd37af
+# SKIP-SINGLE 280b8c96ccaeb95548adda78466ef2b1c3cf4546
+# SKIP-SINGLE 57a978fd74454392a041ac65a5abba8d012b88cc
+# SKIP-SINGLE fc53961c1df8bee07b6a1d461d31f449b66f1d65
+# SKIP-SINGLE 350e97d78e7803650c6dd2bf46fcfece8e2b4b32
+# SKIP-SINGLE 304e2a3a05feee6578aadfa0228dde734fe850cf
+# SKIP-SINGLE 874e2525035d45efa6fa374a2ebec3740ecc1457
+# SKIP-SINGLE e2df22fa016247dccc632b2cb4fc5b8ffb4c3c7c
+# SKIP-SINGLE 0069085be2d0e6c7d439372b06b866df4c669891
+# SKIP-SINGLE 72278f21e0ef0c79f756bca08577297d11e22518
+# SKIP-SINGLE 616da8fa8efa9023f56fa731072d877e2150afbc
+# SKIP-SINGLE 51f8e86374a57efe5b8e5c31d96078e63c023da4
+# SKIP-SINGLE a29a3ad55d650af6230e2cfe8ef1ef45b5feb133
+# SKIP-SINGLE 7a9f8ed6fba0d6728cbf185696bdc1a95b1acfea
+# SKIP-SINGLE 7f298bab5234073b1565a7008f63b89979a925d4
+# SKIP-SINGLE ad1baff0a12cb22c5c515e0ba3ed29d4b876451b
+# SKIP-SINGLE fe82c0743b3feecb9b80549ef4bb3dc8529891a8
+# SKIP-SINGLE 89c589bae47fa7faa7273a9df0f4be836e9da29b
+# SKIP-SINGLE 6d8638e5e494fb0ceafffe19bbf349fff643e12d
+# SKIP-SINGLE e89532c7c7c5098a77f3ec6fb5def98b1f9034a2
+# SKIP-SINGLE 15a9e73a1793a61b87d3f460e2e4bc5b7df1e6a8
+# SKIP-SINGLE 4e091c8ddf6bf421a4dd0210a3a4b77a3ecf24f5
+# SKIP-SINGLE e2b774e64a903e856356971c0fc3a3835d3883c1
+# SKIP-SINGLE 82b602dc2f52775a4082d24d64380867da051350
+# SKIP-SINGLE 8ae173a8373c12f17acc9d7b22910cd106c12b4b
+# SKIP-SINGLE cfb295f1e55e4d04beaad5d57ede494c436cf277
+# SKIP-SINGLE 9a9634dc725278a6a676fa4590f53543cada34b2
+# SKIP-SINGLE fdbe3362c5a72be7d4c930a614fe5853bf6eff1f
+# SKIP-SINGLE 72c7ee2e525d87b58a28aea8af8cef31f607d7c0
+# SKIP-SINGLE 85f1ad0c798b5556c37185f4930929d5aa386a5e
+# SKIP-SINGLE e1553142fefaf39d4742d1a161de2bce691204b2
+# SKIP-SINGLE 39aa623479128b465b01490845f0781c03eece8d
+# SKIP-SINGLE 286e308561d00a31e0321919ef36d9bc6dadbeb3
+# SKIP-SINGLE 8af91dee9a9031ac0d49848b16bd288685f1f370
+# SKIP-SINGLE 8783700b23e70874c4996908bf02c010ae6f3fe1
+# SKIP-SINGLE 344b48f490416cb1200e19b28d356e7fb5b04387
+# SKIP-SINGLE 409327ff68f9ccdc8099f6a2ba2fee76abaaab70
+# SKIP-SINGLE f25f4699d760c5409a1571dcfdf4ed0fdac9e0ec
+# SKIP-SINGLE 5cceb6d6acf6299f1347133aec7097b8771ff952
+# SKIP-SINGLE f5f296b0800de4cd459e41b4a7b1cb97673e8dbb
+# SKIP-SINGLE 9aef9e2cb6b547f62911d06e90081af32134de66
+# SKIP-SINGLE 43e9c8e9d28dcb659a43e58778e2745d1279051f
+# SKIP-SINGLE fbf2bfba0770b7f575d8ef06ca3a08cf1a38cc2d
+# SKIP-SINGLE 7ca456da7f72feeeec571ece3c373e2b3a3d327b
+# SKIP-SINGLE 0e7361a5ccce084613d54d6ba3954ffca6074817
+# SKIP-SINGLE 2a9797b422fe8a28bfaab49974ea2be21ae2502e
+# SKIP-SINGLE 5d73bc5c69f56ce1b22c950d19ef6406b662949f
+# SKIP-SINGLE 16986a9cc42ef4de580456f4acc5feba682ac8b1
+# SKIP-SINGLE 2d2cdb4741a3c1e42c8ed771303a878fd428911b
+# SKIP-SINGLE 4725c123f33eb9579b695748fa9f85c9af3eb01a
+# SKIP-SINGLE 0c7024d0d9172322052de2ee571ba64afff905f0
+# SKIP-SINGLE 20d44771201ef96fcfd6aebffe05aa50c5fa8074
+# SKIP-SINGLE 7a551e92005dc9964c1a74a2896b5dbf0ca231b9
+# SKIP-SINGLE c681f374788235cbaf1dca062450202e90fd2a86
+# SKIP-SINGLE b92a5174939fba17ffb5235dd926c7063c13b1d1
+# SKIP-SINGLE 6cabef8799eb053c593f0a5241503ccbfb616c8a
+# SKIP-SINGLE 3e5856b21a83a52dda8c0b3ab541d106d809d625
+# SKIP-SINGLE 86581698acc1a0991592e018c1ba749f3ded21be
+# SKIP-SINGLE baa39e48495e100af6704af9287b544e612c245a
+# SKIP-SINGLE 9c67e8e56d40926454e00b5652c2b519ae0b507b
+# SKIP-SINGLE e961a31507e6fba86a5d45fec7fa616e80028882
+# SKIP-SINGLE 65456668ab1048fe8d77dc76a9e4d84481c218a5
+# SKIP-SINGLE c96157c8f8290bc2049dc947b6d264564659a545
+# SKIP-SINGLE a7ed5071b70f07da4c99198126c48cc6b448090a
+# SKIP-SINGLE 1e624452004e17bec2070b0c0b9f5639f66df1f8
+# SKIP-SINGLE 3f25b22cadc9f73583e83b00f828ee00efa8764e
+# SKIP-SINGLE 938e68bb280c96eaf163bd932ab2582fbe27e780
+# SKIP-SINGLE 3069849bd4c1048a8f8c0467d26560fad939e791
+# SKIP-SINGLE d45253996670509e668d266d577f48deb9c7018f
+# SKIP-SINGLE 43f25120c9a2578df3df47491ed68a0566ff6f61
+# SKIP-SINGLE 9d266f2a6c0e51f184d55c8bba4551abdeca02bc
+# SKIP-SINGLE 76eb88df0243dd15492e71f068fd476be8efc800
+# SKIP-SINGLE 32870d2f207536bb7932beeb2e0ec9a4e0146560
+# SKIP-SINGLE 625ea08652053617034bf8ceee0d6cfae34f2dcc
+# SKIP-SINGLE 657947dc7cf01a13a4fa260691a6fa0147107950
+# SKIP-SINGLE 4fa13b2d838e11cbe3b713f3172721cb61d499f3
+# SKIP-SINGLE f17ca55a0a3c9de1061285763cbf0bd3754f6718
+# SKIP-SINGLE 4c5f1737c4815bd6d167108343a61da9a3882f32
+# SKIP-SINGLE ac9bc819bc438f21bd38a995812d756727ed8e2a
+# SKIP-SINGLE 7d7e9ef46a1b310fb3f481cdf8023082f5ec1618
+# SKIP-SINGLE d6362b632e3c76cb55a05248aa221e426c5adb5a
+# SKIP-SINGLE 00df4566af9dff0a27fd6da566ef1e53268a6d47
+# SKIP-SINGLE 655957087c8654577e7c59004f16be7abcc2c46c
+# SKIP-SINGLE e41af3971de8f71b5241698a8b29349905f1a969
+# SKIP-SINGLE 59eaa30b07e9a79a9b2bb6ade0be9aac846384e2
+# SKIP-SINGLE 5d77eb4b7c00d0652b190166c393efa16d0775a9
+# SKIP-SINGLE c6384e9bfbc765229ea9676ba1044b9db28fec2d
+# SKIP-SINGLE 409f0430b6a0c138836e5067141bf6b2a7beb6b3
+# SKIP-SINGLE 2f03053e568f38a1dce5ffe02ad1359069ef84c8
+# SKIP-SINGLE d5c6d69b4fea2d5a1167a0bcc0b9994a5939b97e
+# SKIP-SINGLE 28490cd65ba50ce4e1f411556e1faa36f1db84ec
+# SKIP-SINGLE d06127e5736b0564daf99a41c77c8c23d394e759
+# SKIP-SINGLE b440fa0a6b48a95323fa922b88e9a9a73d6c6360
+# SKIP-SINGLE 62e37ecc4020b3a5b18cfdcff9a7cb259fd8145a
+# SKIP-SINGLE ddbc33343cca8c66d841cc16eac77ea626e50e23
+# SKIP-SINGLE 902649a170ab651cffe2bbb421e1331b23c7ed01
+# SKIP-SINGLE 7bc615fd23c1304f8682f2443db235fbc37bfde9
+# SKIP-SINGLE 7f57d80846b5f674c49a717d6fc086c14f506415
+# SKIP-SINGLE 639821d49ab9497908d8d3bcd472aed558c251e1
+# SKIP-SINGLE 75b65b3f67eb9a4e5722780cb915b880e667d674
+# SKIP-SINGLE 306e49285a04c02f0a575a7d7b2f82eeb032c86b
+# SKIP-SINGLE d1ef0243eb6e7cd9720236eb0e900fe7163b3c2b
+# SKIP-SINGLE 162c3da7a0ae4cb5e1b0e34731621ec13ac01e43
+# SKIP-SINGLE ab70ab19be64902123b0e2c08191d5ebf70feb62
+# SKIP-SINGLE 8175497ccac1b3afc2208260be91423e2bca2d25
+# SKIP-SINGLE 63f8a838eccf201d6290d0dc8f83881f41785afb
+# SKIP-SINGLE e0760599b045a7ef3828ae4b624246b6beec2e75
+# SKIP-SINGLE 34e50dc4a23505dce0499f120477e2e1a1327432
+# SKIP-SINGLE 06db8015ea05cc17efb16684de23533ee315be61
+# SKIP-SINGLE ecb216fd93dc959bda283d27d759b253ee0e2798
+# SKIP-SINGLE 0d195584f20bba1c1de165fbc4162417737755c4
+# SKIP-SINGLE 829c7e3566ed425c0204067c654a58970af6d4fe
+# SKIP-SINGLE 7e9c2e295283b4dcf4f88cf25a094e37731543fc
+# SKIP-SINGLE 3a0c94ac0b5d5098f9140c5ab4231d6dd06ec393
+# SKIP-SINGLE 3a5c4bdc0c079f72bad98e01f70343ba9e9b0043
+# SKIP-SINGLE 908aab6144bf9f62dd5b2c2f1776ed177fa6d18f
+# SKIP-SINGLE c78dc25a5351b1a4191028ba252c892ae1dd2438
+# SKIP-SINGLE 67f9705fc0fc5ecc91172ab02df8c1f31fe654e2
+# SKIP-SINGLE 25c6bc7a3d3679b26406bbcac33954186db491f2
+# SKIP-SINGLE faf44e2c61734cfe2422498ed27b4f645635120d
+# SKIP-SINGLE e333f040e9f68bdce2b5735b4b9dd68944199056
+# SKIP-SINGLE 5cd3db73bed06e394ea8e7b0e332b1b1e5bd9571
+# SKIP-SINGLE 4489450f37deafb013b1f0fc00c89f0973fda14a
+# SKIP-SINGLE 98ed6db34f76cfe37d70d8ad82d29fcfa2a56e24
+# SKIP-SINGLE 2ec403f777adf39d3e972667513086f2053530dd
+# SKIP-SINGLE c5e3b99467dd07522f9522cc77cddbaa69222a7b
+# SKIP-SINGLE ab4edbf60eca767775e18d8d0e318c28a74792b3
+# SKIP-SINGLE a5a047a07f2d4f98fc67b40eb1f1a1d711905381
+# SKIP-SINGLE f5084ed197cfea8387ffa7dd72b72933905fe699
+# SKIP-SINGLE e06953b02a0e7b26b33c511a22896d0db4e5d63d
+# SKIP-SINGLE 77cb95c851edc338c94cb35effdc8c9ffc64a461
+# SKIP-SINGLE eecc2d45b94513ba95789dfe0ef58aeb8b029049
+# SKIP-SINGLE 663d768d44be150439a58cd858615cac3c1f572f
+# SKIP-SINGLE 838fc77254286de318b65602b31c6d3915594a8e
+# SKIP-SINGLE a7042fa051c69b8c647fce3ec52b74974b5ea2be
+# SKIP-SINGLE 2332c3eb55b2c8541ea83d4a847c56f888239f6a
+# SKIP-SINGLE 077c66405261381704da33e6858f4b6639763f5a
+# SKIP-SINGLE 2b4d46f99be3735823666c2a6d9f058cedeb031c
+# SKIP-SINGLE 5858921f409f6ee9d2e08dbdcd1719969a4f5544
+# SKIP-SINGLE 29418f954eb114bf3c108b6e03569036f854ae45
+# SKIP-SINGLE 07292b1344549a164eff9d548f819235a14a0b4e
+# SKIP-SINGLE 1bed1f0b8e9095d66f905ed7b409a397f1972262
+# SKIP-SINGLE 98f5b74808a54ad9093888b72b2c04e085f4b369
+# SKIP-SINGLE 1ae314dfda1a7746fb31957ac3eedefd70b3c1fe
+# SKIP-SINGLE 488a6efe323927a4064afc193b66cd11e2caf77c
+# SKIP-SINGLE 9fbbb2355298f75e8fd09b35306e843ce45b9e25
+# SKIP-SINGLE 076a25810127cb8c56ff0f5272a3d8b98192ee77
+# SKIP-SINGLE f847ecc40bc768d97ba57083fd669ca0104e500f
+# SKIP-SINGLE b471f7f6141b3db8fb00f62f12900846f59beb9a
+# SKIP-SINGLE 5fbb7a126d19b41848b57e7e012619fa13cfa4d2
+# SKIP-SINGLE d4e8c90b66b4aba66ff1a12a0894a33af91feb0e
+# SKIP-SINGLE 243ee7b244797aae460b9e2a7224f75599f3a9b8
+# SKIP-SINGLE 951dd2a4d98aafe88bf2c6c2f86901230e3f0cd2
+# SKIP-SINGLE c924b6afb6810d6b9585092fc5693e3c9efcd1cf
+# SKIP-SINGLE ce9e7204138261f71d0e1636036727d8b05ac81e
+# SKIP-SINGLE e0e3299c01d3ad7236a7a950f43f54a1bff548d8
+# SKIP-SINGLE 784f53a2152181b687f9543ddba9c393dda1c715
+# SKIP-SINGLE 673a55780d2194f74c5774de83d0dce5131e7a31
+# SKIP-SINGLE 8ad4c4009e1c7360df6f59175b1a701d7f4ecfae
+# SKIP-SINGLE d9d66764e2a02db9f19f5c76ce34ac7d8bc1edc6
+# SKIP-SINGLE f6dc55f516a88765bbd8b8c34f0ec663b8948373
+# SKIP-SINGLE b86deb617b109bcb40e9c95b10a033a209c1d8fd
+# SKIP-SINGLE c5f24f76eb1653d64c2ae90764e395cf6e050657
+# SKIP-SINGLE b028d4f7dfbd72790679423a8dcce9994b07834d
+# SKIP-SINGLE e3663d0e9c6ec32a70226947767850924b90bba7
+# SKIP-SINGLE f9f9b43df5bdadb54a1ba14e1624aa254d9f092d
+# SKIP-SINGLE 5416ae5990337f5fb2b3e0fbf9c4575508da808e
+# SKIP-SINGLE 99096528494a653d1ee9d7832ee3956a613aeb95
+# SKIP-SINGLE 6b91ea5a6159791d1d1e5006f8cbc384c0da1701
+# SKIP-SINGLE bd8e19e1e2ccfb76c1fccc4dff1f8774185cfea4
+# SKIP-SINGLE 88d54756d46101b97b7fde97b4bc3b62f7bd6c06
+# SKIP-SINGLE 32e87f09c8c2711c421363d0361693dcfbe5a688
+# SKIP-SINGLE 69ab588bb54178df0d3be6b4c04dabb49f5a2ac9
+# SKIP-SINGLE f331be1f074d68e7e5cdbac324419e07c186492a
+# SKIP-SINGLE 040991a4697b50ebcb54e498e7de54b8d0885101
+# SKIP-SINGLE 5070278539a8e47988cd9529c9c2e4ada8c92472
+# SKIP-SINGLE 0be9a639fca70c278d1b79fcea5d6beebdf7799c
+# SKIP-SINGLE 31f75430999b9021fc68739af231261608aac255
+# SKIP-SINGLE 77f1533ccbba1a5dc0824770046696181a2b7b6c
+# SKIP-SINGLE 57e37e9128b4f6f9a2aae0bc25de6c208d58e5d0
+# SKIP-SINGLE c6dce90d7e57486db687606bffd92d580a7d25ca
+# SKIP-SINGLE c88a1631e3f76926bf0fed49fa1b704d6eaf2155
+# SKIP-SINGLE 8607f018fd8bef7443415ff2e356d035843ad828
+# SKIP-SINGLE 1cd42bfb8a5ff2aade43f31b864a8d2cd643d5a3
+# SKIP-SINGLE f0e9085a17be8866c123b120e3252c52845ec38e
+# SKIP-SINGLE 9d3f8912b431ed5540d9d06d85b7e338732268c9
+# SKIP-SINGLE c8909fa3688aca164e4fd38f6293c4a201e148eb
+# SKIP-SINGLE 10f96a8c57b031b521ae8ba5a02413b94ece423b
+# SKIP-SINGLE c2ecb08775dc24618de507d2d1ce0f9b0debe17e
+# SKIP-SINGLE cb183f6467401fb5ed2b7fc98ca75be9d943cbe3
+# SKIP-SINGLE 76b86d98534da2c9e6cf8fd1c7edcbe53d84eb82
+# SKIP-SINGLE 85073998cb47567cb30fb41f12135bd799ad2588
+# SKIP-SINGLE f1e058d46b5a83ddd0423a3616aa50ac3ec7f551
+# SKIP-SINGLE f46eb3d3ca759ab3944cedda1339a6d1760298cd
+# SKIP-SINGLE 9fab83ed7a90209e3873039e7ae4993c667e2759
+# SKIP-SINGLE c957832cbf3e87e5a25f7c2bdb70abd959391d98
+# SKIP-SINGLE e5043db2f1f3d0ce6618eb45419e85f0d58fbf19
+# SKIP-SINGLE e8df6c311fcf59bf23d31b9db2bb8fec9d78fbe7
+# SKIP-SINGLE da87895df2d6b21468b187f5a4e2ca8710e35ee7
+# SKIP-SINGLE 6203b9db347d2d002c0cb660d5b4daeea54bf3ad
+# SKIP-SINGLE f6e92035a7c3c29aa980e1bebf9c48f1bb7264d8
+# SKIP-SINGLE 7ebbd4efc3d45403cf845d35c36c21756baeeba8
+# SKIP-SINGLE b584569014abb1fe9f59decd86ea097a189d9bb5
+# SKIP-SINGLE 17422c2cfcbf1670ba4dbe3ecdf3c5ff719201cc
+# SKIP-SINGLE 2349ecb3216bb9f7808ac58e5ce6abd6bcf90387
+# SKIP-SINGLE 6fb6cb075f05629a562275064851bef6b72d5dd2
+# SKIP-SINGLE 6a2399c55e9505be06cb98ffbe1a3878f9e96fb2
+# SKIP-SINGLE 4ba76224eaf5fade94438bf990bf5eb05912b530
+# SKIP-SINGLE 77e6a704ac819580b81400ff1d8503d142cb3905
+# SKIP-SINGLE 524d10c86b539ef6fe27f31ed3df2590d1849a83
+# SKIP-SINGLE baacad1771e3551ffdb1b88c41224fa1957e766c
+# SKIP-SINGLE 9ed53535f5543910f746662618927052dd718991
+# SKIP-SINGLE f6483526cd4b4b9ed7d830599add82ecb45009e6
+# SKIP-SINGLE c4122067d90857594508f6c00e8af87d91ddb7d4
+# SKIP-SINGLE 1bb7b43e1cfb911737bc4807671910238277470f
+# SKIP-SINGLE 5532ae81cff138a2f6d30c3541210311a4894ac1
+# SKIP-SINGLE ccd2509ed31f953408240357e9b84c3d3b3f6a2b
+# SKIP-SINGLE bc66ff98756fa28bbc733ef81103cac6730438fa
+# SKIP-SINGLE 9b5ecffeb00f22ca6663aa14e7807c9886ed1716
+# SKIP-SINGLE bb8376145abadd901b0d8f7f586bef658e2b333c
+# SKIP-SINGLE 092776c7ebf20b4d1208a0e0d860a1f3abd7d119
+# SKIP-SINGLE 434fc2a22e4fd65fd63018e9373cbf56b51f8ab2
+# SKIP-SINGLE 591759d508024a666a863cf918287744e72b1267
+# SKIP-SINGLE 75c8cc5eab51d1080424687167fec4feb34f68c1
+# SKIP-SINGLE f6e3de3f63616d7bd52c1390f9dea70fa33e49c2
+# SKIP-SINGLE bb8a46e559ec39437a1524b3e9746746768effcc
+# SKIP-SINGLE 52c8fdde1667ac4b5d7f2af5eff94d6512d83caa
+# SKIP-SINGLE 8bc6e31502244ca16bbf7b163a7a321ec9094882
+# SKIP-SINGLE 3a4406975338eb6dad9327b5d17f67a677114e6a
+# SKIP-SINGLE 02f78c09b0a97ba044a43682a366a9d7732b885d
+# SKIP-SINGLE 954b6e1dc3edb6a8260be810c3f02c335e90b6b8
+# SKIP-SINGLE 79ee266f13fa5c657b24dc45d5f573c393a671b6
+# SKIP-SINGLE c4179117afd37a03a7ba322e66b5bd6bae5637bd
+# SKIP-SINGLE 45b8204e09b7d399b792bb26c799efe48835c4a7
+# SKIP-SINGLE 2a762336da4d886a4f1b3ee463fd66393d739309
+# SKIP-SINGLE e45d8dbeea488ac14fe486e5582266980d29e82c
+# SKIP-SINGLE 253126bf339a16589e86acd51c0f96da07e658d9
+# SKIP-SINGLE e868955bff3b97bad88bd09b4401e87cab94011c
+# SKIP-SINGLE 6e60d464188994bdce97f1aef3b81fae3fd28583
+# SKIP-SINGLE 5868580e94ed93ce4f0ec88b03b232f5cd29178d
+# SKIP-SINGLE 18947103fabf8070738b3bd9c5a8d02f90988a3d
+# SKIP-SINGLE 3114eb807864e19cd8ffdc5d8f8e11366a619769
+# SKIP-SINGLE c352392420236d4fa7a8ac7f324f1a0358ad3584
+# SKIP-SINGLE a915d836fce238cd57233f67e8d2451a26d2fb6b
+# SKIP-SINGLE 5c1b9e65b9d1c73ccc4ce18842d10bc507cdee38
+# SKIP-SINGLE 57b904f4bab7aea7ddb9d3b36229008a47b32ff1
+# SKIP-SINGLE 2f6b017e3dc646d317b56fb453c90aaa44c27089
+# SKIP-SINGLE fa9bede36c18d063f6f599e102cd42f9d0afc071
+# SKIP-SINGLE 0c7a7df98e1fb0bc156707b379e4147fac97359a
+# SKIP-SINGLE 0480e9c445d59fd5ec9b38ebe3919fee2aabf8d2
+# SKIP-SINGLE 5a2c1a743b54f7d3355f9b1dc893bbe72e8df6bc
+# SKIP-SINGLE 629f222ba2abf5a149c381e27c89e88963f7466d
+# SKIP-SINGLE ef6e18a6b9ab103f3f076b35100d09cff1687396
+# SKIP-SINGLE 9e339415b4c068242e7cd785d2ac95420f1934ba
+# SKIP-SINGLE 8c385f05120bdf905a027fe99eab23a59d0f837e
+# SKIP-SINGLE c4ad36cd2daab764649db451c4a3f1a35c5f519a
+# SKIP-SINGLE b755f45f65090665dd40ed0f0dc4eb6f9e4923a0
+# SKIP-SINGLE 1ea503ed4b3a14b3dc0a597cfbfe57d73b871422
+# SKIP-SINGLE eba65824364474bde89bdce5f57a772d74a2c409
+# SKIP-SINGLE 17b65f52921b6a9314a2709f0e5c3ef88b37f2ab
+# SKIP-SINGLE 170924e945f4cceda12b5e1681391c3b828a3dec
+# SKIP-SINGLE cea1e95d386270e1e682719232f2cfad384fab91
+# SKIP-SINGLE b341864d9002fd081a8a6dfeb5a5a00373738a2f
+# SKIP-SINGLE 6cf2a9c55dbf8dfbc93409340065cf02881502b1
+# SKIP-SINGLE 50e33639fe190f0a1c47b8e4c0fcc4735cb60909
+# SKIP-SINGLE af288d813b3c31a528ddcbdce08f497855a56e94
+# SKIP-SINGLE 007d8c485906be46d40e74ddb8046e065c722786
+# SKIP-SINGLE 08a1c32d0bcaa9369a34e7f7d6d01c3885f62e21
+# SKIP-SINGLE ceb9591e5dcb5264573371a573433fd76320954e
+# SKIP-SINGLE 1787e651d376486909e736478b1be92c949a368d
+# SKIP-SINGLE 734df28368c7f7c21b1068a67d4ae89e64d4a3d3
+# SKIP-SINGLE c5147882a91e51b59c7da035e9ef38a4731b943d
+# SKIP-SINGLE 6b475da972d7e2ff7a2a3cafc1aea2a4937e64e9
+# SKIP-SINGLE 7e36fd64d2ce06b821e0f57f6d850ff4386608bf
+# SKIP-SINGLE c120b0ebdb20cfff73dd1d43541f1ba1bbc54b74
+# SKIP-SINGLE 0b3f785c4a272b909108108cf7931779ae48cfba
+# SKIP-SINGLE f071e61d106e6f3c17b660e3aa1a5b7890ea5d41
+# SKIP-SINGLE 6a3caeab580f61f88c4ad49ff32cdf74eea4fb97
+# SKIP-SINGLE 06b5ec4bbde119d14d866fc3713a4ed390d531f2
+# SKIP-SINGLE 795e01ac248d389a581589b13a02465a2f99202f
+# SKIP-SINGLE aaaa4ca77e440499ec852069efaea42410ebe30b
+# SKIP-SINGLE 6f28810f6ba112059c09bc3bfbb2ef8e5c3f15ee
+# SKIP-SINGLE 773cce640fc5d67cb1a64622defa073d7ec5fcc4
+# SKIP-SINGLE 260e47e9a3c9b3baecef81e69c218989dc0cd7a4
+# SKIP-SINGLE e504eabe88727141e70ae9793be71d4285f839a5
+# SKIP-SINGLE eeeae5e9ee34da5539046ff8dac4f4fffa19a5b9
+# SKIP-SINGLE 861e1fb595eb1f01ca5c137fb4830695f9c1e7d2
+# SKIP-SINGLE 7c5d4348330b206aff1f8e5bc4fd241d6a6dc0b5
+# SKIP-SINGLE 1575ee2eeb1ebb5b73b4b76fc7dc7f5702748540
+# SKIP-SINGLE ce5ae0117e3ea009ccdd8d8f4c1365301d24f90b
+# SKIP-SINGLE 851a8f65e9a6b00b51f6a41f4c8f2ec2a797862b
+# SKIP-SINGLE 5159789e55d64c7482dff3dc1a621d01f530f83c
+# SKIP-SINGLE 25cb49ad565c764c390a411661088970db1f2b22
+# SKIP-SINGLE 9c4dddad456e23892a80303da26774a13250b647
+# SKIP-SINGLE 4c328daf0130fc139e827a8a8d6689e2b15c73ea
+# SKIP-SINGLE 1ee7c3041ac84b6c6f3f4f5275c417d91727312e
+# SKIP-SINGLE c9df4cace0f88197e69ae45d18bfc1692eecca05
+# SKIP-SINGLE b49250ada978c7b21cb93177c874c81a27fa4fec
+# SKIP-SINGLE 377ee8158b2fab3efccb4e9b262e6129b51e28f8
+# SKIP-SINGLE bd13ce184bfaf43f905faff64c5306ff3518f892
+# SKIP-SINGLE 914f68da059d5aeed3459e3944769aa4370a4075
+# SKIP-SINGLE e7b09065dae0aa8018c959ad3c69626bbcce8f17
+# SKIP-SINGLE 9f7c359f4023570616c9961487069ba1122a5bb0
+# SKIP-SINGLE a3651d3237e91f788211e507d61c2dcf886c185f
+# SKIP-SINGLE 62c8c8e51a23540cd189d6b2a22dd1a1cdbbf2cb
+# SKIP-SINGLE 7a4380b9051ddd0bcc4d5c90abe0f826a9b922dc
+# SKIP-SINGLE 23bb724c922de95573f73b22ae311696ae08464e
+# SKIP-SINGLE ddae8d4a13d58720a3118355fabc225a9d907160
+# SKIP-SINGLE a31538ea5b006c3901ab85354725993b689a259d
+# SKIP-SINGLE 1cdb24fe35a9ff2e4f92c5acc93a5a5b0e70d93f
+# SKIP-SINGLE 7c750343be6309a78d3fd289959bca241d9daf5d
+# SKIP-SINGLE bde8e87cb7b3be0e0bc9e72c3634f108570cac3e
+# SKIP-SINGLE 013c7d6aaef5f90730b1cfe42a01534d891e895a
+# SKIP-SINGLE 85d0c11119fbd14d508d228f5edf4cf53fb4e4cb
+# SKIP-SINGLE 53584db07ed3411d659678425c4481997e56c834
+# SKIP-SINGLE bb0a427e9d3c29c17c1b03773697989328f53056
+# SKIP-SINGLE 4ef50ccd3f8bc177ef6dd7183a9268bb8057f064
+# SKIP-SINGLE 285f8c7cfecee0c91568cd850139c48ec3f21a28
+# SKIP-SINGLE 96d44c4321724556819e2f718f1d94470d753d07
+# SKIP-SINGLE 1f74e9112e28faa57a7bf56547a9ebf8f6618273
+# SKIP-SINGLE 3a784d1321487be4031555d19ace635598bba21c
+# 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..a172fa2bc9b 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>
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/make-tarball.txt b/admin/make-tarball.txt
index d881b816125..45da3ed6be5 100644
--- a/admin/make-tarball.txt
+++ b/admin/make-tarball.txt
@@ -150,6 +150,12 @@ General steps (for each step, check for possible errors):
4. autoreconf -i -I m4 --force
make bootstrap
+ ./admin/check-man-pages
+
+ The above script checks for any mistakes in the source text of
+ manual pages. Fix any errors and re-run the script to verify.
+ Then do this:
+
make -C etc/refcards
make -C etc/refcards clean
diff --git a/admin/merge-gnulib b/admin/merge-gnulib
index d3c5520ad0f..6aa52bc7539 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/git-workflow b/admin/notes/git-workflow
index 265a106bad5..717fc550776 100644
--- a/admin/notes/git-workflow
+++ b/admin/notes/git-workflow
@@ -70,7 +70,7 @@ commit 958b768a6534ae6e77a8547a56fc31b46b63710b
cd ~/emacs/emacs-28
git cherry-pick -xe 958b768a6534ae6e77a8547a56fc31b46b63710b
-and add "Backport:" to the commit string. Then
+and optionally add "Backport:" to the commit string. Then
git push
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/repo b/admin/notes/repo
index 97f02ab6056..2be707db27f 100644
--- a/admin/notes/repo
+++ b/admin/notes/repo
@@ -129,8 +129,12 @@ This is a semi-automated way to find the revision that introduced a bug.
Browse 'git help bisect' for technical instructions.
It is recommended to start a bisection with the admin/git-bisect-start
-script. This script prunes the branches that are the result of
-merging external trees into the Emacs repository.
+script. Using that script ensures that commits in branches that are
+the result of merging external trees into the Emacs repository, as
+well as certain commits on which Emacs fails to build, are skipped
+during the bisection process. That script can also be executed
+automatically when 'git bisect start' is called, with the help of a
+wrapper script that is included in its commentary section.
* Maintaining ChangeLog history
diff --git a/admin/notes/tree-sitter/build-module/batch.sh b/admin/notes/tree-sitter/build-module/batch.sh
index deed18978a1..58272c74549 100755
--- a/admin/notes/tree-sitter/build-module/batch.sh
+++ b/admin/notes/tree-sitter/build-module/batch.sh
@@ -1,17 +1,24 @@
#!/bin/bash
languages=(
+ 'bash'
'c'
+ 'cmake'
'cpp'
'css'
'c-sharp'
+ 'dockerfile'
'go'
+ 'go-mod'
'html'
'javascript'
'json'
'python'
'rust'
+ 'toml'
+ 'tsx'
'typescript'
+ 'yaml'
)
for language in "${languages[@]}"
diff --git a/admin/notes/tree-sitter/build-module/build.sh b/admin/notes/tree-sitter/build-module/build.sh
index 102ab310fa0..f0962940287 100755
--- a/admin/notes/tree-sitter/build-module/build.sh
+++ b/admin/notes/tree-sitter/build-module/build.sh
@@ -1,6 +1,7 @@
#!/bin/bash
lang=$1
+topdir="$PWD"
if [ $(uname) == "Darwin" ]
then
@@ -11,25 +12,49 @@ fi
echo "Building ${lang}"
-# Retrieve sources.
-git clone "https://github.com/tree-sitter/tree-sitter-${lang}.git" \
+### Retrieve sources
+
+org="tree-sitter"
+repo="tree-sitter-${lang}"
+sourcedir="tree-sitter-${lang}/src"
+grammardir="tree-sitter-${lang}"
+
+case "${lang}" in
+ "dockerfile")
+ org="camdencheek"
+ ;;
+ "cmake")
+ org="uyha"
+ ;;
+ "go-mod")
+ # The parser is called "gomod".
+ lang="gomod"
+ org="camdencheek"
+ ;;
+ "typescript")
+ sourcedir="tree-sitter-typescript/typescript/src"
+ grammardir="tree-sitter-typescript/typescript"
+ ;;
+ "tsx")
+ repo="tree-sitter-typescript"
+ sourcedir="tree-sitter-typescript/tsx/src"
+ grammardir="tree-sitter-typescript/tsx"
+ ;;
+ "yaml")
+ org="ikatyang"
+ ;;
+esac
+
+git clone "https://github.com/${org}/${repo}.git" \
--depth 1 --quiet
-if [ "${lang}" == "typescript" ]
-then
- lang="typescript/tsx"
-fi
-cp tree-sitter-lang.in "tree-sitter-${lang}/src"
-cp emacs-module.h "tree-sitter-${lang}/src"
-cp "tree-sitter-${lang}/grammar.js" "tree-sitter-${lang}/src"
-cd "tree-sitter-${lang}/src"
+cp "${grammardir}"/grammar.js "${sourcedir}"
+# We have to go into the source directory to compile, because some
+# C files refer to files like "../../common/scanner.h".
+cd "${sourcedir}"
-if [ "${lang}" == "typescript/tsx" ]
-then
- lang="tsx"
-fi
+### Build
-# Build.
-cc -c -I. parser.c
+cc -fPIC -c -I. parser.c
# Compile scanner.c.
if test -f scanner.c
then
@@ -48,15 +73,9 @@ else
cc -fPIC -shared *.o -o "libtree-sitter-${lang}.${soext}"
fi
-# Copy out.
-
-if [ "${lang}" == "typescript" ]
-then
- cp "libtree-sitter-${lang}.${soext}" ..
- cd ..
-fi
+### Copy out
-mkdir -p ../../dist
-cp "libtree-sitter-${lang}.${soext}" ../../dist
-cd ../../
-rm -rf "tree-sitter-${lang}"
+mkdir -p "${topdir}/dist"
+cp "libtree-sitter-${lang}.${soext}" "${topdir}/dist"
+cd "${topdir}"
+rm -rf "${repo}"
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/tree-sitter/starter-guide b/admin/notes/tree-sitter/starter-guide
index 123dabd9f29..a6a4c647f23 100644
--- a/admin/notes/tree-sitter/starter-guide
+++ b/admin/notes/tree-sitter/starter-guide
@@ -282,7 +282,7 @@ For MATHCER we have
NODE-INDEX-MIN NODE-INDEX-MAX)
=> checks everything. If an argument is nil, don’t match that. Eg,
- (match nil nil TYPE) is the same as (parent-is TYPE)
+ (match nil TYPE) is the same as (parent-is TYPE)
For ANCHOR we have
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 b844c6bc730..645082c9746 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
@@ -3220,6 +3220,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
@@ -3245,6 +3246,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=
@@ -4154,7 +4156,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}"
@@ -5247,6 +5248,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;
@@ -5998,7 +6000,7 @@ case $opsys in
gnu-linux | gnu-kfreebsd )
AC_DEFINE([USG], [])
AC_DEFINE([GNU_LINUX], [],
- [Define if ths system is compatible with GNU/Linux.])
+ [Define if this system is compatible with GNU/Linux.])
;;
hpux*)
@@ -6136,7 +6138,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..6d666831612 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
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 1457a8bc3a3..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
@@ -154,7 +154,7 @@ titlebar.
@vindex ns-confirm-quit
@item ns-confirm-quit
This variable specifies whether to display a graphical confirmation
-dialogue on quitting.
+dialog on quitting.
@vindex ns-auto-hide-menu-bar
@item ns-auto-hide-menu-bar
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 29c0bed19c0..5b60e93bb3d 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 ba8475e86ac..4aac150934b 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
@@ -88,6 +88,10 @@ mode for the C programming language is @code{c-mode}.
@cindex JSON mode
@cindex SQL mode
@cindex TypeScript mode
+@cindex CSS mode
+@cindex Dockerfile mode
+@cindex CMake mode
+@cindex TOML mode
Emacs has programming language modes for Lisp, Scheme, the
Scheme-based DSSSL expression language, Ada, ASM, AWK, C, C++, C#,
Fortran, Icon, IDL (CORBA), IDLWAVE, Java, Javascript, M4, Makefiles,
@@ -97,13 +101,20 @@ Python, Ruby, Simula, SQL, Tcl, TypeScript, Verilog, and VHDL@. An
alternative mode for Perl is called CPerl mode. Modes are also
available for the scripting languages of the common GNU and Unix
shells, and MS-DOS/MS-Windows @samp{BAT} files, JSON, DNS master
-files, and various sorts of configuration files.
+files, CSS (Cascading Style Sheets), Dockerfiles, CMake files, and various sorts of configuration files.
Ideally, Emacs should have a major mode for each programming
language that you might want to edit. If it doesn't have a mode for
your favorite language, the mode might be implemented in a package not
distributed with Emacs (@pxref{Packages}); or you can contribute one.
+@cindex tree-sitter library, supported major modes
+ If Emacs has been compiled with the @samp{tree-sitter} library, it
+offers several optional editing modes based on that library, which
+utilize the incremental parsing capabilities provided by
+@samp{tree-sitter}. These modes have @samp{-ts-} in their names; for
+example @code{c-ts-mode}, @code{python-ts-mode}, etc.
+
@kindex DEL @r{(programming modes)}
@findex backward-delete-char-untabify
In most programming languages, indentation should vary from line to
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 7c7d49967cd..dd6a220398f 100644
--- a/doc/lispref/ChangeLog.1
+++ b/doc/lispref/ChangeLog.1
@@ -886,7 +886,7 @@
2014-03-15 Dmitry Gutov <dgutov@yandex.ru>
* display.texi (Blinking): Update WRT to the new
- `blink-matchin-paren' behavior.
+ `blink-matching-paren' behavior.
2014-03-14 Martin Rudalics <rudalics@gmx.at>
@@ -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 9d929950a7e..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.
@@ -1460,19 +1474,10 @@ You can use @dfn{overlays} to alter the appearance of a buffer's text on
the screen, for the sake of presentation features. An overlay is an
object that belongs to a particular buffer, and has a specified
beginning and end. It also has properties that you can examine and set;
-these affect the display of the text within the overlay.
-
-@cindex scalability of overlays
-@cindex overlays, scalability
-The visual effect of an overlay is the same as of the corresponding
-text property (@pxref{Text Properties}). However, due to a different
-implementation, overlays generally don't scale well (many operations
-take a time that is proportional to the number of overlays in the
-buffer). If you need to affect the visual appearance of many portions
-in the buffer, we recommend using text properties.
-
-An overlay uses markers to record its beginning and end; thus,
-editing the text of the buffer adjusts the beginning and end of each
+these affect the display of the text within the overlaid portion of
+the buffer.
+
+Editing the text of the buffer adjusts the beginning and end of each
overlay so that it stays with the text. When you create the overlay,
you can specify whether text inserted at the beginning should be
inside the overlay or outside, and likewise for the end of the overlay.
@@ -1492,7 +1497,7 @@ inside the overlay or outside, and likewise for the end of the overlay.
This section describes the functions to create, delete and move
overlays, and to examine their contents. Overlay changes are not
recorded in the buffer's undo list, since the overlays are not
-part of the buffer's contents.
+considered part of the buffer's contents.
@defun overlayp object
This function returns @code{t} if @var{object} is an overlay.
@@ -1514,15 +1519,14 @@ When that happens, the overlay is by default not deleted, but you can
cause it to be deleted by giving it the @samp{evaporate} property
(@pxref{Overlay Properties, evaporate property}).
-The arguments @var{front-advance} and @var{rear-advance} specify the
-marker insertion type for the start of the overlay and for the end of
-the overlay, respectively. @xref{Marker Insertion Types}. If they
-are both @code{nil}, the default, then the overlay extends to include
-any text inserted at the beginning, but not text inserted at the end.
-If @var{front-advance} is non-@code{nil}, text inserted at the
-beginning of the overlay is excluded from the overlay. If
-@var{rear-advance} is non-@code{nil}, text inserted at the end of the
-overlay is included in the overlay.
+The arguments @var{front-advance} and @var{rear-advance} specify what
+happens when text is inserted at the beginning (i.e., before
+@var{start}) and at the end. If they are both @code{nil}, the
+default, then the overlay extends to include any text inserted at the
+beginning, but not text inserted at the end. If @var{front-advance}
+is non-@code{nil}, text inserted at the beginning of the overlay is
+excluded from the overlay. If @var{rear-advance} is non-@code{nil},
+text inserted at the end of the overlay is included in the overlay.
@end defun
@defun overlay-start overlay
@@ -1541,36 +1545,36 @@ returns @code{nil} if @var{overlay} has been deleted.
@end defun
@defun delete-overlay overlay
-This function deletes @var{overlay}. The overlay continues to exist as
-a Lisp object, and its property list is unchanged, but it ceases to be
-attached to the buffer it belonged to, and ceases to have any effect on
-display.
+This function deletes the specified @var{overlay}. The overlay
+continues to exist as a Lisp object, and its property list is
+unchanged, but it ceases to be attached to the buffer it belonged to,
+and ceases to have any effect on display.
A deleted overlay is not permanently disconnected. You can give it a
position in a buffer again by calling @code{move-overlay}.
@end defun
@defun move-overlay overlay start end &optional buffer
-This function moves @var{overlay} to @var{buffer}, and places its bounds
-at @var{start} and @var{end}. Both arguments @var{start} and @var{end}
-must specify buffer positions; they may be integers or markers.
+This function moves @var{overlay} to @var{buffer}, and places its
+bounds at @var{start} and @var{end} in that buffer. Both arguments
+@var{start} and @var{end} must specify buffer positions; they may be
+integers or markers.
If @var{buffer} is omitted, @var{overlay} stays in the same buffer it
-was already associated with; if @var{overlay} was deleted, it goes into
-the current buffer.
+was already associated with; if @var{overlay} was previously deleted
+(and thus isn't associated with any buffer), it goes into the current
+buffer.
The return value is @var{overlay}.
-This is the only valid way to change the endpoints of an overlay. Do
-not try modifying the markers in the overlay by hand, as that fails to
-update other vital data structures and can cause some overlays to be
-lost.
+This function is the only valid way to change the endpoints of an
+overlay.
@end defun
@defun remove-overlays &optional start end name value
This function removes all the overlays between @var{start} and
-@var{end} whose property @var{name} has the value @var{value}. It can
-move the endpoints of the overlays in the region, or split them.
+@var{end} whose property @var{name} has the specified @var{value}. It
+can move the endpoints of the overlays in the region, or split them.
If @var{name} is omitted or @code{nil}, it means to delete all overlays in
the specified region. If @var{start} and/or @var{end} are omitted or
@@ -1581,20 +1585,24 @@ current buffer.
@defun copy-overlay overlay
This function returns a copy of @var{overlay}. The copy has the same
-endpoints and properties as @var{overlay}. However, the marker
+endpoints and properties as @var{overlay}. However, the text
insertion type for the start of the overlay and for the end of the
-overlay are set to their default values (@pxref{Marker Insertion
-Types}).
+overlay are set to their default values.
@end defun
Here are some examples:
@example
+@group
;; @r{Create an overlay.}
(setq foo (make-overlay 1 10))
@result{} #<overlay from 1 to 10 in display.texi>
+@end group
+@group
(overlay-start foo)
@result{} 1
+@end group
+@group
(overlay-end foo)
@result{} 10
(overlay-buffer foo)
@@ -1605,6 +1613,8 @@ Types}).
;; @r{Verify the property is present.}
(overlay-get foo 'happy)
@result{} t
+@end group
+@group
;; @r{Move the overlay.}
(move-overlay foo 5 20)
@result{} #<overlay from 5 to 20 in display.texi>
@@ -1612,6 +1622,8 @@ Types}).
@result{} 5
(overlay-end foo)
@result{} 20
+@end group
+@group
;; @r{Delete the overlay.}
(delete-overlay foo)
@result{} nil
@@ -1625,6 +1637,8 @@ foo
@result{} nil
(overlay-buffer foo)
@result{} nil
+@end group
+@group
;; @r{Undelete the overlay.}
(move-overlay foo 1 20)
@result{} #<overlay from 1 to 20 in display.texi>
@@ -1635,26 +1649,14 @@ foo
@result{} 20
(overlay-buffer foo)
@result{} #<buffer display.texi>
+@end group
+@group
;; @r{Moving and deleting the overlay does not change its properties.}
(overlay-get foo 'happy)
@result{} t
+@end group
@end example
- Emacs stores the overlays of each buffer in two lists, divided
-around an arbitrary center position. One list extends backwards
-through the buffer from that center position, and the other extends
-forwards from that center position. The center position can be anywhere
-in the buffer.
-
-@defun overlay-recenter pos
-This function recenters the overlays of the current buffer around
-position @var{pos}. That makes overlay lookup faster for positions
-near @var{pos}, but slower for positions far away from @var{pos}.
-@end defun
-
- A loop that scans the buffer forwards, creating overlays, can run
-faster if you do @code{(overlay-recenter (point-max))} first.
-
@node Overlay Properties
@subsection Overlay Properties
@cindex overlay properties
@@ -1711,15 +1713,15 @@ If you want to specify a priority value, use either @code{nil}
(or zero), or a positive integer. Any other value has undefined behavior.
The priority matters when two or more overlays cover the same
-character and both specify the same property; the one whose
-@code{priority} value is larger overrides the other. (For the
-@code{face} property, the higher priority overlay's value does not
-completely override the other value; instead, its face attributes
-override the face attributes of the lower priority @code{face}
-property.) If two overlays have the same priority value, and one is
-nested in the other, then the inner one will prevail over the outer
-one. If neither is nested in the other then you should not make
-assumptions about which overlay will prevail.
+character and both specify the same property with different values;
+the one whose @code{priority} value is larger overrides the other.
+(For the @code{face} property, the higher priority overlay's value
+does not completely override the other value; instead, its face
+attributes override the face attributes of the @code{face} property
+whose priority is lower.) If two overlays have the same priority
+value, and one is nested in the other, then the inner one will prevail
+over the outer one. If neither is nested in the other then you should
+not make assumptions about which overlay will prevail.
Currently, all overlays take priority over text properties.
@@ -1780,7 +1782,7 @@ avoided.
This property is used instead of @code{face} when the mouse is within
the range of the overlay. However, Emacs ignores all face attributes
from this property that alter the text size (e.g., @code{:height},
-@code{:weight}, and @code{:slant}). Those attributes are always the
+@code{:weight}, and @code{:slant}); those attributes are always the
same as in the unhighlighted text.
@item display
@@ -1793,9 +1795,8 @@ or shorter, higher or lower, wider or narrower, or replaced with an image.
@item help-echo
@kindex help-echo @r{(overlay property)}
If an overlay has a @code{help-echo} property, then when you move the
-mouse onto the text in the overlay, Emacs displays a help string in the
-echo area, or in the tooltip window. For details see @ref{Text
-help-echo}.
+mouse onto the text in the overlay, Emacs displays a help string in
+the echo area, or as a tooltip. For details see @ref{Text help-echo}.
@item field
@kindex field @r{(overlay property)}
@@ -1862,7 +1863,8 @@ The @code{intangible} property on an overlay works just like the
Properties}, for details.
@item isearch-open-invisible
-This property tells incremental search how to make an invisible overlay
+This property tells incremental search (@pxref{Incremental Search,,,
+emacs, The GNU Emacs Manual}) how to make an invisible overlay
visible, permanently, if the final match overlaps it. @xref{Invisible
Text}.
@@ -1874,13 +1876,15 @@ visible, temporarily, during the search. @xref{Invisible Text}.
@kindex before-string @r{(overlay property)}
This property's value is a string to add to the display at the beginning
of the overlay. The string does not appear in the buffer in any
-sense---only on the screen.
+sense---only on the screen. Note that if the text at the beginning of
+the overlay is made invisible, the string will not be displayed.
@item after-string
@kindex after-string @r{(overlay property)}
This property's value is a string to add to the display at the end of
the overlay. The string does not appear in the buffer in any
-sense---only on the screen.
+sense---only on the screen. Note that if the text at the end of the
+overlay is made invisible, the string will not be displayed.
@item line-prefix
This property specifies a display spec to prepend to each
@@ -3053,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
@@ -5467,8 +5484,9 @@ or an image descriptor.
To display something in the margin @emph{in association with}
certain buffer text, without altering or preventing the display of
-that text, put a @code{before-string} property on the text and put the
-margin display specification on the contents of the before-string.
+that text, put on that text an overlay with a @code{before-string}
+property, and put the margin display specification on the contents of
+the before-string.
Note that if the string to be displayed in the margin doesn't
specify a face, its face is determined using the same rules and
@@ -6289,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 4b45d89f9d0..707af6ee64c 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
@@ -895,10 +895,14 @@ permissions of the file itself.)
If the file does not exist, or if there was trouble determining
whether the file exists, this function returns @code{nil}.
-Directories are files, so @code{file-exists-p} can return @code{t} when
-given a directory. However, because @code{file-exists-p} follows
-symbolic links, it returns @code{t} for a symbolic link
-name only if the target file exists.
+@cindex dangling symlinks, testing for existence
+Directories are files, so @code{file-exists-p} can return @code{t}
+when given a directory. However, because @code{file-exists-p} follows
+symbolic links, it returns @code{t} for a symbolic link name only if
+the target of the link exists; if your Lisp program needs to consider
+@dfn{dangling symlinks} whose target doesn't exist as existing files,
+use @code{file-attributes} (@pxref{File Attributes}) instead of
+@code{file-exists-p}.
@end defun
@defun file-readable-p filename
@@ -3205,6 +3209,9 @@ This command creates a directory named @var{dirname}. If
@var{parents} is non-@code{nil}, as is always the case in an
interactive call, that means to create the parent directories first,
if they don't already exist.
+As a function, @code{make-directory} returns non-@code{nil} if @var{dirname}
+already exists as a directory and @var{parents} is non-@code{nil},
+and returns @code{nil} if it successfully created @var{dirname}.
@code{mkdir} is an alias for this.
@end deffn
@@ -3378,7 +3385,6 @@ first, before handlers for jobs such as remote file access.
@code{load}, @code{lock-file},
@code{make-auto-save-file-name},
@code{make-directory},
-@code{make-directory-internal},
@code{make-lock-file-name},
@code{make-nearby-temp-file},
@code{make-process},
@@ -3440,7 +3446,6 @@ first, before handlers for jobs such as remote file access.
@code{load}, @code{lock-file},
@code{make-auto-save-file-name},
@code{make-direc@discretionary{}{}{}tory},
-@code{make-direc@discretionary{}{}{}tory-internal},
@code{make-lock-file-name},
@code{make-nearby-temp-file},
@code{make-process},
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 c4e724d761c..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
@@ -2423,19 +2423,6 @@ Buffers}), and avoids slowing down internal or temporary buffers, such
as those created by @code{with-temp-buffer} (@pxref{Definition of
with-temp-buffer,, Current Buffer}).
-@item overlay_center
-This field holds the current overlay center position. @xref{Managing
-Overlays}.
-
-@item overlays_before
-@itemx overlays_after
-These fields hold, respectively, a list of overlays that end at or
-before the current overlay center, and a list of overlays that end
-after the current overlay center. @xref{Managing Overlays}.
-@code{overlays_before} is sorted in order of decreasing end position,
-and @code{overlays_after} is sorted in order of increasing beginning
-position.
-
@item name
A Lisp string that names the buffer. It is guaranteed to be unique.
@xref{Buffer Names}. This and the following fields have their names
@@ -2562,6 +2549,9 @@ buffer-local (@pxref{Buffer-Local Variables}), whose corresponding
variable names have underscores replaced with dashes. For instance,
@code{mode_line_format} stores the value of @code{mode-line-format}.
+@item overlays
+The inveral tree containing this buffer's overlays.
+
@item last_selected_window
This is the last window that was selected with this buffer in it, or @code{nil}
if that window no longer displays this buffer.
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 1e4bf4eb861..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
@@ -841,7 +841,7 @@ keymaps:
(@var{find-in-any} emulation-mode-map-alists)
(@var{find-in-any} minor-mode-overriding-map-alist)
(@var{find-in-any} minor-mode-map-alist)
- (if (get-text-property (point) 'local-map)
+ (if (get-char-property (point) 'local-map)
(@var{find-in} (get-char-property (point) 'local-map))
(@var{find-in} (current-local-map)))))
(@var{find-in} (current-global-map)))
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 c472f9b4411..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}
@@ -4967,12 +4998,22 @@ first child where parent is @code{argument_list}, use
(match nil "argument_list" nil nil 0 0)
@end example
+@item n-p-gp
+Short for ``node-parent-grandparent'', this matcher is a function of 3
+arguments: @var{node-type}, @var{parent-type}, and
+@var{grandparent-type}. It returns a function that is called with 3
+arguments: @var{node}, @var{parent}, and @var{bol}, and returns
+non-@code{nil} if: (1) @var{node-type} matches @var{node}'s type, and
+(2) @var{parent-type} matches @var{parent}'s type, and (3)
+@var{grandparent-type} matches @var{parent}'s parent's type. If any
+of @var{node-type}, @var{parent-type}, and @var{grandparent-type} is
+@code{nil}, this function doesn't check for it.
+
@item comment-end
This matcher is a function that is called with 3 arguments:
@var{node}, @var{parent}, and @var{bol}, and returns non-@code{nil} if
point is before a comment ending token. Comment ending tokens are
-defined by regular expression @code{treesit-comment-end}
-(@pxref{Tree-sitter major modes, treesit-comment-end}).
+defined by regular expression @code{comment-end-skip}
@item first-sibling
This anchor is a function that is called with 3 arguments: @var{node},
@@ -5009,19 +5050,19 @@ This is useful as the beginning of the buffer is always at column 0.
@item comment-start
This anchor is a function that is called with 3 arguments: @var{node},
-@var{parent}, and @var{bol}, and returns the position right after the
+@var{parent}, and @var{bol}, and returns the position after the
comment-start token. Comment-start tokens are defined by regular
-expression @code{treesit-comment-start} (@pxref{Tree-sitter major
-modes, treesit-comment-start}). This function assumes @var{parent} is
-the comment node.
+expression @code{comment-start-skip}. This function assumes
+@var{parent} is the comment node.
-@item coment-start-skip
+@item prev-adaptive-prefix
This anchor is a function that is called with 3 arguments: @var{node},
-@var{parent}, and @var{bol}, and returns the position after the
-comment-start token and any whitespace characters following that
-token. Comment-start tokens are defined by regular expression
-@code{treesit-comment-start}. This function assumes @var{parent} is
-the comment 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
@@ -5041,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 a503a7edde8..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
@@ -152,9 +152,9 @@ the various headers, as illustrated by the following example:
@example
@group
-;;; superfrobnicator.el --- Frobnicate and bifurcate flanges
+;;; superfrobnicator.el --- Frobnicate and bifurcate flanges -*- lexical-binding:t -*-
-;; Copyright (C) 2011 Free Software Foundation, Inc.
+;; Copyright (C) 2022 Free Software Foundation, Inc.
@end group
;; Author: J. R. Hacker <jrh@@example.com>
diff --git a/doc/lispref/parsing.texi b/doc/lispref/parsing.texi
index 3223875320a..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,22 +399,23 @@ 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
@var{language} in @var{buffer}, but if @var{no-reuse} is
non-@code{nil}, this function always creates a new parser.
+
+If that buffer is an indirect buffer, its base buffer is used instead.
+That is, indirect buffers use their base buffer's parsers. If the
+base buffer is narrowed, an indirect buffer might not be able to
+retrieve information of the portion of the buffer text that are
+invisible in the base buffer. Lisp programs should widen as necessary
+should they want to use a parser in an indirect buffer.
@end defun
Given a parser, we can query information about it.
@@ -447,7 +454,8 @@ tree incrementally.
@defun treesit-parser-list &optional buffer
This function returns the parser list of @var{buffer}. If
@var{buffer} is @code{nil} or omitted, it defaults to the current
-buffer.
+buffer. If that buffer is an indirect buffer, its base buffer is used
+instead. That is, indirect buffers use their base buffer's parsers.
@end defun
@defun treesit-parser-delete parser
@@ -503,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
@@ -568,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}.
@@ -602,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}).
@@ -620,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
@@ -639,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
@@ -675,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.
@@ -919,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
@@ -958,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
@@ -1258,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
@@ -1274,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.
@@ -1653,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
@@ -1688,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;
@@ -1708,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
@@ -1727,18 +1759,53 @@ For more information of these built-in tree-sitter features,
For supporting mixing of multiple languages in a major mode,
@pxref{Multiple Languages}.
-Setting the following local variables allows tree-sitter's indentation
-engine to correctly indent multi-line comments:
+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.
-@defvar treesit-comment-start
-This should be a regular expression matching an opening comment token.
-For example, it should match @samp{//}, @samp{////}, @samp{/*},
-@samp{/****}, etc., in C.
+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-comment-end
-This should be a regular expression matching a closing comment token.
-For example, it should match @samp{*/}, @samp{****/}, etc., in C.
+@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
@@ -1765,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..f47720184a3 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 does Emacs treat 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 bc5a4cf24a6..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
@@ -719,7 +719,7 @@ calling @var{function} on the elements in @var{sequence}.
then with that result and the third element of @var{sequence}, etc.
@var{function} should be a function of two arguments.
-@var{function} is called with two arguments. @var{intial-value}
+@var{function} is called with two arguments. @var{initial-value}
(and then the accumulated value) is used as the first argument, and
the elements in @var{sequence} are used for the second argument.
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 7206f2acd20..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
@@ -188,15 +188,18 @@ It determines the value returned by evaluating the variable symbol,
and it is the binding acted on by @code{setq}.
For most purposes, you can think of the current binding as the
-innermost local binding, or the global binding if there is no
-local binding. To be more precise, a rule called the @dfn{scoping
-rule} determines where in a program a local binding takes effect. The
+innermost local binding, or the global binding if there is no local
+binding. To be more precise, a rule called the @dfn{scoping rule}
+determines where in a program a local binding takes effect. The
default scoping rule in Emacs Lisp is called @dfn{dynamic scoping},
which simply states that the current binding at any given point in the
execution of a program is the most recently-created binding for that
variable that still exists. For details about dynamic scoping, and an
alternative scoping rule called @dfn{lexical scoping}, @pxref{Variable
-Scoping}.
+Scoping}. Lately Emacs is moving towards using lexical binding in
+more and more places, with the goal of eventually making lexical
+binding the default. In particular, all Emacs Lisp source files and
+the @file{*scratch*} buffer use lexical scoping.
The special forms @code{let} and @code{let*} exist to create local
bindings:
@@ -266,6 +269,17 @@ Compare the following example with the example above for @code{let}.
@result{} (1 1)
@end group
@end example
+
+@noindent
+Basically, the @code{let*} binding of @code{x} and @code{y} in the
+previous example is equivalent to using nested @code{let} bindings:
+
+@example
+(let ((y 1))
+ (let ((z y))
+ (list y z)))
+@end example
+
@end defspec
@defspec letrec (bindings@dots{}) forms@dots{}
@@ -843,9 +857,10 @@ error is signaled.
@defmac setopt [symbol form]@dots{}
This is like @code{setq} (see above), but meant for user options.
-This macro uses the Customize machinery to set the variable(s). In
-particular, @code{setopt} will run the setter function associated with
-the variable. For instance, if you have:
+This macro uses the Customize machinery to set the variable(s)
+(@pxref{Variable Definitions}). In particular, @code{setopt} will run
+the setter function associated with the variable. For instance, if
+you have:
@example
@group
@@ -870,6 +885,12 @@ will also issue a message:
option. For instance, using @code{setopt} to set a user option
defined with a @code{number} type to a string will signal an error.
+Unlike @code{defcustom} and related customization commands, such as
+@code{customize-variable}, @code{setopt} is meant for non-interactive
+use, in particular in the user init file. For that reason, it doesn't
+record the standard, saved, and user-set values, and doesn't mark the
+variable as candidate for saving in the custom file.
+
The @code{setopt} macro can be used on regular, non-user option
variables, but is much less efficient than @code{setq}. The main use
case for this macro is setting user options in the user's init file.
@@ -974,6 +995,11 @@ binding can also be accessed from the Lisp debugger.}. It also has
binding can live on even after the binding construct has finished
executing, by means of special objects called @dfn{closures}.
+ The dynamic binding was (and still is) the default in Emacs for many
+years, but lately Emacs is moving towards using lexical binding in
+more and more places, with the goal of eventually making that the
+default.
+
The following subsections describe dynamic binding and lexical
binding in greater detail, and how to enable lexical binding in Emacs
Lisp programs.
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 8dbea25c4cf..27870b67d70 100644
--- a/doc/man/etags.1
+++ b/doc/man/etags.1
@@ -209,7 +209,7 @@ otherwise. This is particularly useful when storing many predefined
regexps in a file.
.br
In its second form, \fIregexfile\fP is the name of a file that contains
-a number of arguments to the \fI\-\-regex\=\fP option,
+a number of arguments to the \fI\-\-regex=\fP option,
one per line. Lines beginning with a space or tab are assumed
to be comments, and ignored.
@@ -220,22 +220,22 @@ from shell interpretation.
Tag the DEFVAR macros in the emacs source files:
.br
-\fI\-\-regex\='/[ \\t]*DEFVAR_[A-Z_ \\t(]+"\\([^"]+\\)"/'\fP
+\fI\-\-regex='/[ \\t]*DEFVAR_[A-Z_ \\t(]+"\\([^"]+\\)"/'\fP
.\"" This comment is to avoid confusion to Emacs syntax highlighting
.br
Tag VHDL files (this example is a single long line, broken here for
formatting reasons):
.br
-\fI\-\-language\=none\ \-\-regex='/[\ \\t]*\\(ARCHITECTURE\\|\\
-CONFIGURATION\\)\ +[^\ ]*\ +OF/'\ \-\-regex\='/[\ \\t]*\\
+\fI\-\-language=none\ \-\-regex='/[\ \\t]*\\(ARCHITECTURE\\|\\
+CONFIGURATION\\)\ +[^\ ]*\ +OF/'\ \-\-regex='/[\ \\t]*\\
\\(ATTRIBUTE\\|ENTITY\\|FUNCTION\\|PACKAGE\\(\ BODY\\)?\\
\\|PROCEDURE\\|PROCESS\\|TYPE\\)[\ \\t]+\\([^\ \\t(]+\\)/\\3/'\fP
.br
Tag Tcl files (this last example shows the usage of a \fItagregexp\fP):
.br
-\fI\-\-lang\=none \-\-regex\='/proc[\ \\t]+\\([^\ \\t]+\\)/\\1/'\fP
+\fI\-\-lang=none \-\-regex='/proc[\ \\t]+\\([^\ \\t]+\\)/\\1/'\fP
.br
A regexp can be preceded by {\fIlang\fP}, thus restricting it to match
@@ -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 a7dbbbb48fe..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.
@@ -67,14 +67,14 @@ MAKEINFO_OPTS = --force -I$(emacsdir)
DOCMISC_W32 = @DOCMISC_W32@
## Info files to build and install on all platforms.
-INFO_COMMON = auth autotype bovine calc ccmode cl \
- dbus dired-x ebrowse ede ediff edt efaq eglot eieio \
- emacs-gnutls emacs-mime epa erc ert eshell eudc eww \
- flymake forms gnus htmlfontify idlwave ido info.info \
- mairix-el message mh-e modus-themes newsticker nxml-mode \
- octave-mode org pcl-cvs pgg rcirc reftex remember sasl \
- sc semantic ses sieve smtpmail speedbar srecode todo-mode \
- tramp transient url vhdl-mode vip viper vtable widget wisent woman
+INFO_COMMON = auth autotype bovine calc ccmode cl dbus dired-x \
+ ebrowse ede ediff edt efaq eglot eieio emacs-gnutls \
+ emacs-mime epa erc ert eshell eudc eww flymake forms gnus \
+ htmlfontify idlwave ido info.info mairix-el message mh-e \
+ modus-themes newsticker nxml-mode octave-mode org pcl-cvs pgg \
+ rcirc reftex remember sasl sc semantic ses sieve smtpmail \
+ speedbar srecode todo-mode tramp transient url use-package \
+ vhdl-mode vip viper vtable widget wisent woman
## Info files to install on current platform.
INFO_INSTALL = $(INFO_COMMON) $(DOCMISC_W32)
@@ -186,7 +186,8 @@ $(foreach ifile,$(filter-out info.info,$(INFO_TARGETS)),$(eval $(call info_templ
## Extra dependencies.
## FIXME Updating this list manually is unreliable.
-need_emacsver = calc cl dired-x efaq efaq-w32 erc forms ido newsticker reftex remember woman
+need_emacsver = calc cl dired-x efaq efaq-w32 erc forms ido \
+ newsticker reftex remember use-package woman
need_emacsver_prefix = $(addprefix ${buildinfodir}/,${need_emacsver})
$(need_emacsver_prefix:=.info) $(need_emacsver:=.dvi) $(need_emacsver:=.pdf) $(need_emacsver:=.html) : ${emacsdir}/emacsver.texi
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..c3e32433fc4 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
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 b76f8bdfd71..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
@@ -955,6 +955,13 @@ Note that you can still configure the excluded Emacs features manually
to use Eglot in your @code{eglot-managed-mode-hook} or via some other
mechanism.
+@vindex eglot-report-progress
+@cindex progress
+@item eglot-report-progress
+Set this variable to true if you'd like progress notifications coming
+from the LSP server to be handled as Emacs's progress reporting
+facilities.
+
@vindex eglot-workspace-configuration
@cindex server workspace configuration
@item eglot-workspace-configuration
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 a8d1dd78235..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
@@ -570,10 +580,20 @@ toggle never mutates @code{erc-modules}.
@menu
* Connecting:: Ways of connecting to an IRC server.
-* SASL:: Authenticating via SASL
+* SASL:: Authenticating via SASL.
* Sample Configuration:: An example configuration file.
* Integrations:: Integrations available for ERC.
* Options:: Options that are available for ERC.
+
+@detailmenu
+--- Detailed Node Listing ---
+
+Integrations
+
+* URL:: Opening IRC URLs in ERC.
+* auth-source:: Retrieving auth-source entries with ERC.
+
+@end detailmenu
@end menu
@node Connecting
@@ -643,7 +663,7 @@ while helpers, like @code{erc-compute-nick}, will determine other
parameters, and some, like @code{client-certificate}, will just be
@code{nil}.
-@anchor{ERC client-certificate}
+@anchor{client-certificate}
To use a certificate with @code{erc-tls}, specify the optional
@var{client-certificate} keyword argument, whose value should be as
described in the documentation of @code{open-network-stream}: if
@@ -687,6 +707,8 @@ machine irc.libera.chat key /home/bandali/my-cert.key cert /home/bandali/my-cert
@xref{Help for users,,,auth, Emacs auth-source Library}, for more on the
@file{.authinfo}/@file{.netrc} backend of @code{auth-source}.
+For other uses of auth-source throughout ERC, @pxref{auth-source,
+ERC's auth-source integration}.
@end defun
@subheading Server
@@ -778,9 +800,9 @@ ERC should automatically attempt to connect with another nickname.
You can manually set another nickname with the /NICK command.
@end defopt
-@anchor{ERC username}
+@anchor{username parameter}
@subheading User
-@cindex user
+@cindex username parameter
@defun erc-compute-user &optional user
Determine a suitable value to send as the first argument of the
@@ -803,8 +825,27 @@ A permanent username value to send for all connections. It should be
a string abiding by the rules of the network.
@end defopt
+@anchor{password parameter}
+@anchor{server password}
+@cindex password, server
@subheading Password
-@cindex password
+
+This parameter was traditionally meant to specify a @dfn{server
+password} to be sent along with the IRC @samp{PASS} command. However,
+such passwords aren't widely used. Instead, networks typically expect
+them, when present, to convey other authentication information. In
+the case of account-services (a.k.a., ``NickServ'') credentials, this
+typically involves a special syntax, such as @samp{myuser:mypass}.
+IRC bouncers often do something similar but include a pre-configured
+network-ID component, for example, @samp{bncuser/mynet:bncpass}.
+
+In general, if you have @emph{not} been asked by your network or
+bouncer to specify a repurposed server password, you should instead
+consider setting up @samp{services} or, preferably, @samp{sasl}, both
+ERC modules (@pxref{Modules}). In addition to performing
+network-account authentication, these obviate the need for this
+parameter completely, although both can optionally borrow it for their
+own purposes. (@xref{SASL, SASL in ERC}.)
@defopt erc-prompt-for-password
If non-@code{nil} (the default), @kbd{M-x erc} and @kbd{M-x erc-tls}
@@ -814,109 +855,9 @@ invocations of @code{erc} and @code{erc-tls}.
@noindent
If you prefer, you can set this option to @code{nil} and use the
-@code{auth-source} mechanism to store your password. For instance, if
-the option @code{auth-sources} contains @file{~/.authinfo}, put
-something like the following in that file:
-
-@example
-machine irc.example.net login mynick password sEcReT
-@end example
-
-@noindent
-For server passwords, that is, passwords sent for the IRC @samp{PASS}
-command, the @samp{host} field (@w{@code{machine irc.example.net}} in
-the above example)
-corresponds to the @var{server} parameter used by @code{erc} and
-@code{erc-tls}. Unfortunately, specifying a network, like
-@samp{Libera.Chat}, or a specific network server, like
-@samp{platinum.libera.chat}, won't normally work for looking up a server
-password because such information isn't available during opening
-introductions. (Actually, ERC @emph{can} find entries with arbitrary
-@samp{host} values for any context, including server passwords, but
-that requires customizing the more advanced options below.)
-
-If ERC can't find a suitable server password, it will just skip the IRC
-@samp{PASS} command altogether, something users may want when using
-CertFP or engaging NickServ via ERC's ``services'' module. If that is
-what you'd like to do, you can also customize the option
-@code{erc-auth-source-server-function} to @code{nil} to skip
-server-password lookup for all servers. Note that some networks and
-IRCds may accept account-services authentication via server password
-using the nonstandard @samp{mynick:sEcReT} convention.
-
-As just mentioned, you can also use @code{auth-source} to authenticate
-to account services the traditional way, through a bot called
-@samp{NickServ}. To tell ERC to do that, set
-@code{erc-use-auth-source-for-nickserv-password} to @code{t}. For
-these and most other queries, entries featuring custom identifiers and
-networks are matched first, followed by network-specific servers and
-dialed endpoints (typically, the @var{server} argument passed to
-@code{erc}). The following netrc-style entries appear in order of
-precedence:
-
-@example
-machine Libera/cellphone login MyNick password sEcReT
-machine Libera.Chat login MyNick password sEcReT
-machine zirconium.libera.chat login MyNick password sEcReT
-machine irc.libera.chat login MyNick password sEcReT
-@end example
-
-@noindent
-Remember that field labels vary per backend, so @samp{machine} (in
-netrc's case) maps to auth-source's generalized notion of a host,
-hence the @samp{:host} keyword property. Also, be sure to mind the
-syntax of your chosen backend medium. For example, always quote
-channel names in a netrc file.
-
-If this all seems overly nuanced or just plain doesn't appeal to you,
-see options @code{erc-auth-source-services-function} and friends, described
-below. These let you query auth-source your way. Most users can
-simply ignore the passed-in arguments and get by with something like
-the following:
-
-@lisp
-(defun my-fancy-auth-source-func (&rest _)
- (let* ((host (read-string "host: " nil nil "default"))
- (pass (auth-source-pick-first-password :host host)))
- (if (and pass (string-search "libera" host))
- (concat "MyNick:" pass)
- pass)))
-@end lisp
-
-Lastly, ERC also consults @code{auth-source} to find ``keys'' that may
-be required by certain channels you join. When modifying a
-traditional @code{auth-source} entry for this purpose, put the channel
-name in the @samp{user} field (for example, @samp{login "#fsf"}, in
-netrc's case). The actual key goes in the @samp{password} (or
-@samp{secret}) field.
-
-@noindent
-For details, @pxref{Top,,auth-source, auth, Emacs auth-source Library}.
-
-@anchor{ERC auth-source functions}
-@defopt erc-auth-source-server-function
-@end defopt
-@defopt erc-auth-source-services-function
-@end defopt
-@defopt erc-auth-source-join-function
-
-ERC calls these functions with keyword arguments recognized by
-@code{auth-source-search}, namely, those deemed most relevant to the
-current context, if any. For example, with NickServ queries,
-@code{:user} is the ``desired'' nickname rather than the current one.
-Generalized names, like @code{:user} and @code{:host}, are always used
-over back-end specific ones, like @code{:login} or @code{:machine}.
-ERC expects a string to use as the secret or @code{nil}, if the search
-fails.
-
-@findex erc-auth-source-search
-The default value for all three options is the function
-@code{erc-auth-source-search}. It tries to merge relevant contextual
-parameters with those provided or discovered from the logical connection
-or the underlying transport. Some auth-source back ends may not be
-compatible; netrc, plstore, json, secrets, and pass are currently
-supported.
-@end defopt
+auth-source facility to retrieve a server password, although hitting
+@kbd{RET} at the prompt may achieve the same effect.
+@xref{auth-source, ERC's auth-source integration}, for more.
@subheading Full name
@@ -946,8 +887,8 @@ This can be either a string or a function to call.
@end defopt
-@subheading ID
@anchor{Network Identifier}
+@subheading ID
ERC uses an abstract designation, called @dfn{network context
identifier}, for referring to a connection internally. While normally
@@ -983,20 +924,17 @@ explore all custom options pertaining to your chosen mechanism.
@defopt erc-sasl-mechanism
The name of an SASL subprotocol type as a @emph{lowercase} symbol.
+The value can be one of the following:
-@var{plain} and @var{scram} (``password-based''):
-
-@indentedblock
+@table @asis
+@item @code{plain} and @code{scram} (``password-based'')
Here, ``password'' refers to your account password, which is usually
your @samp{NickServ} password. To make this work, customize
@code{erc-sasl-user} and @code{erc-sasl-password} or specify the
@code{:user} and @code{:password} keyword arguments when invoking
@code{erc-tls}. Note that @code{:user} cannot be given interactively.
-@end indentedblock
-@var{external} (via Client TLS Certificate):
-
-@indentedblock
+@item @code{external} (via Client TLS Certificate)
This works in conjunction with the @code{:client-certificate} keyword
offered by @code{erc-tls}. Just ensure you've registered your
fingerprint with the network beforehand. The fingerprint is usually a
@@ -1005,7 +943,7 @@ first is lowercase without delims (@samp{deadbeef}) and the second
uppercase with colon seps (@samp{DE:AD:BE:EF}). These days, there's
usually a @samp{CERT ADD} command offered by NickServ that can
register you automatically if you issue it while connected with a
-client cert. (@pxref{ERC client-certificate}).
+client cert. @xref{client-certificate}.
Additional considerations:
@enumerate
@@ -1018,11 +956,8 @@ of authentication is in effect (being deferred to), so depending on
the specific application or service, there's a remote chance your
server has something else in mind.
@end enumerate
-@end indentedblock
-
-@var{ecdsa-nist256p-challenge}:
-@indentedblock
+@item @code{ecdsa-nist256p-challenge}
This mechanism is quite complicated and currently requires the
external @samp{openssl} executable, so please use something else if at
all possible. Ignoring that, specify your key file (e.g.,
@@ -1036,7 +971,7 @@ ERC> /msg NickServ set property \
@end example
(You may be able to omit the @samp{property} subcommand.)
-@end indentedblock
+@end table
@end defopt
@@ -1044,30 +979,32 @@ ERC> /msg NickServ set property \
This should be your network account username, typically the same one
registered with nickname services. Specify this when your NickServ
login differs from the @code{:user} you're connecting with.
-(@pxref{ERC username})
+@xref{username parameter}.
@end defopt
@defopt erc-sasl-password
-As noted elsewhere, the @code{:password} parameter for @code{erc-tls}
-was originally intended for traditional ``server passwords,'' but these
-aren't really used any more. As such, this option defaults to
-borrowing that parameter for its own uses, thus allowing you to call
-@code{erc-tls} with @code{:password} set to your NickServ password.
+As noted elsewhere, the entry-point @code{:password} param was
+originally intended for traditional ``server passwords,'' but these
+aren't really used any more (@pxref{password parameter}). As such,
+this option defaults to borrowing that parameter for its own uses,
+thus allowing you to call @code{erc-tls} with @code{:password} set to
+your NickServ password.
You can also set this to a nonemtpy string, and ERC will send that
when needed, no questions asked. Or, if you'd rather use auth-source,
set @code{erc-sasl-auth-source-function} to a function, and ERC will
-perform an auth-source query instead. As last resort in all cases,
-ERC will prompt you for input.
+perform an auth-source query instead. In all cases, ERC will prompt
+you for input as a last resort.
Lastly, if your mechanism is @code{ecdsa-nist256p-challenge}, this
option should instead hold the file name of your key.
@end defopt
+@anchor{SASL auth-source function}
@defopt erc-sasl-auth-source-function
This is nearly identical to the other ERC @samp{auth-source} function
-options (@pxref{ERC auth-source functions}) except that the default
-value here is @code{nil}, meaning you have to set it to something like
+options (@pxref{auth-source functions}) except that the default value
+here is @code{nil}, meaning you have to set it to something like
@code{erc-auth-source-search} for queries to be performed. For
convenience, this module provides the following as a possible value:
@@ -1169,9 +1106,9 @@ both networks.
@subheading Troubleshooting
-@strong{Warning:} ERC's SASL offering is currently limited by a lack
-of support for proper IRCv3 capability negotiation. In most cases,
-this shouldn't affect your ability to authenticate.
+First and foremost, please know that ERC's SASL offering is currently
+limited by a lack of support for proper IRCv3 capability negotiation.
+In most cases, this shouldn't affect your ability to authenticate.
If you're struggling, remember that your SASL password is almost
always your NickServ password. When in doubt, try restoring all SASL
@@ -1266,12 +1203,19 @@ stuff, to the current ERC buffer."
@section Integrations
@cindex integrations
-@subheading URL
+@menu
+* auth-source:: Retrieving auth-source entries with ERC.
+@end menu
+
+@anchor{URL}
+@subsection URL
+@cindex URL
+
For anything to work, you'll want to set @code{url-irc-function} to
@code{url-irc-erc}. As a rule of thumb, libraries relying directly on
@code{url-retrieve} should be fine out the box from Emacs 29.1 onward.
On older versions of Emacs, you may need to @code{(require 'erc)}
-beforehand. @pxref{Retrieving URLs,,, url, URL}.
+beforehand. @xref{Retrieving URLs,,, url, URL}.
For other apps and libraries, such as those relying on the
higher-level @code{browse-url}, you'll oftentimes be asked to specify
@@ -1288,6 +1232,160 @@ need a function as well:
@noindent
Users on Emacs 28 and below may need to use @code{browse-url} instead.
+@node auth-source
+@subsection auth-source
+@cindex auth-source
+
+You can configure ERC to use the built-in auth-source library for
+looking up passwords. @xref{Top,,auth-source, auth, Emacs auth-source
+Library}, for general info on setting up various backends, but keep in
+mind that some of these may not be compatible. Those currently
+supported are netrc, plstore, json, secrets, and pass. To get started
+with the default backend, netrc, put a line like the following in your
+@file{~/.authinfo.gpg} (or any file named in the option
+@code{auth-sources}):
+
+@example
+machine irc.example.net login mynick password sEcReT
+@end example
+
+@subsubheading Server Passwords
+When retrieving passwords to accompany the IRC @samp{PASS} command
+(@pxref{password parameter}), ERC asks auth-source to match the
+@var{server} parameter of @code{erc-tls} against each entry's
+@samp{host} field (@w{@code{machine irc.example.net}} in the above
+example). Unfortunately, specifying a network, like
+@samp{Libera.Chat}, or a specific network server, like
+@samp{platinum.libera.chat}, won't normally work for looking up a
+server password because that information isn't available during
+opening introductions. (Actually, ERC @emph{can} find entries with
+arbitrary @samp{host} values for any context, including server
+passwords, but that requires customizing the more advanced options
+below.)
+
+If ERC can't find a suitable server password, it will just skip the
+IRC @samp{PASS} command altogether, something users may want when
+using CertFP or engaging NickServ via ERC's @code{services} module.
+If that appeals to you, consider customizing the option
+@code{erc-auth-source-server-function} to @code{nil} to skip
+server-password lookup for all servers. Note that some networks and
+IRCds may accept account-services authentication via server password.
+Also, some ERC modules may commandeer the @code{erc-tls}
+@var{password} parameter for their own ends, which likely don't
+involve a server password.
+
+@subsubheading The @samp{services} module
+You can use auth-source to authenticate to account services the
+traditional way through a bot called @samp{NickServ}. To do so, add
+@code{services} to @code{erc-modules} and set the option
+@code{erc-use-auth-source-for-nickserv-password} to @code{t}. After
+that, expect the @samp{user} parameter in relevant auth-source queries
+to be your current nickname.
+
+Most of the time, a query's precise contextual details (such as
+whether a nick was granted or forcibly assigned) shouldn't affect how
+you define entries in your backend. However, if something isn't quite
+working, you may want to investigate the interplay between the option
+@code{erc-nickserv-identify-mode} and account services. In
+particular, if you find yourself facing nicks suffixed with an
+@code{erc-nick-uniquifier} (the infamous @samp{`}), check that the
+network's entry in @code{erc-nickserv-alist} is up to date, and do let
+us know if something's off (@pxref{Getting Help and Reporting Bugs}).
+Of course, if you've had your fill of fiddling with this module,
+consider switching to SASL for what's likely a more consistent
+auth-source experience. (@xref{SASL}.)
+
+@subsubheading Default query behavior
+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 @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}
+field, which, by default, most heavily influences the fate of a query:
+
+@enumerate
+@item
+entries featuring custom identifiers and networks are matched first
+(@pxref{Network Identifier})
+@item
+followed by network-specific servers
+@item
+and, finally, dialed endpoints (typically the @var{server} argument
+passed to @code{erc-tls})
+@end enumerate
+
+@noindent
+The following netrc-style entries appear in order of precedence:
+
+@example
+machine Libera/cellphone login MyNick password sEcReT
+machine Libera.Chat login MyNick password sEcReT
+machine zirconium.libera.chat login MyNick password sEcReT
+machine irc.libera.chat login MyNick password sEcReT
+@end example
+
+@noindent
+Remember that field labels vary per backend, so @samp{machine} (in
+netrc's case) maps to auth-source's generalized notion of a host,
+hence the @samp{:host} keyword parameter to @code{auth-source-search}.
+Also, be sure to mind the syntax of your chosen backend medium. For
+example, always quote channel names in a netrc file.
+
+Lastly, if this all seems overly nuanced or just plain doesn't appeal
+to you, please see options @code{erc-auth-source-services-function}
+and friends, described just below.
+
+@subsubheading Custom query functions
+These let you query auth-source your way. Most users can
+simply ignore the passed-in arguments and get by with something like
+the following:
+
+@lisp
+(defun my-fancy-auth-source-func (&rest _)
+ (let* ((host (read-string "host: " nil nil "default"))
+ (pass (auth-source-pick-first-password :host host)))
+ (if (and pass (string-search "libera" host))
+ (concat "MyNick:" pass)
+ pass)))
+@end lisp
+
+@anchor{auth-source functions}
+@defopt erc-auth-source-server-function
+@end defopt
+@defopt erc-auth-source-services-function
+@end defopt
+@defopt erc-auth-source-join-function
+
+ERC calls these functions with keyword arguments recognized by
+@code{auth-source-search}, namely, those deemed most relevant to the
+current context, if any. For example, when identifying to services,
+@code{:user} contains your current nickname. Generalized parameter
+names, like @code{:user} and @code{:host}, are always preferred over
+backend specific ones, like @code{:login} or @code{:machine}. In
+return, ERC expects a string if the search succeeds or @code{nil} if
+it fails.
+
+@findex erc-auth-source-search
+The default value for all three options is the function
+@code{erc-auth-source-search}. It tries to merge relevant contextual
+parameters with those provided or discovered from the logical
+connection or the underlying transport.
+
+For using auth-source along with SASL, @pxref{SASL auth-source
+function}.
+@end defopt
+
+@subsubheading Channel keys
+ERC also consults @code{auth-source} to find ``keys'' that may be
+required by certain channels you join. When modifying a traditional
+@code{auth-source} entry for this purpose, put the channel name in the
+@samp{user} field (for example, @samp{login "#fsf"}, in netrc's case).
+The actual key goes in the @samp{password} (or @samp{secret}) field.
+
+
@node Options
@section Options
@cindex options
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 e6ddcf11dfa..4ad1c3f74f6 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
@@ -256,12 +256,40 @@ as an argument will ``spread'' the elements into multiple arguments:
@end example
@subsection Quoting and escaping
-As with other shells, you can escape special characters and spaces
-with by prefixing the character with a backslash (@code{\}), or by
-surrounding the string with apostrophes (@code{''}) or double quotes
-(@code{""}). This is needed especially for file names with special
-characters like pipe (@code{|}), which could be part of remote file
-names.
+As with other shells, you can escape special characters and spaces by
+prefixing the character with a backslash (@samp{\}), or by surrounding
+the string with apostrophes (@samp{''}) or double quotes (@samp{""}).
+This is needed especially for file names with special characters like
+pipe (@samp{|}), which could be part of remote file names.
+
+When you escape a character with @samp{\} outside of any quotes, the
+result is the literal character immediately following it. For
+example, @code{\$10} means the literal string @code{$10}.
+
+Inside of double quotes, most characters have no special meaning.
+However, @samp{\}, @samp{"}, and @samp{$} are still special; to escape
+them, use backslash as above. Thus, if the value of the variable
+@var{answer} is @code{42}, then @code{"The answer is: \"$answer\""}
+returns the string @code{The answer is: "42"}. However, when escaping
+characters with no special meaning, the result is the full
+@code{\@var{c}} sequence. For example, @code{"foo\bar"} means the
+literal string @code{foo\bar}.
+
+Additionally, when escaping a newline, the whole escape sequence is
+removed by the parser. This lets you continue commands across
+multiple lines:
+
+@example
+~ $ echo "foo\
+bar"
+foobar
+@end example
+
+Inside apostrophes, escaping works differently. All characters
+between the apostrophes have their literal meaning except @samp{'},
+which ends the quoted string. To insert a literal apostrophe, you can
+use @samp{''}, so @code{'It''s me'} means the literal string
+@code{It's me}.
When using expansions (@pxref{Expansion}) in an Eshell command, the
result may potentially be of any data type. To ensure that the result
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 1060cd805ab..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
@@ -67,9 +67,15 @@ Indices
@node Overview
@chapter Overview
-@dfn{EWW}, the Emacs Web Wowser, is a web browser for GNU Emacs. It
-can load, parse, and display various web pages using @dfn{shr.el}.
-However, a GNU Emacs with @code{libxml2} support is required.
+
+@dfn{EWW}, the Emacs Web Wowser, is a web browser for GNU Emacs that
+provides a simple, no-frills experience that focuses on readability.
+It loads, parses, and displays web pages using @dfn{shr.el}. It can
+display images inline, if Emacs was built with image support, but
+there is no support for CSS or JavaScript.
+
+To use EWW, you need to use an Emacs built with @code{libxml2}
+support.
@node Basics
@chapter Basic Usage
diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi
index 4561b760c04..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
@@ -847,7 +847,7 @@ Binding,,, elisp, The Emacs Lisp Reference Manual}) to be active.
@findex flymake-proc-legacy-flymake
The backend @code{flymake-proc-legacy-flymake} was originally designed
to be extended for supporting new syntax check tools and error message
-patterns. It is also controlled by its own set of customization variables
+patterns. It is also controlled by its own set of customization variables.
@node Proc customization variables
@section Customization variables for the Proc backend
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..575a086e2c5 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.
diff --git a/doc/misc/modus-themes.org b/doc/misc/modus-themes.org
index db92dfb4817..0dbe7a6c5b6 100644
--- a/doc/misc/modus-themes.org
+++ b/doc/misc/modus-themes.org
@@ -45,7 +45,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
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 43d85099cff..ed3eb0626f2 100644
--- a/doc/misc/org.org
+++ b/doc/misc/org.org
@@ -1401,7 +1401,7 @@ you, configure the option ~org-table-auto-blank-field~.
- {{{kbd(M-x org-table-blank-field)}}} ::
#+findex: org-table-blank-field
- Blank the field at point.
+ Blank the current table field or active region.
- {{{kbd(S-TAB)}}} (~org-table-previous-field~) ::
@@ -20021,11 +20021,16 @@ changes.
| =nofnadjust= | Do not renumber and sort automatically. |
#+vindex: org-hide-block-startup
- To hide blocks on startup, use these keywords. The
- corresponding variable is ~org-hide-block-startup~.
+ #+vindex: org-hide-drawer-startup
+ To hide blocks or drawers on startup, use these keywords. The
+ corresponding variables are ~org-hide-block-startup~ and
+ ~org-hide-drawer-startup~.
+
+ | =hideblocks= | Hide all begin/end blocks on startup. |
+ | =nohideblocks= | Do not hide blocks on startup. |
+ | =hidedrawers= | Hide all begin/end blocks on startup. |
+ | =nohidedrawers= | Do not hide blocks on startup. |
- | =hideblocks= | Hide all begin/end blocks on startup. |
- | =nohideblocks= | Do not hide blocks on startup. |
#+vindex: org-pretty-entities
The display of entities as UTF-8 characters is governed by the
@@ -22300,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 84933a9ca72..41930f154c2 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..d4b39d4ee39 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
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..7858bf152c3 100644
--- a/doc/misc/texinfo.tex
+++ b/doc/misc/texinfo.tex
@@ -5,7 +5,7 @@
%
\def\texinfoversion{2022-11-12.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
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..299fb3fcb31 100644
--- a/doc/misc/trampver.texi
+++ b/doc/misc/trampver.texi
@@ -2,12 +2,12 @@
@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
@c are auto-frobbed from configure.ac.
-@set trampver 2.6.0-pre
+@set trampver 2.6.0.29.1
@set trampurl https://www.gnu.org/software/tramp/
@set tramp-bug-report-address tramp-devel@@gnu.org
@set emacsver 26.1
diff --git a/doc/misc/transient.texi b/doc/misc/transient.texi
index e5e7cccbe8d..2cd4e985dd2 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
new file mode 100644
index 00000000000..87105c4db00
--- /dev/null
+++ b/doc/misc/use-package.texi
@@ -0,0 +1,2153 @@
+\input texinfo @c -*- texinfo -*-
+@c %**start of header
+@setfilename ../../info/use-package.info
+@settitle use-package User Manual
+@set USEP_VER 2.4.5
+@set USEP_DIST as distributed with Emacs @value{EMACSVER}
+@include docstyle.texi
+@syncodeindex vr cp
+@syncodeindex fn cp
+@include emacsver.texi
+@c %**end of header
+
+@copying
+This manual is for use-package @value{USEP_VER} @value{USEP_DIST}.
+
+Copyright @copyright{} 2022--2023 Free Software Foundation, Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover Texts being ``A GNU Manual'',
+and with the Back-Cover Texts as in (a) below. A copy of the license
+is included in the section entitled ``GNU Free Documentation License''.
+
+(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
+modify this GNU manual.''
+@end quotation
+@end copying
+
+@dircategory Emacs misc features
+@direntry
+* use-package: (use-package). Declarative package configuration for Emacs.
+@end direntry
+
+@finalout
+@titlepage
+@title use-package User Manual
+@subtitle for version USEP_VER
+@author John Wiegley & Stefan Kangas
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top
+@top use-package User Manual
+
+The @code{use-package} macro allows you to set up package
+customization in your init file in a declarative way. It takes care
+of many things for you that would otherwise require a lot of
+repetitive boilerplate code. It can help with common customization,
+such as binding keys, setting up hooks, customizing user options and
+faces, autoloading, and more. It also helps you keep Emacs startup
+fast, even when you use many (even hundreds) of packages.
+
+Note that use-package is not a package manager. Although use-package
+does have the useful capability to interface with the Emacs package
+manager, its primary purpose is help with the configuration and
+loading of packages, not with managing their download, upgrades, and
+installation.
+
+@insertcopying
+
+@menu
+* Basic Concepts:: Basic concepts of use-package.
+* Getting Started:: A gentle introduction to use-package.
+* Loading Packages:: How and when packages are loaded.
+* Configuring Packages:: Package configuration keywords.
+* Installing packages:: Ensuring packages are available.
+* Byte-compiling:: Byte-compiling your init file.
+* Troubleshooting:: What to do when there's trouble.
+
+Appendices
+* Keyword extensions:: Adding new use-package keywords.
+* History:: History and acknowledgments.
+* GNU Free Documentation License:: The license for this manual.
+
+Index
+* Index::
+@end menu
+@end ifnottex
+
+@c ----------------------------------------------------------------------------
+@node Basic Concepts
+@chapter Basic Concepts
+
+use-package provides the @code{use-package} macro, that simplifies the
+customization and use of packages in Emacs. It was created for a few
+basic reasons, each of which drove the design. Understanding these
+reasons may help make some of those decisions clearer:
+
+@cindex reasons for developing use-package
+@enumerate
+@item
+Allow gathering all the configuration details of a package into one
+place, making it easier to copy, disable, or move it elsewhere in the
+init file.
+
+@item
+Reduce duplication and repetitive boilerplate, capturing several
+common practices as mere keywords both easy and intuitive to use.
+
+@item
+Make startup time of Emacs as short as possible, without sacrificing
+the quantity of add-on packages used.
+
+@item
+Ensure that errors encountered during startup disable only the
+package(s) raising the error(s), and as little else as possible,
+leaving Emacs as close to fully functional as possible.
+
+@item
+Allow byte-compiling your init file, so that any warnings or errors
+you see at startup are meaningful. In this way, even if
+byte-compilation is not used for speed (see item 3 above), it can
+still be used as a sanity check.
+@end enumerate
+
+It is worth noting that use-package is not intended to replace the
+standard customization command @w{@kbd{M-x customize}} (@pxref{Easy
+Customization,,, emacs, GNU Emacs Manual}). On the contrary, it is
+designed to work together with it, for things that Customize cannot
+do.
+
+@c ----------------------------------------------------------------------------
+@node Getting Started
+@chapter Getting Started
+@cindex quick-start instructions
+
+This chapter provides instructions and examples for quickly getting
+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:
+
+@lisp
+(use-package foo)
+@end lisp
+
+@noindent
+This declaration is equivalent to using @code{require} (@pxref{Named
+Features,,, elisp, GNU Emacs Lisp Reference Manual}), with some
+use-package specific error handling added in. Just like
+@code{require}, it needs the package @samp{foo} to be installed and
+available via your @code{load-path} (@pxref{Installing packages}).
+
+To evaluate some Lisp @emph{before} the @samp{foo} package is loaded,
+use the @code{:init} keyword:
+
+@lisp
+@group
+(use-package foo
+ :init
+ (setq foo-variable t))
+@end group
+@end lisp
+
+Similarly, @code{:config} can be used to execute code @emph{after} a
+package is loaded. In cases where loading is done lazily
+(@pxref{Loading Packages}), this execution is deferred until after the
+loading actually occurs. As you might expect, you can use
+@code{:init} and @code{:config} together:
+
+@lisp
+@group
+(use-package foo
+ :init
+ (setq foo-variable t)
+ :config
+ (foo-mode 1))
+@end group
+@end lisp
+
+The above declarations will load the @samp{foo} package
+immediately. In most cases, this is not necessary or desirable, as
+that will slow down Emacs startup. Instead, you should try to set
+things up so that packages are only loaded when they are actually
+needed (a.k.a. ``autoloading''). If you have installed a package from
+@acronym{GNU} @acronym{ELPA} that provides it's own autoloads, it is often
+enough to say:
+
+@lisp
+@group
+(use-package foo
+ :defer t)
+@end group
+@end lisp
+
+@noindent
+This will avoid loading the package. Now, when you run any autoloaded
+command, the package @samp{foo} is loaded automatically. (Which
+commands from a package are marked to auto-load by default is the
+decision of the package authors.)
+
+In some cases, you might need or want to provide your own autoloads.
+The more complex example below autoloads the commands
+@code{isearch-moccur} and @code{isearch-all} from the package
+@file{color-moccur.el}, and binds keys both globally and in
+@code{isearch-mode-map}. When one of these two commands are used, the
+package will be loaded. At that point, @code{moccur-edit} is also loaded,
+to allow editing of the @code{moccur} buffer.
+
+@lisp
+@group
+(use-package color-moccur
+ :commands (isearch-moccur isearch-all)
+ :bind (("M-s O" . moccur)
+ :map isearch-mode-map
+ ("M-o" . isearch-moccur)
+ ("M-O" . isearch-moccur-all))
+ :init
+ (setq isearch-lazy-highlight t)
+ :config
+ (use-package moccur-edit))
+@end group
+@end lisp
+
+Some packages will suggest ready-made @code{use-package} declarations
+that you can use. Where possible, it is a good idea to copy them, and
+use that as a starting point.
+
+That should be enough to get you started!
+
+@c ----------------------------------------------------------------------------
+@node Loading Packages
+@chapter Loading Packages
+@cindex loading packages with use-package
+
+Before use-package can load an Emacs Lisp package, it must be
+available in a directory on your @code{load-path}. When you install
+packages using the built-in @code{install-package} command, it will do
+this automatically for you. Packages shipped with Emacs (built-in
+packages) are always available.
+
+Some packages have more than one library. In those cases, you might
+need more than one @code{use-package} declaration to make sure the
+package is properly loaded. For complex configurations, you might
+also need more than one declaration for a package with the same name.
+
+use-package can interface with @samp{package.el} to install packages
+on Emacs start. @xref{Installing packages}, for details.
+
+@menu
+* Loading basics:: How and when packages are loaded.
+* Deferring loading:: Loading packages later.
+* Forcing loading:: Loading packages immediately.
+* Conditional loading:: Loading packages conditionally.
+* Loading sequentially:: Loading packages in sequence.
+* Load dependencies:: Don't load without dependencies.
+* Manual installation:: Loading manually installed packages.
+@end menu
+
+@node Loading basics
+@section How and when use-package loads packages
+
+The call to the @code{use-package} macro will load a package either
+immediately, or when the package is first used (via autoloading). In the
+simplest case, a @code{use-package} declaration loads a package when
+it is evaluated.@footnote{This happens both at run-time and at
+compile-time. @xref{Byte-compiling}.} If the declaration is in your
+init file, this happens automatically each time Emacs is started.
+
+For example, the declaration below immediately loads the library
+@code{foo}, just like @code{require} would:
+
+@lisp
+(use-package foo)
+@end lisp
+
+@noindent
+If the library @samp{foo} is not available in your @code{load-path},
+the declaration logs a warning to the @samp{*Messages*} buffer.
+
+@cindex package vs library
+@c So, confusingly, (use-package foo) actually means to use the
+@c _library_ foo.el, not all of the _package_ foo's libraries?
+@c Should this be explicitly explained here?
+Note that a ``package'' is different from an Emacs Lisp ``library''.
+The above declaration tells use-package to load the @emph{library}
+@file{foo.el}, which in the overwhelming majority of cases also
+resides in a @emph{package} named @code{foo}. But the package
+@code{foo} might also contain a library named @file{foo-extra.el}. If
+that library is not loaded automatically, you will need a separate
+@code{use-package} declaration to make sure that it is loaded when
+needed. This manual will often use the terms ``package'' and
+``library'' interchangeably, as this distinction does not usually
+matter, but you should keep it in mind for the cases when it does.
+
+The details of how and when you should load a package might differ
+from one package to another. When in doubt, refer to the package
+documentation for details.
+
+@node Deferring loading
+@section Deferring package loading
+@cindex deferring loading of package
+
+@cindex autoloading packages
+@cindex loading lazily
+@cindex lazy loading of packages
+In the examples we have seen so far, use-package loads packages every
+time you start Emacs, even if that package is never used. That will
+make starting Emacs slower. use-package therefore allows setting
+things up in such a way that packages are only loaded when some of the
+package's commands is first used (either with @kbd{M-x} or via some key
+binding). This is based on autoloading, a full description of which
+is outside the scope of this manual. @xref{Autoload,,, elisp, GNU
+Emacs Lisp Reference Manual}, for the full story.
+
+@cindex triggers, for loading packages
+Some @code{use-package} keywords provide autoload @dfn{triggers} that
+cause a package to be loaded when certain events occur. For example,
+the @code{:hook} keyword sets up a trigger that fires when the
+specified hook is run, and then loads the package automatically. The
+other trigger keywords, all of which are described later in this
+manual, are @code{:commands}, @code{:bind}, @code{:bind*},
+@code{:bind-keymap}, @code{:bind-keymap*}, @code{:mode}, and
+@code{:interpreter}.
+
+@subheading The @code{:defer} keyword
+
+@findex :defer
+If you did not specify any autoloading keyword, use-package will fall
+back to loading the package immediately (typically when Emacs is
+starting up). This can be overridden using the @code{:defer} keyword.
+It takes one boolean argument: a non-@code{nil} value means to stop
+this package from being immediately loaded. Here is an example of
+using @code{:defer} to postpone loading the package @samp{foo}:
+
+@lisp
+@group
+(use-package foo
+ :defer t)
+@end group
+@end lisp
+
+Using @code{:defer t} by itself like this is rarely useful.
+Typically, you would only use it together with a keyword like
+@code{:config} (@pxref{Lisp Configuration}), or @code{:ensure}
+(@pxref{Installing packages}).
+
+@subheading Defer loading until idle for N seconds
+
+@findex :defer@r{, with a numeric argument}
+You can also give a numeric argument @var{n} to @w{@code{:defer}} to
+specify that a package should be loaded (if it hasn't already) after
+Emacs has been idle for @var{n} seconds. For example, use the
+following to make use-package load @samp{foo} after 30 seconds of idle
+time:
+
+@lisp
+@group
+(use-package foo
+ :defer 30)
+@end group
+@end lisp
+
+@subheading When to use @code{:defer}
+
+When using autoloading keywords, there is no need to also use
+@code{:defer}. It doesn't hurt to add it in this case, perhaps for
+extra clarity, but it is redundant.
+
+You should use @code{:defer} to force deferred loading, in cases when
+use-package isn't creating any autoloads for you. For example, you
+might know that some other package will already do something to cause
+your package to load at the appropriate time. This is usually the
+case when you install a package using @code{package-install}, as
+packages installed in this way normally always have their own
+autoloads already set up.
+
+@subheading Making @w{@code{:defer t}} the default
+
+@cindex defer loading by default
+@cindex lazy loading by default
+@vindex use-package-always-defer
+If you customize the user option @code{use-package-always-defer} to
+non-@code{nil}, the @code{use-package} macro will behave as if
+@w{@code{:defer t}} is always specified. This can be overridden for
+individual declarations using either @w{@code{:defer nil}} or
+@w{@code{:demand t}} (@pxref{Forcing loading}).
+
+@node Forcing loading
+@section Forcing package to load immediately
+@cindex forcing immediate loading
+
+@findex :demand
+The presence of autoloading trigger keywords can be overridden using
+@code{:demand t}, which forces the package to load immediately. Thus,
+even if you use an autoloading keyword such as @code{:bind}
+(@pxref{Key bindings}), adding @code{:demand} will force loading to
+occur immediately. It will also avoid creating an autoload for the
+bound key, as it would be redundant.
+
+If you specify both @w{@code{:demand t}} and @w{@code{:defer t}}, the
+@code{:defer} keyword will take precedence.
+
+@node Conditional loading
+@section Loading packages conditionally
+@cindex conditional loading
+@cindex loading conditions
+
+@findex :if
+@findex :when
+@findex :unless
+The @code{:if}, @code{:when}, and @code{:unless} keywords predicates
+the loading and initialization of packages. They all accept one
+argument, an Emacs Lisp form that is evaluated at run-time.
+
+If the argument of the @code{:if} keyword evaluates to non-@code{nil},
+the package will be loaded and initialized. The @code{:when} keyword
+is provided as an alias for @code{:if}. Finally, the @code{:unless}
+keyword is the inverse of @code{:if}, such that @w{@code{:unless foo}}
+means the same thing as @w{@code{:if (not foo)}}.
+
+For example, if you only want to load @samp{foo} in graphical Emacs
+sessions, you could use the following:
+
+@lisp
+@group
+(use-package foo
+ :if (display-graphic-p))
+@end group
+@end lisp
+
+@subheading Some common use cases
+
+Here are some common cases for conditional loading, and how to achieve
+them.
+
+@c FIXME: Too many redundant examples? E.g., why do we need both an
+@c example for system-type and window-system? or both of the last 2
+@c examples?
+@itemize
+
+@item
+Operating system
+
+The following example loads a package only on GNU/Linux. See the
+docstring of @code{system-type} for other valid values.
+
+@lisp
+:if (eq system-type 'gnu/linux)
+@end lisp
+
+@item
+Window system
+
+The example below loads a package only on macOS and X. See the
+docstring of @code{window-system} for valid values.
+
+@lisp
+:if (memq window-system '(ns x))
+@end lisp
+
+@item
+Installed package
+
+The following example loads a package only when the @samp{foo} package
+is installed.
+
+@lisp
+:if (package-installed-p 'foo)
+@end lisp
+
+@item
+Libraries in @code{load-path}
+
+The example below loads a package only when @file{foo.el} is available
+in your @code{load-path} (for example, if you installed that file
+manually):
+
+@lisp
+:if (locate-library "foo.el")
+@end lisp
+@end itemize
+
+@subheading Making conditional loading affect @code{:preface} and @code{:ensure}
+
+@cindex conditional loading before @code{:preface} or @code{:ensure}
+If you need to make a use-package form conditional so that the condition
+occurs before even @code{:ensure} (@pxref{Install package}) or
+@code{:preface} (@pxref{Preface keyword}), use @code{when}
+around the @code{use-package} form itself. For example:
+
+@lisp
+@group
+(when (memq window-system '(mac ns))
+ (use-package foo
+ :ensure t))
+@end group
+@end lisp
+
+@node Loading sequentially
+@section Loading packages in sequence
+@cindex loading a package after other packages
+
+@findex :after
+Sometimes it only makes sense to configure a package after another one
+has been loaded, because certain variables or functions are not in
+scope until that time. This can be achieved with the @code{:after}
+keyword, which allows a fairly rich description of the exact
+conditions when loading should occur. The @code{:after} keyword takes
+as argument either a symbol indicating the package name, a list of
+such symbols, or a list of selectors (see below).
+
+Here is an example of using the @acronym{GNU} @acronym{ELPA} packages
+@file{hydra}, @file{ivy}, and @file{ivy-hydra}. Note that
+@file{ivy-hydra} will always be loaded last:
+
+@lisp
+(use-package hydra)
+
+(use-package ivy)
+
+@group
+(use-package ivy-hydra
+ :after (ivy hydra))
+@end group
+@end lisp
+
+In this case, because the declarations are evaluated in the order they
+occur, the use of @code{:after} is not strictly necessary. However,
+if @samp{hydra} and @samp{ivy} were to be autoloaded, using
+@code{:after} guarantees that @samp{ivy-hydra} is not loaded until it
+is actually needed. By using @code{:after}, the above code will also
+work even if the order of the declaration changes. This means that
+moving things around in your init file is less likely to break things.
+
+@subheading Using @code{:after} selectors
+
+@findex :all@r{, (with @code{:after})}
+@findex :any@r{, (with @code{:after})}
+@cindex list of selectors, for @code{:after}
+The @code{:after} keyword also accepts a list of selectors. By
+default, @w{@code{:after (foo bar)}} is the same as @w{@code{:after
+(:all foo bar)}}, meaning that loading of the given package will not happen
+until both @code{foo} and @code{bar} have been loaded. Here are some
+of the other possibilities:
+
+@verbatim
+:after (foo bar)
+:after (:all foo bar)
+:after (:any foo bar)
+:after (:all (:any foo bar) (:any baz quux))
+:after (:any (:all foo bar) (:all baz quux))
+@end verbatim
+
+When you nest selectors, such as in @w{@code{(:any (:all foo bar)
+(:all baz quux))}}, it means that the package will be loaded when
+either both @code{foo} and @code{bar} have been loaded, or when both
+@code{baz} and @code{quux} have been loaded.
+
+@cindex @code{use-package-always-defer}, with @code{:after}
+Pay attention when setting @code{use-package-always-defer} to a
+non-@code{nil} value, and also using the @code{:after} keyword. In
+that case, you will need to specify how the declared package is to be
+loaded: for example, by some @code{:bind} (@pxref{Global
+keybindings}). If you are not using one of the keywords that
+registers autoloads, such as @code{:bind} or @code{:hook}
+(@pxref{Hooks}), and your package manager does not provide autoloads,
+it is possible that your package will never be loaded if you do not
+add @code{:demand t} to those declarations.
+
+@node Load dependencies
+@section Prevent loading if dependencies are missing
+@cindex prevent loading package if dependencies are missing
+
+@findex :requires
+While the @code{:after} keyword delays loading until the dependencies
+are loaded, the somewhat simpler @code{:requires} keyword @emph{never}
+loads the package if the dependencies are not available when the
+@code{use-package} declaration is evaluated. In this context,
+``available'' means that @code{foo} is available if @w{@code{(featurep
+'foo)}} evaluates to a non-@code{nil} value. For example:
+
+@lisp
+@group
+(use-package abbrev
+ :requires foo)
+@end group
+@end lisp
+
+@noindent
+This is the same as:
+
+@lisp
+@group
+(use-package abbrev
+ :if (featurep 'foo))
+@end group
+@end lisp
+
+As a convenience, a list of such packages may be specified:
+
+@lisp
+@group
+(use-package abbrev
+ :requires (foo bar baz))
+@end group
+@end lisp
+
+For more complex logic, such as that supported by @code{:after},
+simply use @code{:if} and the appropriate Lisp expression.
+
+@node Manual installation
+@section Manually installed package
+
+When installing packages manually, without Emacs' built-in package
+manager (@file{package.el}), it will obviously not help you set up
+autoloads or add it to your @code{load-path}. You must do it
+yourself. However, use-package makes this more convenient.
+
+@menu
+* Load path:: Using a custom @code{load-path}.
+* Manual autoloads:: Setting up autoloads manually.
+@end menu
+
+@node Load path
+@subsection Setting a custom @code{load-path}
+@cindex custom @code{load-path} for loading a package
+@cindex @code{load-path}, add directories for loading a package
+
+When installing packages manually, you must make sure its libraries
+are available on your @code{load-path}. @xref{Lisp Libraries,,,
+emacs, GNU Emacs Manual}, for more details about package loading.
+
+@findex :load-path
+The @code{:load-path} keyword provides a convenient way to add
+directories to your load path. It takes as argument a symbol, a
+function, a string or a list of strings. If a directory is specified
+as a relative file name, it is expanded relative to
+@code{user-emacs-directory}.
+
+For example:
+
+@lisp
+@group
+(use-package org
+ :load-path "site-lisp/org/lisp/"
+ :commands org-mode)
+@end group
+@end lisp
+
+When using a symbol or a function to provide a dynamically generated
+list of directories, you must inform the byte-compiler of this
+definition, so that the value is available at byte-compilation time.
+This is done by using the special form @code{eval-and-compile} (as
+opposed to @code{eval-when-compile}, @pxref{Eval During Compile,,,
+elisp, GNU Emacs Lisp Reference Manual}). Furthermore, this value is
+fixed to the value it had during compilation. If the operation is
+costly, you do not have to repeat it again on each startup. For
+example:
+
+@lisp
+@group
+(eval-and-compile
+ (defun ess-site-load-path ()
+ (shell-command-to-string "find ~ -path ess/lisp")))
+@end group
+
+@group
+(use-package ess-site
+ :load-path (lambda () (list (ess-site-load-path)))
+ :commands R)
+@end group
+@end lisp
+
+@node Manual autoloads
+@subsection Setting up autoloads manually
+
+Packages often document how to set up its autoloads when it is being
+manually installed. If it does, follow those instructions.
+Otherwise, you might want to set them up manually.
+
+@cindex autoloads for packages, setting up manually
+@cindex package autoloads, setting up manually
+
+@findex :commands
+@findex :autoload
+To autoload an interactive command, use the @code{:commands} keyword,
+which takes either a symbol or a list of symbols as its argument. It
+creates autoloads for those commands (which defers loading of the
+module until those commands are used).
+
+The @code{:autoload} keyword takes the same arguments as
+@code{:commands}, but is used to autoload non-interactive functions.
+Here is an example:
+
+@lisp
+@group
+(use-package org-crypt
+ :autoload org-crypt-use-before-save-magic)
+@end group
+@end lisp
+
+@c ----------------------------------------------------------------------------
+@node Configuring Packages
+@chapter Configuring Packages
+@cindex configure packages using @code{use-package}
+@cindex customize package configuration
+
+This chapter describes the various keywords provided by
+@code{use-package} that help you configure packages.
+
+@menu
+* Lisp Configuration:: Using Lisp to configure packages.
+* Key bindings:: Making your own keybindings.
+* Hooks:: Adding functions to hooks.
+* Modes and interpreters:: Enabling modes automatically.
+* Magic handlers:: Using regexps to enable modes.
+* User options:: Setting user options.
+* Faces:: Customizing faces.
+* Hiding minor modes:: Tidying up the mode line.
+@end menu
+
+@node Lisp Configuration
+@section Using Lisp code for configuring packages
+@cindex configure package using Lisp forms
+
+The most general way to add customizations are the @code{:preface},
+@code{:init}, and @code{:config} keywords. They all accept one or
+more Emacs Lisp forms, up to the next keyword, that are evaluated in
+order. This lets you add arbitrary Lisp code to your
+@code{use-package} declarations.
+
+The only difference between these keywords is when they are evaluated.
+
+@menu
+* Preface keyword:: Evaluate code before anything else.
+* Init keyword:: Evaluate code before loading package.
+* Config keyword:: Evaluate code after loading package.
+* Best practices:: When to use @code{:config}, @code{:init}, and @code{:preface}.
+@end menu
+
+@node Preface keyword
+@subsection @code{:preface} is evaluated first
+
+@findex :preface
+The @code{:preface} section is evaluated before anything else, except
+@code{:disabled} and @code{:ensure}. It can be used to establish
+function and variable definitions that will:
+
+@enumerate
+@item
+Make the byte-compiler happy: it will not complain about functions
+whose definitions are unknown.
+
+@item
+Define functions and variables that will be used in an @code{:if}
+test.
+@end enumerate
+
+Note that whatever is specified within @code{:preface} is evaluated
+both at load time and at byte-compilation time, in order to ensure
+that definitions are seen by both the Lisp evaluator and the
+byte-compiler. Therefore, you should avoid having any side-effects in
+your @code{:preface} forms, and restrict them to symbol declarations
+and definitions.
+
+@node Init keyword
+@subsection @code{:init} is evaluated before loading package
+
+@findex :init
+The @code{:init} section is evaluated just before the package is
+loaded. Note that the @code{:init} form is run unconditionally --
+even if the package happens to not exist on your system. You must
+therefore remember to restrict @code{:init} code to what would succeed
+either way; put the rest in the @code{:config} section. @code{:init}
+also always happens before package load, whether @code{:config} has
+been deferred or not.
+
+@node Config keyword
+@subsection @code{:config} is evaluated after loading package
+
+@findex :config
+The @code{:config} section is evaluated after the package has been
+loaded. If the package is loaded immediately, this happens
+immediately after that, but if loading is done lazily (@pxref{Loading
+Packages}), this is deferred until after the package has been loaded.
+
+In general, you should keep @code{:init} forms as simple and quick as
+possible, and put as much as you can get away with into the
+@code{:config} section. That way, deferred loading can help your
+Emacs start as quickly as possible.
+
+@node Best practices
+@subheading When to use @code{:preface}, @code{:config} and @code{:init}?
+@cindex tips for using @code{:preface}, @code{:config}, @code{:init}
+
+Where possible, it is better to avoid @code{:preface}, @code{:config}
+and @code{:init}. Instead, prefer autoloading keywords such as
+@code{:bind} (@pxref{Key bindings}), @code{:hook} (@pxref{Hooks}), and
+@code{:mode} (@pxref{Modes and interpreters}), as they will take care
+of setting up autoloads for you without any need for boilerplate code.
+For example, consider the following declaration:
+
+@lisp
+@group
+(use-package foo
+ :init
+ (add-hook 'some-hook 'foo-mode))
+@end group
+@end lisp
+
+@noindent
+This has two problems. First, it will unconditionally load the
+package @samp{foo} on startup, which will make things slower. You can
+fix this by adding @w{@code{:defer t}}:
+
+@lisp
+@group
+(use-package foo
+ :defer t
+ :init
+ (add-hook 'some-hook 'foo-mode))
+@end group
+@end lisp
+
+@noindent
+This is better, as @samp{foo} is now only loaded when it is actually
+needed (that is, when the hook @samp{some-hook} is run).
+
+The second problem is that there is a lot of boilerplate that you have
+to write. In this case, it might not be so bad, but avoiding that was
+what use-package was made to allow. The better option in this case is
+therefore to use @code{:hook} (@pxref{Hooks}), which also implies
+@w{@code{:defer t}}. The above is thereby reduced down to:
+
+@lisp
+@group
+(use-package foo
+ :hook some-hook)
+@end group
+@end lisp
+
+Now use-package will set up autoloading for you, and your Emacs
+startup time will not suffer one bit.
+
+@node Key bindings
+@section Key bindings
+
+@cindex binding keys for package commands
+@cindex key bindings for package commands
+One common thing to do when loading a package is to bind keys to
+commands within that module. Without use-package, this would be done
+using a combination of @code{keymap-local-set},
+@code{keymap-global-set} and various autoloads. With use-package, you
+can simplify this using the @code{:bind} keyword, as described in this
+section.
+
+@menu
+* Global keybindings:: Bindings you can use anywhere.
+* Binding in keymaps:: Bindings for particular modes.
+* Binding to a keymap:: Binding a key to a keymap.
+* Binding to repeat-maps:: Binding repeating keys.
+* Displaying keybindings:: Displaying personal key bindings.
+@end menu
+
+@node Global keybindings
+@subsection Global keybindings
+@cindex global keybindings
+
+@findex :bind
+To bind keys globally, the @code{:bind} keyword takes as its argument
+either a single cons or a list of conses. Each cons has the form
+@w{@code{(@var{key} . @var{command})}}, where @var{key} is a string
+indicating the key to bind, and @var{command} is the name of a command
+(a symbol). The syntax for the keys is similar to the syntax used by
+the @code{kbd} function (see @ref{Init Rebinding,,, emacs, GNU Emacs
+Manual}, for more information).
+
+@subheading Using @code{:bind} with a single cons
+
+Here is an example of using a single cons:
+
+@lisp
+@group
+(use-package ace-jump-mode
+ :bind ("C-." . ace-jump-mode))
+@end group
+@end lisp
+
+@noindent
+This does two things: first, it creates an autoload for the
+@code{ace-jump-mode} command and defers loading of the
+@code{ace-jump-mode} package until you actually use it. Second, it
+binds the key @code{C-.} to that command globally.
+
+@subheading Using @code{:bind} with a list of conses
+
+Here is an example of using @code{:bind} with a list of conses:
+
+@lisp
+@group
+(use-package hi-lock
+ :bind (("M-o l" . highlight-lines-matching-regexp)
+ ("M-o r" . highlight-regexp)
+ ("M-o w" . highlight-phrase)))
+@end group
+@end lisp
+
+@noindent
+This binds the three key sequences to the corresponding commands.
+
+@subheading Using special keys
+@cindex binding function keys with @code{:bind}
+@cindex @code{:bind}, and function keys
+
+@c FIXME: TAB vs [tab] -- is letter-case important? In general, these
+@c are two different keys: one is an ASCII character, the other a
+@c function key on GUI frames.
+Inside key strings, special keys like @kbd{TAB} or @kbd{F1}--@kbd{F12}
+have to be written inside angle brackets, e.g., @code{"C-<up>"}.
+@c FIXME: ``Some combinations''? which ones?
+Standalone special keys (and some combinations) can be written in
+square brackets, e.g.@ @code{[tab]} instead of @code{"<tab>"}.
+
+Examples:
+
+@lisp
+@group
+(use-package helm
+ :bind (("M-x" . helm-M-x)
+ ("M-<f5>" . helm-find-files)
+ ([f10] . helm-buffers-list)
+ ([S-f10] . helm-recentf)))
+@end group
+@end lisp
+
+@subheading Remapping commands
+@cindex remapping commands with @code{:bind}
+@cindex @code{:bind}, and remapping of commands
+
+Remapping of commands with @code{:bind} and @code{bind-key} works as
+expected, because when the binding is a vector, it is passed straight
+to @code{define-key}. @xref{Remapping Commands,,, elisp, GNU Emacs
+Lisp Reference Manual}), for more information about command remapping.
+For example, the following declaration will rebind
+@code{fill-paragraph} (bound to @kbd{M-q} by default) to
+@code{unfill-toggle}:
+
+@lisp
+@group
+(use-package unfill
+ :bind ([remap fill-paragraph] . unfill-toggle))
+@end group
+@end lisp
+
+@c FIXME: Should the below be an Appendix?
+@subheading What @code{:bind} does behind the scenes
+@cindex @code{:bind}, internals
+
+To understand what @code{:bind} does behind the scenes, it might be
+useful to consider an example:
+
+@lisp
+@group
+(use-package ace-jump-mode
+ :bind ("C-." . ace-jump-mode))
+@end group
+@end lisp
+
+@noindent
+This could be expressed in a much more verbose way with the
+@code{:commands} and @code{:init} keywords:
+
+@lisp
+@group
+(use-package ace-jump-mode
+ :commands ace-jump-mode
+ :init
+ (bind-key "C-." 'ace-jump-mode))
+@end group
+@end lisp
+
+@noindent
+Without using even the @code{:commands} keyword, we could also write
+the above like so:
+
+@lisp
+@group
+(use-package ace-jump-mode
+ :defer t
+ :init
+ (autoload 'ace-jump-mode "ace-jump-mode" nil t)
+ (bind-key "C-." 'ace-jump-mode))
+@end group
+@end lisp
+
+Although these three forms are all equivalent, the first form is
+usually the best, as it will save some typing.
+
+@node Binding in keymaps
+@subsection Key bindings in local keymaps
+@cindex local keybindings
+
+@findex :map@r{, inside} :bind
+Slightly different from binding a key to a keymap, is binding a key
+@emph{within} a local keymap that only exists after the package is
+loaded. @code{use-package} supports this with a @code{:map} modifier,
+taking the local keymap to bind to:
+
+@lisp
+@group
+(use-package helm
+ :bind (:map helm-command-map
+ ("C-c h" . helm-execute-persistent-action)))
+@end group
+@end lisp
+
+@noindent
+The effect of this is to wait until @code{helm} has loaded, and then
+to bind the key sequence @kbd{C-c h} to
+@code{helm-execute-persistent-action} within Helm's local keymap,
+@code{helm-command-map}.
+
+Multiple uses of @code{:map} may be specified. Any binding occurring
+before the first use of @code{:map} are applied to the global keymap:
+
+@lisp
+@group
+(use-package term
+ :bind (("C-c t" . term)
+ :map term-mode-map
+ ("M-p" . term-send-up)
+ ("M-n" . term-send-down)
+ :map term-raw-map
+ ("M-o" . other-window)
+ ("M-p" . term-send-up)
+ ("M-n" . term-send-down)))
+@end group
+@end lisp
+
+@node Binding to a keymap
+@subsection Binding to keymaps
+@cindex binding keys to keymaps
+
+@findex :bind-keymap
+Normally @code{:bind} expects that commands are functions that will be
+autoloaded from the given package. However, this does not work if one of
+those commands is actually a keymap, since keymaps are not functions,
+and cannot be autoloaded using the built-in @code{autoload} function.
+
+To handle this case, @code{use-package} offers a special, limited
+variant of @code{:bind} called @code{:bind-keymap}. The only difference
+is that the ``commands'' bound to by @code{:bind-keymap} must be keymaps
+defined in the package, rather than interactive functions. This is handled
+behind the scenes by generating custom code that loads the package
+containing the keymap, and then re-executes your keypress after the
+first load, to reinterpret that keypress as a prefix key.
+
+For example:
+
+@lisp
+@group
+(use-package foo
+ :bind-keymap ("C-c p" . foo-command-map))
+@end group
+@end lisp
+
+@node Binding to repeat-maps
+@subsection Binding to repeat-maps
+@cindex keybinding for @code{repeat-mode} keymaps
+
+@findex :repeat-map@r{, inside} :bind
+@cindex @code{repeat-mode} and use-package, using
+A special case of binding within a local keymap is when that keymap is
+used by @code{repeat-mode} (@pxref{Repeating,,, emacs, GNU Emacs
+Manual}). These keymaps are usually defined specifically for
+this. Using the @code{:repeat-map} keyword, and passing it a name for
+the map it defines, will bind all the following keys inside that map, and
+(by default) set the @code{repeat-map} property of each bound command
+to that map.
+
+The following example creates a keymap called
+@code{git-gutter+-repeat-map}, makes four bindings in it, then sets
+the @code{repeat-map} property of each bound command
+(@code{git-gutter+-next-hunk}, @code{git-gutter+-previous-hunk},
+@code{git-gutter+-stage-hunks}, and @code{git-gutter+-revert-hunk}) to
+that keymap.
+
+@lisp
+@group
+(use-package git-gutter+
+ :bind
+ (:repeat-map git-gutter+-repeat-map
+ ("n" . git-gutter+-next-hunk)
+ ("p" . git-gutter+-previous-hunk)
+ ("s" . git-gutter+-stage-hunks)
+ ("r" . git-gutter+-revert-hunk)))
+@end group
+@end lisp
+
+@findex :exit@r{, inside} :repeat-map@r{ and} :bind
+@cindex binding commands used at end of repeat series
+Specifying @code{:exit} inside the scope of @code{:repeat-map} will
+prevent the @code{repeat-map} property from being set, so that the command
+can be used from within the repeat map, but after using it the repeat
+map will no longer be available. This is useful for commands often used
+at the end of a series of repeated commands. Example:
+
+@lisp
+@group
+(use-package git-gutter+
+ :bind
+ (:repeat-map my/git-gutter+-repeat-map
+ ("n" . git-gutter+-next-hunk)
+ ("p" . git-gutter+-previous-hunk)
+ ("s" . git-gutter+-stage-hunks)
+ ("r" . git-gutter+-revert-hunk)
+ :exit
+ ("c" . magit-commit-create)
+ ("C" . magit-commit)
+ ("b" . magit-blame)))
+@end group
+@end lisp
+
+@findex :continue@r{, inside} :repeat-map@r{ and} :bind
+Specifying @code{:continue} @emph{forces} setting the
+@code{repeat-map} property (just like @emph{not} specifying
+@code{:exit}), so the above snippet is equivalent to:
+
+@lisp
+@group
+(use-package git-gutter+
+ :bind
+ (:repeat-map my/git-gutter+-repeat-map
+ :exit
+ ("c" . magit-commit-create)
+ ("C" . magit-commit)
+ ("b" . magit-blame)
+ :continue
+ ("n" . git-gutter+-next-hunk)
+ ("p" . git-gutter+-previous-hunk)
+ ("s" . git-gutter+-stage-hunks)
+ ("r" . git-gutter+-revert-hunk)))
+@end group
+@end lisp
+
+@node Displaying keybindings
+@subsection Displaying personal keybindings
+@cindex display your keybindings
+
+@findex describe-personal-keybindings
+The @code{:bind} keyword uses the @code{bind-keys} macro from the
+@samp{bind-key.el} library to set up keybindings. It keeps track of
+all keybindings you make, so that you can display them separately from
+the default keybindings.
+
+Use @w{@kbd{M-x describe-personal-keybindings}} to see all
+keybindings you've set using either the @code{:bind} keyword or the
+@code{bind-keys} macro.
+
+@node Hooks
+@section Hooks
+
+@cindex hooks
+@findex :hook
+The @code{:hook} keyword allows adding functions to hooks. It takes
+@c FIXME: The actual forms accepted by :hook are different, see below!
+one argument of the form @var{hooks}, specifying one or more functions
+to add to one or more hooks. For the purposes of @code{:hook}, the
+name of hook variables should always exclude the @samp{-hook} suffix.
+It is appended automatically for you, to save some typing.
+
+For example, consider the following @code{use-package} declaration
+that sets up autoloads for @code{company-mode} from the @samp{company}
+package, and adds @samp{company-mode} to @code{prog-mode-hook}:
+
+@lisp
+@group
+(use-package company
+ :commands company-mode
+ :init
+ (add-hook 'prog-mode-hook #'company-mode))
+@end group
+@end lisp
+
+Using @code{:hook}, this can be simplified to:
+
+@lisp
+@group
+(use-package company
+ :hook (prog-mode . company-mode))
+@end group
+@end lisp
+
+Here, @code{:hook} will automatically set up autoloads for the
+@code{company-mode} command, so there is no need to use
+@code{:commands}.
+
+The @code{:hook} keyword will also assume that the name of the
+function you want to add is the same as the package name with
+@samp{-mode} appended to it. Taking this into account, you can
+simplify the above to the equivalent:
+
+@lisp
+@group
+(use-package company
+ :hook prog-mode)
+@end group
+@end lisp
+
+@cindex multiple hooks
+You can also provide a list of hooks. When multiple hooks should be
+applied, the following examples are all equivalent:
+
+@lisp
+@group
+(use-package company
+ :hook (prog-mode text-mode))
+@end group
+
+@group
+(use-package company
+ :hook ((prog-mode text-mode) . company-mode))
+@end group
+
+@group
+(use-package company
+ :hook ((prog-mode . company-mode)
+ (text-mode . company-mode)))
+@end group
+
+@group
+(use-package company
+ :commands company-mode
+ :init
+ (add-hook 'prog-mode-hook #'company-mode)
+ (add-hook 'text-mode-hook #'company-mode))
+@end group
+@end lisp
+
+One common mistake when using @code{:hook} is to forget to omit the
+@samp{-hook} suffix, which, as already explained, is appended
+automatically. Therefore, the following will not work, as it attempts
+to add a function to non-existent @code{prog-mode-hook-hook}:
+
+@lisp
+@group
+;; DOES NOT WORK
+(use-package ace-jump-mode
+ :hook (prog-mode-hook . ace-jump-mode))
+@end group
+@end lisp
+
+@vindex use-package-hook-name-suffix
+If you do not like this behavior, you can customize the user option
+@code{use-package-hook-name-suffix} to @code{nil}. The value of this
+variable is @samp{"-hook"} by default.
+
+The use of @code{:hook}, as with @code{:bind}, @code{:mode},
+@code{:interpreter}, etc., causes the functions being hooked to
+implicitly be read as @code{:commands}. This means that they will
+establish interactive @code{autoload} definitions for that module, if
+not already defined as functions), and so @code{:defer t} is also
+implied by @code{:hook}.
+
+@node Modes and interpreters
+@section Modes and interpreters
+@cindex @code{auto-mode-alist} customization
+@cindex @code{interpreter-mode-alist} customization
+@cindex setting up major modes
+
+@findex :mode
+@findex :interpreter
+Similar to @code{:bind}, you can use @code{:mode} and
+@code{:interpreter} to establish a deferred binding within the
+@code{auto-mode-alist} and @code{interpreter-mode-alist} variables
+(@pxref{Auto Major Mode,,, elisp, GNU Emacs Lisp Reference Manual}).
+The specifier to either keyword can be a cons cell, a list of cons
+cells, or a string or regexp.
+
+The following example reproduces the default @code{ruby-mode}
+configuration, exactly as it is in Emacs out-of-the-box. That mode is
+enabled automatically when a file whose name matches the regexp
+@code{"\\.rb\\'"} (a file with the @file{.rb} extension), or when the
+first line of the file (known as the ``shebang'') matches the string
+@code{"ruby"}:
+
+@lisp
+@group
+(use-package ruby-mode
+ :mode "\\.rb\\'"
+ :interpreter "ruby")
+@end group
+@end lisp
+
+The default @code{python-mode} configuration can be reproduced using
+the declaration below. Note that the package that should be loaded
+differs from the mode name in this case, so we must use a cons:
+
+@lisp
+@group
+;; The package is "python" but the mode is "python-mode":
+(use-package python
+ :mode ("\\.py\\'" . python-mode)
+ :interpreter ("python" . python-mode))
+@end group
+@end lisp
+
+Both the @code{:mode} and @code{:interpreter} keywords also accept a
+list of regexps:
+
+@lisp
+@group
+(use-package foo
+ ;; Equivalent to "\\(ba[rz]\\)\\'":
+ :mode ("\\.bar\\'" "\\.baz\\'")
+ ;; Equivalent to "\\(foo[ab]\\)":
+ :interpreter ("fooa" "foob"))
+@end group
+@end lisp
+
+@node Magic handlers
+@section Magic handlers
+@cindex @code{magic-mode-alist} customization
+
+@findex :magic
+@findex :magic-fallback
+Similar to @code{:mode} and @code{:interpreter}, you can also use
+@code{:magic} and @code{:magic-fallback} to cause certain function to
+be run if the beginning of a file matches a given regular expression,
+as if these regular expressions were added to @code{magic-mode-alist}
+and @code{magic-fallback-mode-alist} (@pxref{Auto Major Mode,,, elisp,
+GNU Emacs Lisp Reference Manual}). The difference between
+@code{:magic} and @code{:magic-fallback}, is that the latter has a
+lower priority than @code{:mode}.
+
+Here is an example:
+
+@lisp
+@group
+(use-package pdf-tools
+ :magic ("%PDF" . pdf-view-mode)
+ :config
+ (pdf-tools-install :no-query))
+@end group
+@end lisp
+
+This registers an autoloaded command for @code{pdf-view-mode}, defers
+loading of @code{pdf-tools}, and runs @code{pdf-view-mode} if the
+beginning of a buffer matches the string @code{"%PDF"}.
+
+@node User options
+@section User options
+@cindex customization of variables
+@cindex variable customizations
+@cindex user options, setting
+
+@findex :custom
+In Emacs, you normally set customizable variables (user options) using
+the @code{M-x customize} interface (@pxref{Easy Customization,,,
+emacs, GNU Emacs Manual}). We recommend this method for most users.
+However, it is also possible to set them in your @code{use-package}
+declarations by using the @code{:custom} keyword.
+
+@lisp
+@group
+(use-package comint
+ :defer t
+ :custom
+ (comint-buffer-maximum-size 20000 "Increase comint buffer size.")
+ (comint-prompt-read-only t "Make the prompt read only."))
+@end group
+@end lisp
+
+This is better than using @code{setq} in a @code{:config} block, as
+customizable variables might have some code associated with it that
+Emacs will execute when you assign values to them. (In Emacs 29 and
+later, there is also the new @code{setopt} macro that does this for
+you.)
+
+Note that the values customized using @code{:custom} are @emph{not}
+saved in the standard Emacs @code{custom-file} (@pxref{Saving
+Customizations,,, emacs, GNU Emacs Manual}). You should therefore set
+each user option using either the @code{:custom} keyword @emph{or}
+@w{@kbd{M-x customize-option}} command; the latter will save
+customized values in the Emacs @code{custom-file}. Do not use both
+for the same variable, as this risks having conflicting values in your
+use-package declaration and your @code{custom-file}, which can lead to
+problems that are both tricky and tedious to debug.
+
+@node Faces
+@section Faces
+@cindex faces, setting
+@cindex customization of faces
+
+@findex :custom-face
+The @code{:custom-face} keyword allows customization of package's
+faces. Example:
+
+@lisp
+@group
+(use-package eruby-mode
+ :custom-face
+ (eruby-standard-face ((t (:slant italic)))))
+@end group
+
+@group
+(use-package example
+ :custom-face
+ (example-1-face ((t (:foreground "LightPink"))))
+ (example-2-face ((t (:foreground "LightGreen"))) face-defspec-spec))
+@end group
+
+@group
+(use-package zenburn-theme
+ :preface
+ (setq my/zenburn-colors-alist
+ '((fg . "#DCDCCC") (bg . "#1C1C1C") (cyan . "#93E0E3")))
+ :custom-face
+ (region ((t (:background ,(alist-get my/zenburn-colors-alist 'cyan)))))
+ :config
+ (load-theme 'zenburn t))
+@end group
+@end lisp
+
+@node Hiding minor modes
+@section Hiding minor modes with diminish and delight
+@cindex hiding minor modes
+
+@code{use-package} supports the @file{diminish} and @file{delight}
+packages, both of which make it possible to remove or change minor mode
+strings in your mode-line. Which one to use is up to you, but you
+should normally only use one or the other -- never both.@footnote{When
+in doubt, you might as well use @file{diminish}.} To use either of them, you
+must first install the corresponding package from @acronym{GNU} @acronym{ELPA}.
+
+@menu
+* Diminish:: Hiding minor modes with Diminish.
+* Delight:: Hiding minor modes with Delight.
+@end menu
+
+@node Diminish
+@subsection Diminish
+
+@findex :diminish
+When diminish@footnote{The @file{diminish} package is installable from
+@acronym{GNU} @acronym{ELPA}.} is installed, you can use the @code{:diminish}
+keyword. If @file{diminish} is not installed, the @code{:diminish} keyword
+does nothing.
+
+First, add the following declaration to the beginning of your init
+file.
+
+@lisp
+(use-package diminish :ensure t)
+@end lisp
+
+@noindent
+The optional @w{@code{:ensure t}} makes sure the package is installed
+if it isn't already (@pxref{Installing packages}).
+
+The @code{:diminish} keyword takes as its argument either a minor mode
+symbol, a cons of the symbol and its replacement string, or just a
+replacement string, in which case the minor mode symbol is guessed to
+be the package name with @samp{-mode} appended at the end:
+
+@lisp
+@group
+(use-package abbrev
+ :diminish abbrev-mode
+ :config
+ (if (file-exists-p abbrev-file-name)
+ (quietly-read-abbrev-file)))
+@end group
+@end lisp
+
+@node Delight
+@subsection Delight
+
+@findex :delight
+When @file{delight}@footnote{The @file{delight} package is installable from
+@acronym{GNU} @acronym{ELPA}.} is installed, you can use the
+@code{:delight} keyword. If @file{delight} is not installed, the
+@code{:delight} keyword does nothing.
+
+First, add the following declaration to the beginning of your init
+file.
+
+@lisp
+(use-package delight :ensure t)
+@end lisp
+
+@noindent
+The optional @w{@code{:ensure t}} makes sure the package is installed
+if it isn't already (@pxref{Installing packages}).
+
+The @code{:delight} keyword takes as its argument a minor mode symbol,
+a replacement string, or quoted mode line data (in which case the
+minor mode symbol is assumed to be the package name with @samp{-mode}
+appended at the end), both of these, or several lists of both.
+@xref{Mode Line Data,,, elisp, GNU Emacs Lisp Reference Manual}. If
+no arguments are provided, the default mode name is hidden completely.
+
+For example, the following hides everything for the @samp{foo-mode}
+minor mode in the @samp{foo} package:
+
+@lisp
+@group
+(use-package foo
+ :delight)
+@end group
+@end lisp
+
+If the mode name doesn't match the package name with @samp{-mode}
+appended, provide a symbol instead. For example, the following hides
+@code{auto-revert-mode} from the mode line:
+
+@lisp
+@group
+;; Don't show anything for auto-revert-mode, which doesn't match
+;; its package name.
+(use-package autorevert
+ :delight auto-revert-mode)
+@end group
+@end lisp
+
+You can also use arbitrary Lisp code as argument of @code{:delight}.
+For example, to replace @samp{foo-mode} with the value of the current
+buffer:
+
+@lisp
+@group
+(use-package foo
+ :delight '(:eval buffer-file-name))
+@end group
+@end lisp
+
+Here is an example of hiding several built-in minor modes:
+
+@lisp
+@group
+;; Completely hide visual-line-mode and change auto-fill-mode to " AF".
+(use-package emacs
+ :delight
+ (auto-fill-function " AF")
+ (visual-line-mode))
+@end group
+@end lisp
+
+@c ----------------------------------------------------------------------------
+@node Installing packages
+@chapter Installing packages automatically
+
+The standard Emacs package manager is documented in the Emacs manual
+(@pxref{Package Installation,,, emacs, GNU Emacs Manual}). The
+@code{use-package} macro provides the @code{:ensure} and @code{:pin}
+keywords that interface with that package manager to automatically
+install packages. This is particularly useful if you use your init
+file on more than one system.
+
+@menu
+* Install package::
+* Pinning packages::
+* Other package managers::
+@end menu
+
+@node Install package
+@section Installing package
+@cindex installing packages from archives
+
+@findex :ensure
+The @code{:ensure} keyword makes use-package ask the Emacs package
+manager to install a package if it is not already present on your
+system.
+
+For example:
+
+@lisp
+@group
+(use-package magit
+ :ensure t)
+@end group
+@end lisp
+
+If you need to install a different package from the one named by
+@code{use-package}, you can use a symbol:
+
+@lisp
+@group
+(use-package tex
+ :ensure auctex)
+@end group
+@end lisp
+
+@vindex use-package-always-ensure
+You can customize the user option @code{use-package-always-ensure} to
+a non-@code{nil} value if you want this behavior to be global for all
+packages:
+
+@lisp
+@group
+(require 'use-package-ensure)
+(setq use-package-always-ensure t)
+@end group
+@end lisp
+
+@noindent
+You can override the above setting for a single package by adding
+@w{@code{:ensure nil}} to its declaration.
+
+@node Pinning packages
+@section Pinning packages using @code{:pin}
+@cindex installing package from specific archive
+@cindex pinning a package to archive
+
+@findex :pin
+use-package can @dfn{pin} a package to a specific archive using the
+@code{:pin} keyword.@footnote{The @code{:pin} keyword has no effect on
+Emacs versions older than 24.4.} This allows you to mix and match
+packages from different archives. The primary use-case for this is
+preferring to install packages from @acronym{GNU} @acronym{ELPA} or
+@acronym{NonGNU} @acronym{ELPA} (indicated by @code{gnu} and @code{nongnu},
+respectively), while installing specific packages from third-party
+archives.
+
+For example:
+
+@lisp
+@group
+(use-package company
+ :ensure t
+ :pin gnu) ; GNU ELPA
+@end group
+@end lisp
+
+@vindex use-package-always-pin
+Unfortunately, the third-party archive @acronym{MELPA} uses a
+versioning scheme based on dates, which means that packages from that
+archive are always preferred. If you are using that archive, we
+strongly encourage you to customize @code{use-package-always-pin} to
+@code{nongnu}. This guarantees that you are using a version of that
+package that has been specifically marked for release by its
+developer, and not a development snapshot.
+
+@cindex manual update of packages
+@c FIXME: This needs clarifying. AFAIK, :ensure does not update packages.
+If you want to manually keep a package updated and ignore upstream
+updates, you can pin it to @samp{manual}. This will work as long as
+you have not customized a repository to use that name in the
+@code{package-archives} variable.
+
+Example:
+
+@lisp
+@group
+(use-package org
+ :ensure t
+ ;; ignore org-mode from upstream and use a manually installed version
+ :pin manual)
+@end group
+@end lisp
+
+@code{use-package} signals an error if you try to pin a package to an
+archive that is not configured using @code{package-archives} (except
+from the special @samp{manual} archive).
+
+@node Other package managers
+@section Non-standard package managers
+@cindex non-standard package managers
+@cindex package managers, other than @file{package.el}
+@cindex installing using non-standard package managers
+
+By default, use-package assumes that you are using the Emacs built-in
+@file{package.el} package manager. We expect that most users will
+find that it is capable enough, even for advanced use cases.
+
+@vindex use-package-ensure-function
+However, some users might prefer to use a third-party package manager
+for a specific circumstance or use case. By setting the user option
+@code{use-package-ensure-function} to the name of a function, you can
+direct @code{:ensure} to use a different package manager for
+installing packages.
+
+For more details, please see the documentation of the package manager
+you are using. If you run into any bugs, it is often best to report
+them directly to the developers of that package manager.
+
+@c ----------------------------------------------------------------------------
+@node Byte-compiling
+@chapter Byte-compiling your init file
+@cindex byte-compiling your init file
+
+Some users might want to byte-compile their init file to make Emacs
+startup faster. This is not recommended in most cases, as the
+speed-up is usually too small to be worth it, and it can lead to
+confusion if the byte-compiled files are out-of-date. If you still
+want to do it, this chapter explains how to do that.
+
+@code{use-package} always loads every library that it can while a file
+is being byte-compiled. This helps silence spurious warnings about
+unknown variables and functions.
+
+@findex :defines
+@findex :functions
+@cindex silence byte-compilation warnings
+However, there are times when this is just not enough. For those
+times, use the @code{:defines} and @code{:functions} keywords to
+introduce dummy variable and function declarations solely for the sake
+of silencing byte-compiler warnings. For example:
+
+@lisp
+@group
+(use-package texinfo
+ :defines texinfo-section-list
+ :commands texinfo-mode
+ :init
+ (add-to-list 'auto-mode-alist '("\\.texi$" . texinfo-mode)))
+@end group
+@end lisp
+
+If you need to silence a missing function warning, you can use
+@code{:functions}:
+
+@lisp
+@group
+(use-package ruby-mode
+ :mode "\\.rb\\'"
+ :interpreter "ruby"
+ :functions inf-ruby-keys
+ :config
+ (defun my-ruby-mode-hook ()
+ (require 'inf-ruby)
+ (inf-ruby-keys))
+ (add-hook 'ruby-mode-hook 'my-ruby-mode-hook))
+@end group
+@end lisp
+
+@findex :no-require
+@cindex prevent a package from loading at compile-time
+@cindex package loading at byte-compilation time, prevent
+Normally, @code{use-package} will load each package at compile time
+before compiling the configuration, to ensure that any necessary
+symbols are in scope to satisfy the byte-compiler. At times this can
+cause problems, since a package may have special loading requirements,
+and all that you want to use @code{use-package} for is to add a
+configuration to the @code{eval-after-load} hook. In such cases, use
+the @code{:no-require} keyword:
+
+@lisp
+@group
+(use-package foo
+ :no-require t
+ :config
+ (message "Evaluate this immediately after loading `foo'"))
+@end group
+@end lisp
+
+@c ----------------------------------------------------------------------------
+@node Troubleshooting
+@chapter Troubleshooting
+
+@cindex troubleshooting use-package
+@cindex debugging use-package
+If an error occurs while initializing or configuring a package, this
+will not stop your Emacs from loading. Instead, @code{use-package}
+captures the error and reports it in a special @file{*Warnings*} popup
+buffer, so that you can debug the situation in an otherwise functional
+Emacs.
+
+If you are having trouble when starting Emacs, you can pass Emacs the
+@samp{--debug-init} command line flag. @xref{Initial Options,,,
+emacs, GNU Emacs Manual}. To get even more information when using
+that flag, add the following to your init file (these options are
+documented below):
+
+@lisp
+@group
+(when init-file-debug
+ (setq use-package-verbose t
+ use-package-expand-minimally nil
+ use-package-compute-statistics t
+ debug-on-error t))
+@end group
+@end lisp
+
+@cindex reporting bugs
+@cindex expanding macro, for troubleshooting
+Since @code{use-package} is a macro, the first step when you need to
+dig deeper is usually to see what Emacs Lisp code your declaration
+expands to. You can either use the command @w{@kbd{M-x
+pp-macroexpand-last-sexp}}, or wrap the use-package declaration in
+@code{macroexpand} and evaluate it. It is a good idea to include
+their output in any bugs you file for use-package.
+
+@menu
+* Troubleshooting Options::
+* Gathering Statistics::
+* Disabling a package::
+@end menu
+
+@node Troubleshooting Options
+@section Options that help when troubleshooting
+@cindex options for troubleshooting
+@cindex troubleshooting, options that help
+
+@vindex use-package-expand-minimally
+By default, use-package will attempts to catch and report errors that
+occur during expansion of use-package declarations in your init file.
+Customize the user option @code{use-package-expand-minimally} to a
+non-@code{nil} value to disable this checking.
+
+@findex :catch
+This behavior may be overridden locally using the @code{:catch}
+keyword. If @code{t} or @code{nil}, it enables or disables catching
+errors at load time. It can also be a function taking two arguments:
+the keyword being processed at the time the error was encountered, and
+the error object (as generated by @code{condition-case}). For
+example:
+
+@lisp
+@group
+(use-package example
+ ;; Note that errors are never trapped in the preface, since
+ ;; doing so would hide definitions from the byte-compiler.
+ :preface (message "I'm here at byte-compile and load time")
+ :init (message "I'm always here at startup")
+ :config
+ (message "I'm always here after the package is loaded")
+ (error "oops")
+ ;; Don't try to (require 'example), this is just an example!
+ :no-require t
+ :catch (lambda (keyword err)
+ (message (error-message-string err))))
+@end group
+@end lisp
+
+Evaluating the above form will print these messages:
+
+@verbatim
+I'm here at byte-compile and load time
+I'm always here at startup
+Configuring package example...
+I'm always here after the package is loaded
+oops
+@end verbatim
+
+@node Gathering Statistics
+@section Gathering Statistics
+@cindex gathering use-package statistics
+@cindex usage statistics for use-package
+
+@vindex use-package-verbose
+When a package is loaded, and if you have @code{use-package-verbose}
+set to @code{t}, or if the package takes longer than 0.1 seconds to
+load, you will see a message to indicate this loading activity in the
+@code{*Messages*} buffer. The same will happen for configuration, or
+@code{:config} blocks, that take longer than 0.1 seconds to execute.
+
+@vindex use-package-compute-statistics
+If you'd like to see a summary how many packages you've loaded, what
+stage of initialization they've reached, and how much aggregate time
+they've spent (roughly), you can customize the user option
+@code{use-package-compute-statistics} to a non-@code{nil} value. Then
+reload your packages, normally by restarting Emacs, to make sure that
+use-package can gather statistics for all your packages.
+
+@cindex use-package-report
+Run the command @kbd{M-x use-package-report} to see the results. The
+buffer displayed is a tabulated list. To sort rows based on a
+particular column, move point to it and type @kbd{S}, or click the
+column name at the top of the buffer on graphical displays.
+
+@findex use-package-reset-statistics
+To reset all statistics that use-package has gathered for the current
+Emacs invocation, run the command @kbd{M-x use-package-reset-statistics}.
+
+Note that if you are setting @code{use-package-compute-statistics}
+directly in your init file, and not with @code{customize}, you must do
+this after loading @code{use-package}, but before any
+@code{use-package} forms.
+
+@node Disabling a package
+@section Disabling a package
+@cindex disable package
+
+@findex :disabled
+The @code{:disabled} keyword inhibits loading a package, and all its
+customizations. It is equivalent to commenting out or deleting the
+definition.
+
+You could use this, for example, to temporarily disable a package that
+you're having difficulties with, or to avoid loading a package that
+you're not currently using.
+
+This example disables the @samp{foo} package:
+
+@lisp
+@group
+(use-package foo
+ :disabled)
+@end group
+@end lisp
+
+When byte-compiling your init file, use-package omits disabled
+declarations from the output entirely, in order to make Emacs startup
+faster.
+
+@c ----------------------------------------------------------------------------
+@node Keyword extensions
+@appendix Keyword extensions
+@cindex keyword extension
+@cindex extending use-package keywords
+
+use-package is based on an extensible framework that makes it easy for
+package authors to add new keywords, or modify the behavior of
+existing keywords.
+
+Some keyword extensions are included with @code{use-package}, and can
+be optionally enabled.
+
+@menu
+* use-package-ensure-system-package::
+* Creating an extension::
+@end menu
+
+@node use-package-ensure-system-package
+@appendixsec :use-package-ensure-system-package
+
+@findex :ensure-system-package
+The @code{:ensure-system-package} keyword allows you to ensure certain
+executables are available on your system alongside your package
+declarations.@footnote{On macOS, your @code{exec-path} might be
+different if you are starting Emacs as a GUI app instead of from a
+shell. If you find that Emacs on macOS cannot find some executables
+that you know are already installed, you could try the
+@uref{https://github.com/purcell/exec-path-from-shell,@samp{exec-path-from-shell}}
+package.}
+
+To use this extension, add this immediately after loading
+@code{use-package}:
+
+@lisp
+(use-package use-package-ensure-system-package)
+@end lisp
+
+Now you can use the @code{:ensure-system-package} keyword.
+Here's an example usage:
+
+@lisp
+@group
+(use-package foo
+ :ensure-system-package foo)
+@end group
+@end lisp
+
+This will expect a global binary package to exist called @code{foo}.
+If it does not, it will use your system package manager to attempt an
+install of a binary by the same name asynchronously. This requires
+the @acronym{GNU} @acronym{ELPA} package
+@uref{https://gitlab.com/jabranham/system-packages,@samp{system-packages}},
+so for this to work you must install that first.
+
+One way of making sure it is installed is with @code{use-package}
+together with @code{:ensure}.
+
+@lisp
+@group
+(use-package system-packages
+ :ensure t)
+@end group
+@end lisp
+
+For example, on a Debian GNU/Linux system, this would call
+@samp{apt-get install foo}.
+
+If the package is named differently than the binary, you can use a
+cons in the form of @code{(binary . package-name)}. For example:
+
+@lisp
+@group
+(use-package foo
+ :ensure-system-package
+ (foocmd . foo))
+@end group
+@end lisp
+
+On a Debian GNU/Linux system, this would call @code{apt install foo}
+if Emacs could not locate the executable @code{foocmd}.@footnote{For
+manual testing, you could use the @code{executable-find} function,
+which is what @samp{system-packages} uses internally.}
+
+@code{:ensure-system-package} can also take a cons where the
+@code{cdr} is a string that will get called by
+@code{(async-shell-command)} to install if it isn't found. This does
+not depend on any external package.
+
+@lisp
+@group
+(use-package tern
+ :ensure-system-package (tern . "npm i -g tern"))
+@end group
+@end lisp
+
+To install several packages, you can pass in a list of conses:
+
+@lisp
+@group
+(use-package ruby-mode
+ :ensure-system-package
+ ((rubocop . "gem install rubocop")
+ (ruby-lint . "gem install ruby-lint")
+ (ripper-tags . "gem install ripper-tags")
+ (pry . "gem install pry")))
+@end group
+@end lisp
+
+Finally, in case the package dependency does not provide a global
+executable, you can ensure that packages exist by checking the
+presence of a file by providing a string like so:
+
+@lisp
+@group
+(use-package dash-at-point
+ :if (eq system-type 'darwin)
+ :ensure-system-package
+ ("/Applications/Dash.app" . "brew cask install dash"))
+@end group
+@end lisp
+
+@code{:ensure-system-package} will use @code{system-packages-install}
+to install system packages, except where a custom command has been
+specified, in which case it will be executed verbatim by
+@code{async-shell-command}.
+
+The user options @code{system-packages-package-manager} and
+@code{system-packages-use-sudo} are honored, but not for custom
+commands. Custom commands should include the call to sudo in the
+command if needed.
+
+@node Creating an extension
+@appendixsec How to create an extension keyword
+@cindex extension keywords
+
+This section describes how to create a new keyword.
+
+@enumerate
+@item
+Add the keyword.
+
+The first step is to add your keyword at the right place in
+@code{use-package-keywords}. This list determines the order in which
+things will happen in the expanded code. You should never change this
+order, but it gives you a framework within which to decide when your
+keyword should fire.
+
+@item
+Create a normalizer.
+
+The job of the normalizer is take a list of arguments (possibly
+@code{nil}), and turn it into the single argument (which could still
+be a list) that should appear in the final property list used by
+@code{use-package}.
+
+Define a normalizer for your keyword by defining a function named
+after the keyword, for example:
+
+@lisp
+@group
+(defun use-package-normalize/:pin (name-symbol keyword args)
+ (use-package-only-one (symbol-name keyword) args
+ (lambda (label arg)
+ (cond
+ ((stringp arg) arg)
+ ((symbolp arg) (symbol-name arg))
+ (t
+ (use-package-error
+ ":pin wants an archive name (a string)"))))))
+@end group
+@end lisp
+
+@item
+Create a handler.
+
+Once you have a normalizer, you must create a handler for the keyword.
+
+Handlers can affect the handling of keywords in two ways. First, they
+can modify the @code{state} plist before recursively processing the
+remaining keywords, to influence keywords that pay attention to the
+state (one example is the state keyword @code{:deferred}, not to be
+confused with the @code{use-package} keyword @code{:defer}). Then,
+once the remaining keywords have been handled and their resulting
+forms returned, the handlers may manipulate, extend, or just ignore
+those forms.
+
+The task of each handler is to return a @emph{list of forms}
+representing code to be inserted. It does not need to be a
+@code{progn} list, as this is handled automatically in other places.
+Thus it is common to see the idiom of using @code{use-package-concat}
+to add new functionality before or after a code body, so that only the
+minimum code necessary is emitted as the result of a
+@code{use-package} expansion.
+
+This is an example handler:
+
+@lisp
+@group
+(defun use-package-handler/:pin (name-symbol keyword archive-name rest state)
+ (let ((body (use-package-process-keywords name-symbol rest state)))
+ ;; This happens at macro expansion time, not when the expanded code is
+ ;; compiled or evaluated.
+ (if (null archive-name)
+ body
+ (use-package-pin-package name-symbol archive-name)
+ (use-package-concat
+ body
+ `((push '(,name-symbol . ,archive-name)
+ package-pinned-packages))))))
+@end group
+@end lisp
+
+@item
+Test it.
+
+After the keyword has been inserted into @code{use-package-keywords},
+and a normalizer and a handler has been defined, you can now test the
+keyword by seeing how usages of the keyword will expand. For this,
+use @w{@kbd{M-x pp-macroexpand-last-sexp}} with the cursor set
+immediately after the @code{(use-package @dots{})} expression.
+@end enumerate
+
+@c ----------------------------------------------------------------------------
+@node History
+@appendix History and acknowledgments
+
+use-package was written by John Wiegley. Its development started in
+2012, and it got merged into Emacs in 2022, in preparation of the
+release of Emacs 29.1.
+
+Dozens of people have contributed to use-package over the years with
+bug reports, documentation and code. They are too many to list here,
+but we thank them all for their contributions.
+
+This Texinfo manual was written by Stefan Kangas, as a significant
+rewrite of the old use-package manual and @file{README}.
+
+@node GNU Free Documentation License
+@appendix GNU Free Documentation License
+@include doclicense.texi
+
+@node Index
+@unnumbered Index
+@printindex cp
+
+@bye
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 ef9160a2090..cfa033d6c0c 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 d0d84d0a987..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,14 +39,22 @@ 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
transition to SASL-based authentication still underway, users may feel
left in the lurch to endure yet another release cycle of backtick
hell. For some, auth-source may provide a workaround in the form of
-nonstandard server passwords. See the "Connection" node in the manual
-under the subheading "Password".
+nonstandard server passwords. See the section titled "auth-source" in
+the Integrations chapter of ERC's manual.
** Rudimentary SASL support has arrived.
A new module, 'erc-sasl', now ships with ERC 5.5. See the SASL
@@ -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 7bc12063f8e..25a572e5f1f 100644
--- a/etc/HELLO
+++ b/etc/HELLO
@@ -114,7 +114,7 @@ Thai (ภาษาไทย) สวัสดีครัภ/ สวัสดี
Tibetan (བོད་སà¾à½‘་) བཀྲ་ཤིས་བདེ་ལེགསà¼
Tigrigna (ትáŒáˆ­á›) ሰላማት
Tirhuta (đ‘’đ‘’±đ‘’©đ‘’¯đ‘’³đ‘’đ‘’°) đ‘’£đ‘“‚đ‘’©đ‘’¢đ‘’°đ‘’§ / đ‘’®đ‘’²đ‘’đ‘’°đ‘’©đ‘’°đ‘’§
-Turkish (TĂ¼rkçe) Merhaba
+Turkish (TĂ¼rkçe) Esenlikler / Merhaba
Ukrainian (ÑƒĐºÑ€Đ°Ñ—Đ½ÑÑŒĐºĐ°) Đ’Ñ–Ñ‚Đ°Ñ / Đ”Đ¾Đ±Ñ€Đ¸Đ¹ Đ´ĐµĐ½ÑŒ! / ĐŸÑ€Đ¸Đ²Ñ–Ñ‚
Vietnamese (tiếng Việt) ChĂ o bạn
Wancho (đ‹’đ‹€đ‹‰đ‹ƒđ‹•) đ‹‚đ‹ˆđ‹›
@@ -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 d38ccadba64..355ba6ba8aa 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'.
@@ -31,6 +31,44 @@ in the Emacs tree should be natively compiled ahead of time. (This is
slow on most machines.)
+++
+** Emacs can be built with the tree-sitter parsing library.
+This library, together with grammar libraries, provides incremental
+parsing capabilities for several popular programming languages and
+other formatted files. Emacs built with this library offers major
+modes, described elsewhere in this file, that are based on the
+tree-sitter's parsers. If you have the tree-sitter library
+installed, the configure script will automatically include it in the
+build; use '--without-tree-sitter' at configure time to disable that.
+
+Emacs modes based on the tree-sitter library require an additional
+grammar library for each mode. These grammar libraries provide the
+tree-sitter library with language-specific lexical analysis and
+parsing capabilities, and are developed separately from the
+tree-sitter library itself. If you don't have a grammar library
+required by some Emacs major mode, and your distro doesn't provide it
+as an installable package, you can compile and install such a library
+yourself. Many libraries can be downloaded from the tree-sitter site:
+
+ https://github.com/tree-sitter
+
+To compile such a library, compile the files "scanner.c" and "parser.c"
+(sometimes named "scanner.cc" and "parser.cc") in the "src" subdirectory
+of the library's source tree using the C or C++ compiler, then link
+these two files into a shared library named "libtree-sitter-LANG.so",
+where LANG is the name of the language supported by the grammar as it
+is expected by the Emacs major mode (for example, "c" for 'c-ts-mode',
+"cpp" for 'c++-ts-mode', "python" for 'python-ts-mode', etc.). Then place
+the shared library you've built in the same directory where you keep
+the other shared libraries used by Emacs, or in the "tree-sitter"
+subdirectory of your 'user-emacs-directory', or in a directory
+mentioned in the variable 'treesit-extra-load-path'.
+
+You only need to install language grammar libraries required by the
+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 can be built with built-in support for accessing SQLite databases.
This uses the popular sqlite3 library, and can be disabled by using
the '--without-sqlite3' option to the 'configure' script.
@@ -68,7 +106,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
@@ -77,6 +115,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
@@ -92,33 +143,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 implementation of overlays has changed.
-Emacs now uses an implementation of overlays that is much more
-efficient than the original one, and should speed up all the
-operations that involve overlays, especially when there are lots of
-them in a buffer. However, no changes in behavior of overlays should
-be visible on the Lisp 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 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
@@ -144,16 +172,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
@@ -161,13 +191,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'.
@@ -191,12 +223,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
@@ -216,7 +248,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:
@@ -237,6 +269,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
---
@@ -253,7 +295,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.
@@ -286,9 +328,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.
@@ -317,7 +359,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.
@@ -414,8 +456,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.
@@ -468,7 +510,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.
@@ -483,7 +525,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.
@@ -528,7 +570,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
@@ -556,14 +599,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)
@@ -578,7 +622,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.
@@ -624,7 +668,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
@@ -649,19 +694,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.
@@ -671,12 +718,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.
@@ -708,6 +755,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
@@ -846,6 +894,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
@@ -857,7 +906,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.
@@ -898,7 +948,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.
+++
@@ -908,42 +958,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.
@@ -954,13 +1004,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.
@@ -989,19 +1039,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'.
@@ -1027,9 +1077,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
@@ -1037,12 +1087,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
@@ -1050,10 +1100,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
@@ -1061,17 +1111,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.
@@ -1080,10 +1132,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
@@ -1107,6 +1159,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'.
@@ -1173,7 +1227,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
@@ -1185,13 +1239,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
@@ -1204,15 +1261,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.
@@ -1229,8 +1286,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'.
@@ -1241,8 +1298,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.
@@ -1263,10 +1320,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
@@ -1280,7 +1338,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'.
@@ -1301,55 +1359,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".
@@ -1383,6 +1474,12 @@ language.
This is a variant of the 'slovak' input method, which corresponds to
the QWERTY Slovak keyboards.
+---
+*** New input method 'cyrillic-chuvash'.
+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
@@ -1463,6 +1560,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
---
@@ -1479,7 +1610,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
@@ -1510,7 +1641,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
@@ -1523,8 +1654,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'.
@@ -1545,7 +1676,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'.
@@ -1593,8 +1724,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'.
@@ -1630,7 +1761,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
@@ -1689,9 +1820,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
@@ -1705,12 +1837,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
@@ -1743,6 +1875,12 @@ 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
'completion-auto-select' to t, then pressing 'TAB' will switch to the
@@ -1752,10 +1890,9 @@ the second one will switch to the "*Completions*" buffer.
---
*** New user option 'completion-auto-wrap'.
-When non-nil, the commands 'next-completion', 'previous-completion',
-'next-line-completion' and 'previous-line-completion' automatically
-wrap around on reaching the beginning or the end of the "*Completions*"
-buffer.
+When non-nil, the commands 'next-completion' and 'previous-completion'
+automatically wrap around on reaching the beginning or the end of
+the "*Completions*" buffer.
+++
*** New values for the 'completion-auto-help' user option.
@@ -1766,6 +1903,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
@@ -1788,25 +1926,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.
@@ -1902,7 +2035,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.
@@ -1941,7 +2074,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'.
@@ -1997,6 +2130,26 @@ It narrows to the current node.
** EUDC
+++
+*** Deprecations planned for next release.
+After Emacs 29.1, some aspects of EUDC will be deprecated. The goal
+of these deprecations is to simplify EUDC server configuration by
+making 'eudc-server-hotlist' the only place to add servers. There
+will not be a need to set the server using the 'eudc-set-server'
+command. Instead, the 'eudc-server-hotlist' user option should be
+customized to have an entry for the server. The plan is to obsolete
+the 'eudc-hotlist' package since Customize is sufficient for changing
+'eudc-server-hotlist'. How the 'eudc-server' user option works in this
+context is to-be-determined; it can't be removed, because that would
+break compatibility, but it may become synchronized with
+'eudc-server-hotlist' so that 'eudc-server' is always equal to '(car
+eudc-server-hotlist)'. The first entry in 'eudc-server-hotlist' is the
+first server tried by 'eudc-expand-try-all'. The hotlist
+simplification will allow 'eudc-query-form' to show a drop down of
+possible servers, instead of requiring a call to 'eudc-set-server'
+like it does in this release. The default value of
+'eudc-ignore-options-file' will be changed from nil to t.
+
++++
*** New user option 'eudc-ignore-options-file' that defaults to nil.
The 'eudc-ignore-options-file' user option can be configured to ignore
the 'eudc-options-file' (typically "~/.emacs.d/eudc-options"). Most
@@ -2130,13 +2283,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.
@@ -2248,6 +2401,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
+++
@@ -2432,7 +2590,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).
@@ -2520,42 +2678,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
---
@@ -2706,6 +2828,16 @@ project-dedicated or global) is specified by the new
---
*** New user option 'ruby-toggle-block-space-before-parameters'.
+---
+*** 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
+++
@@ -2762,7 +2894,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
@@ -2876,11 +3008,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".
@@ -2932,6 +3059,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
@@ -2943,6 +3083,13 @@ based on data provided by language servers using the Language Server
Protocol (LSP).
+++
+*** use-package: Declarative package configuration.
+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.
+
++++
** New commands 'image-crop' and 'image-cut'.
These commands allow interactively cropping/cutting the image at
point. The commands are bound to keys 'i c' and 'i x' (respectively)
@@ -2962,8 +3109,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'.
@@ -2986,65 +3133,174 @@ 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 'typescript-ts-mode'.
-A major mode based on the tree-sitter library for editing programs
-in the TypeScript language. It includes support for font-locking,
-indentation, and navigation. This mode will be auto-enabled for
-files with the '.ts' extension.
++++
+** 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 mode 'tsx-ts-mode'.
-A major mode based on the tree-sitter library for editing programs
-in the TypeScript language, with support for TSX. It includes
-support for font-locking, indentation, and navigation. This mode
-will be auto-enabled for files with the '.tsx' 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,
+indentation, and navigation by defuns based on parsing the buffer text
+by a tree-sitter parser. Some major modes also offer support for
+Imenu and 'which-func'.
-** New major mode 'c-ts-mode'.
-A major mode based on the tree-sitter library for editing programs
-in the C language. It includes support for font-locking,
-indentation, Imenu, which-func, and navigation.
+Where major modes already exist in Emacs for editing certain kinds of
+files, the new modes based on tree-sitter are for now entirely
+optional, and you must turn them on manually, or customize
+'auto-mode-alist' to turn them on automatically.
-** New major mode 'c++-ts-mode'.
-A major mode based on the tree-sitter library for editing programs
-in the C++ language. It includes support for font-locking,
-indentation, Imenu, which-func, and navigation.
+Each major mode based on tree-sitter needs a language grammar library,
+usually named "libtree-sitter-LANG.so" ("libtree-sitter-LANG.dll" on
+MS-Windows), where LANG is the corresponding language name. Emacs
+looks for these libraries in the following places:
-** New major mode 'java-ts-mode'.
-A major mode based on the tree-sitter library for editing programs
-in the Java language. It includes support for font-locking,
-indentation, Imenu, which-func, and navigation.
+ . in the directories mentioned in the list 'treesit-extra-load-path'
+ . in the "tree-sitter" subdirectory of your 'user-emacs-directory'
+ (by default, "~/.emacs.d/tree-sitter")
+ . in the standard system directories where other shared libraries are
+ usually installed
-** New major mode 'python-ts-mode'.
-A major mode based on the tree-sitter library for editing programs
-in the Python language. It includes support for font-locking,
-indentation, Imenu, which-func, and navigation.
+We recommend to install these libraries in one of the standard system
+locations (the last place in the above list).
-** New major mode 'css-ts-mode'.
-A major mode based on the tree-sitter library for editing CSS
-(Cascading Style Sheets). It includes support for font-locking,
-indentation, Imenu, which-func, and navigation.
+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 'json-ts-mode'.
++++
+*** New major mode 'typescript-ts-mode'.
A major mode based on the tree-sitter library for editing programs
-in the JSON language. It includes support for font-locking,
-indentation, Imenu, which-func, and navigation.
+in the TypeScript language. This mode is auto-enabled for files with
+the ".ts" extension.
-** New major mode 'csharp-ts-mode'.
++++
+*** New major mode 'tsx-ts-mode'.
A major mode based on the tree-sitter library for editing programs
-in the C# language. It includes support for font-locking,
-indentation, Imenu, which-func, and navigation.
+in the TypeScript language, with support for TSX. This mode is
+auto-enabled for files with the ".tsx" extension.
-** New major mode 'csharp-mode'.
-A major mode based on CC Mode 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 'c++-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'.
-A major mode based on the tree-sitter library for editing Bash shell
-scripts. It includes support for font-locking, indentation, Imenu,
-which-func, and navigation.
++++
+*** 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
+++
+** The implementation of overlays has changed.
+Emacs now uses an implementation of overlays that is much more
+efficient than the original one, and should speed up all the
+operations that involve overlays, especially when there are lots of
+them in a buffer.
+
+As result of this, some minor incompatibilities in behavior could be
+observed, as described below. Except those minor incompatibilities,
+no other changes in behavior of overlays should be visible on the Lisp
+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 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 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
+returns a list whose 'car' is the list of all the buffer overlays, and
+whose 'cdr' is always nil.
+
++++
** 'format-prompt' now uses 'substitute-command-keys'.
This means that both the prompt and 'minibuffer-default-prompt-format'
will have key definitions and single quotes handled specially.
@@ -3061,7 +3317,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
@@ -3086,7 +3342,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.
@@ -3126,7 +3382,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'.
@@ -3149,10 +3405,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.
@@ -3347,9 +3603,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.
@@ -3357,7 +3612,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'.
@@ -3509,7 +3764,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'.
@@ -3521,10 +3776,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.
@@ -3544,6 +3799,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
@@ -3561,21 +3817,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.
@@ -3680,7 +3936,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.
@@ -3692,8 +3948,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'.
@@ -3712,8 +3968,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'.
@@ -3733,7 +3989,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.
@@ -3782,7 +4038,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.
@@ -3854,7 +4113,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.
---
@@ -3879,8 +4138,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'.
@@ -4199,7 +4458,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.
@@ -4290,9 +4550,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.
@@ -4387,6 +4648,23 @@ Now 'max-lisp-eval-depth' alone is used for limiting Lisp recursion
and stack usage. 'max-specpdl-size' is still present as a plain
variable for compatibility but its limiting powers have been taken away.
+** New function 'external-completion-table'.
+This function returns a completion table designed to ease
+communication between Emacs's completion facilities and external tools
+offering completion services, particularly tools whose full working
+set is too big to transfer to Emacs every time a completion is
+needed. The table uses new 'external' completion style exclusively
+and cannot work with regular styles such as 'basic' or 'flex'.
+
++++
+** Magic file name handlers for 'make-directory-internal' are no longer needed.
+Instead, Emacs uses the already-existing 'make-directory' handlers.
+
++++
+** '(make-directory DIR t)' returns non-nil if DIR already exists.
+This can let a caller know whether it created DIR. Formerly,
+'make-directory's return value was unspecified.
+
* Changes in Emacs 29.1 on Non-Free Operating Systems
@@ -4432,6 +4710,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/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/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 2169ed0f80b..1b796b11caf 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.
@@ -3173,7 +3173,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
@@ -3479,6 +3479,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
--- a/etc/package-keyring.gpg
+++ b/etc/package-keyring.gpg
Binary files 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/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 40af6414680..3124ce4f7c7 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]{29} % 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-theme.el b/etc/themes/modus-operandi-theme.el
index 6ea92f8559a..0d258a26bc8 100644
--- a/etc/themes/modus-operandi-theme.el
+++ b/etc/themes/modus-operandi-theme.el
@@ -1,6 +1,6 @@
;;; 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>
diff --git a/etc/themes/modus-themes.el b/etc/themes/modus-themes.el
index a9d0d53cba9..79409cd01b1 100644
--- a/etc/themes/modus-themes.el
+++ b/etc/themes/modus-themes.el
@@ -1,6 +1,6 @@
;;; 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>
diff --git a/etc/themes/modus-vivendi-theme.el b/etc/themes/modus-vivendi-theme.el
index aefef540a13..6b365f421cc 100644
--- a/etc/themes/modus-vivendi-theme.el
+++ b/etc/themes/modus-vivendi-theme.el
@@ -1,6 +1,6 @@
;;; 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>
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-ś™€ (METÁ‡ ë‚˜ 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 d1d20858cdd..9fb9e312a66 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.
@@ -401,6 +401,9 @@ static void invalidate_nodes (fdesc *, node **);
static void put_entries (node *);
static void cleanup_tags_file (char const * const, char const * const);
+#if !MSDOS && !defined (DOS_NT)
+static char *escape_shell_arg_string (char *);
+#endif
static void do_move_file (const char *, const char *);
static char *concat (const char *, const char *, const char *);
static char *skip_spaces (char *);
@@ -1413,7 +1416,7 @@ main (int argc, char **argv)
setenv ("LC_COLLATE", "C", 1);
setenv ("LC_ALL", "C", 1); */
char *cmd = xmalloc (8 * strlen (tagfile) + sizeof "sort -u -o '' ''");
-#if defined WINDOWSNT || defined MSDOS
+#if defined WINDOWSNT || MSDOS
/* Quote "like this". No need to escape the quotes in the file name,
since it is not allowed in file names on these systems. */
char *z = stpcpy (cmd, "sort -u -o \"");
@@ -1713,13 +1716,23 @@ process_file_name (char *file, language *lang)
else
{
#if MSDOS || defined (DOS_NT)
- char *cmd1 = concat (compr->command, " \"", real_name);
- char *cmd = concat (cmd1, "\" > ", tmp_name);
+ int buf_len =
+ strlen (compr->command)
+ + strlen (" \"\" > \"\"") + strlen (real_name)
+ + strlen (tmp_name) + 1;
+ char *cmd = xmalloc (buf_len);
+ snprintf (cmd, buf_len, "%s \"%s\" > \"%s\"",
+ compr->command, real_name, tmp_name);
#else
- char *cmd1 = concat (compr->command, " '", real_name);
- char *cmd = concat (cmd1, "' > ", tmp_name);
+ char *new_real_name = escape_shell_arg_string (real_name);
+ char *new_tmp_name = escape_shell_arg_string (tmp_name);
+ int buf_len =
+ strlen (compr->command) + strlen (" > ") + strlen (new_real_name)
+ + strlen (new_tmp_name) + 1;
+ char *cmd = xmalloc (buf_len);
+ snprintf (cmd, buf_len, "%s %s > %s",
+ compr->command, new_real_name, new_tmp_name);
#endif
- free (cmd1);
inf = (system (cmd) == -1
? NULL
: fopen (tmp_name, "r" FOPEN_BINARY));
@@ -7707,6 +7720,57 @@ etags_mktmp (void)
return templt;
}
+#if !MSDOS && !defined (DOS_NT)
+/*
+ * Add single quotes around a string, and escape any single quotes.
+ * Return a newly-allocated string.
+ *
+ * For example:
+ * escape_shell_arg_string ("test.txt") => "'test.txt'"
+ * escape_shell_arg_string ("'test.txt") => "''\''test.txt'"
+ */
+static char *
+escape_shell_arg_string (char *str)
+{
+ char *p = str;
+ int need_space = 2; /* ' at begin and end */
+
+ while (*p != '\0')
+ {
+ if (*p == '\'')
+ need_space += 4; /* ' to '\'', length is 4 */
+ else
+ need_space++;
+
+ p++;
+ }
+
+ char *new_str = xnew (need_space + 1, char);
+ new_str[0] = '\'';
+ new_str[need_space-1] = '\'';
+
+ int i = 1; /* skip first byte */
+ p = str;
+ while (*p != '\0')
+ {
+ new_str[i] = *p;
+ if (*p == '\'')
+ {
+ new_str[i+1] = '\\';
+ new_str[i+2] = '\'';
+ new_str[i+3] = '\'';
+ i += 3;
+ }
+
+ i++;
+ p++;
+ }
+
+ new_str[need_space] = '\0';
+ return new_str;
+}
+#endif
+
static void
do_move_file(const char *src_file, const char *dst_file)
{
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 7e54b878a22..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.
@@ -342,6 +342,8 @@ main (int argc, char **argv)
RULE (SCMP_ACT_ALLOW, SCMP_SYS (eventfd2));
RULE (SCMP_ACT_ALLOW, SCMP_SYS (wait4));
RULE (SCMP_ACT_ALLOW, SCMP_SYS (poll));
+ RULE (SCMP_ACT_ALLOW, SCMP_SYS (pidfd_open),
+ SCMP_A1_32 (SCMP_CMP_EQ, 0));
/* Don't allow creating sockets (network access would be extremely
dangerous), but also don't crash. */
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
index ad0bfd170ca..c33cab9e6d5 100644
--- a/lib/explicit_bzero.c
+++ b/lib/explicit_bzero.c
@@ -1,5 +1,5 @@
/* Erasure of sensitive data, generic implementation.
- Copyright (C) 2016-2022 Free Software Foundation, Inc.
+ 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
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..8c1d26ec7d4 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
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 9af8fd0c579..9ab4b741595 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 e56f6db0c9c..459dd063cbe 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..a0e67f76b29 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
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 99af802993e..d4beccad96a 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 8a21c291e72..af3203444ae 100644
--- a/lisp/ChangeLog.15
+++ b/lisp/ChangeLog.15
@@ -10320,7 +10320,7 @@
* bs.el, expand.el, ido.el, image-dired.el, lpr.el, pcomplete.el,
* skeleton.el, term.el, time.el, wid-edit.el, woman.el,
* calc/calc-graph.el, calc/calc-help.el, calc/calc-incom.el,
- * calc/calc.el, emacs-lisp/cl-extra.el, emacs-lips/cl-loaddefs.el,
+ * calc/calc.el, emacs-lisp/cl-extra.el, emacs-lisp/cl-loaddefs.el,
* emulation/cua-rect.el, emulation/viper-ex.el, eshell/esh-test.el,
* eshell/eshell.el, gnus/gnus-uu.el, gnus/nndoc.el, gnus/nnrss.el,
* gnus/rfc2047.el, gnus/utf7.el, international/utf-7.el,
@@ -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 1d7684be812..6dda3703e6d 100644
--- a/lisp/ChangeLog.16
+++ b/lisp/ChangeLog.16
@@ -4866,7 +4866,7 @@
2012-10-12 FabiĂ¡n Ezequiel Gallina <fgallina@cuca>
* progmodes/python.el (python-mode-map):
- Replace subtitute-key-definition with proper command remapping.
+ Replace substitute-key-definition with proper command remapping.
(python-nav--up-list): Fix behavior for blocks on the same level.
2012-10-11 Stefan Monnier <monnier@iro.umontreal.ca>
@@ -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>
@@ -24325,7 +24325,7 @@
Pass nil for `after-find-file-from-revert-buffer'.
* saveplace.el (save-place-find-file-hook): Use new variable
- `rever-buffer-in-progress-p', not `after-find-file-from-revert-buffer'.
+ `revert-buffer-in-progress-p', not `after-find-file-from-revert-buffer'.
2011-04-06 Glenn Morris <rgm@gnu.org>
@@ -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 c494f438967..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)
@@ -25522,7 +25522,7 @@
* textmodes/ispell.el (ispell-add-per-file-word-list):
Fix `flyspell-correct-word-before-point' error when accepting
- words and `coment-padding' is an integer by using
+ words and `comment-padding' is an integer by using
`comment-normalize-vars' (Bug #14214).
2013-04-17 FabiĂ¡n Ezequiel Gallina <fgallina@gnu.org>
@@ -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 338814fdda2..1e0935f565f 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..550d956fb7b 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
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 9b7f586d164..886291a2c78 100644
--- a/lisp/ansi-osc.el
+++ b/lisp/ansi-osc.el
@@ -1,24 +1,26 @@
;;; 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>
;; Maintainer: emacs-devel@gnu.org
;; Keywords: processes, terminals, services
-;; This program is free software; you can redistribute it and/or modify
+;; 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.
-;; This program is distributed in the hope that it will be useful,
+;; 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 this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/lisp/apropos.el b/lisp/apropos.el
index a731926f458..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)
@@ -496,7 +496,7 @@ Intended as a value for `revert-buffer-function'."
outline-level (lambda () 1)
outline-minor-mode-cycle t
outline-minor-mode-highlight t
- outline-minor-mode-use-buttons t))
+ outline-minor-mode-use-buttons 'insert))
(defvar apropos-multi-type t
"If non-nil, this apropos query concerns multiple types.
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 74d38084480..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>
@@ -111,12 +111,12 @@ HOSTS can be a string or a list of strings."
(defun auth-source-pass--match-regexp (s)
(rx-to-string ; autoloaded
`(: (or bot "/")
- (or (: (? (group-n 20 (+ (not (in ?\ ?/ ,s)))) "@")
- (group-n 10 (+ (not (in ?\ ?/ ?@ ,s))))
- (? ,s (group-n 30 (+ (not (in ?\ ?/ ,s))))))
- (: (group-n 11 (+ (not (in ?\ ?/ ?@ ,s))))
- (? ,s (group-n 31 (+ (not (in ?\ ?/ ,s)))))
- (? "/" (group-n 21 (+ (not (in ?\ ?/ ,s)))))))
+ (or (: (? (group-n 20 (+ (not (in ?/ ,s)))) "@") ; user prefix
+ (group-n 10 (+ (not (in ?/ ?@ ,s)))) ; host
+ (? ,s (group-n 30 (+ (not (in ?\s ?/ ,s)))))) ; port
+ (: (group-n 11 (+ (not (in ?/ ?@ ,s)))) ; host
+ (? ,s (group-n 31 (+ (not (in ?\s ?/ ,s))))) ; port
+ (? "/" (group-n 21 (+ (not (in ?/ ,s))))))) ; user suffix
eot)
'no-group))
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 c1ad5f7520e..34aa8399a96 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
@@ -1010,8 +1010,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)
@@ -1031,12 +1031,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)
@@ -1109,12 +1107,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."
@@ -1472,12 +1469,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 1fd31fb3b85..60dc74fbfce 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
@@ -157,15 +157,15 @@ HEADER : String for header for first line or a function
which calculates column title.
MINIMUM-LENGTH : Minimum width of column (number or name of function).
The function must return a positive integer.
-MAXIMUM-LENGTH : Maximum width of column (number or name of function)
- (currently ignored).
+MAXIMUM-LENGTH : Ignored.
ALIGNMENT : Alignment of column (`left', `right', `middle').
FUN-OR-STRING : Name of a function for calculating the value or a
string for a constant value.
-The function gets as parameter the buffer where we have started
-buffer selection and the list of all buffers to show. The function must
-return a string representing the column's value."
+Functions for HEADER and MINIMUM-LENGTH are called with no arguments.
+FUN-OR-STRING gets as argument the buffer where we have started
+buffer selection and the list of all buffers to show. The function
+must return a string representing the column's value."
:group 'bs-appearance
:type '(repeat sexp))
@@ -321,7 +321,7 @@ Must be a string used in `bs-configurations' for naming a configuration."
:group 'bs-appearance
:type 'string)
-(defcustom bs-string-show-normally " "
+(defcustom bs-string-show-normally " "
"String added in column 1 indicating an unmarked buffer."
:group 'bs-appearance
:type 'string)
@@ -384,12 +384,12 @@ don't highlight."
"Define a new function for buffer sorting in Buffer Selection Menu.
NAME specifies the sort order defined by function FUN.
A value of nil for FUN means don't sort the buffer list. Otherwise the
-functions must have two parameters - the buffers to compare.
+function must have two arguments - the buffers to compare.
REGEXP-FOR-SORTING is a regular expression which describes the
column title to highlight.
FACE is a face used to fontify the sorted column title. A value of nil means
don't highlight.
-The new sort aspect will be inserted into list `bs-sort-functions'."
+The new sort aspect will be inserted into the list `bs-sort-functions'."
(let ((tuple (assoc name bs-sort-functions)))
(if tuple
(setcdr tuple (list fun regexp-for-sorting face))
@@ -501,8 +501,8 @@ LIST is a list of buffers to test for appearance in Buffer Selection Menu.
The result list depends on the global variables `bs-dont-show-regexp',
`bs-must-show-regexp', `bs-dont-show-function', `bs-must-show-function'
and `bs-buffer-sort-function'.
-If SORT-DESCRIPTION isn't nil the list will be sorted by
-a special function. SORT-DESCRIPTION is an element of `bs-sort-functions'."
+If SORT-DESCRIPTION isn't nil the list will be sorted by a special
+function. SORT-DESCRIPTION is an element of `bs-sort-functions'."
(setq sort-description (or sort-description bs--current-sort-function)
list (or list (buffer-list)))
(let ((result nil))
@@ -568,9 +568,9 @@ SORT-DESCRIPTION is an element of `bs-sort-functions'."
(beginning-of-line)))
(defun bs--goto-current-buffer ()
- "Goto line which represents the current buffer;
-actually the line which begins with character in `bs-string-current' or
-`bs-string-current-marked'."
+ "Go to line which represents the current buffer.
+Actually, it goes to the line which begins with the character
+in `bs-string-current' or `bs-string-current-marked'."
(let ((regexp (concat "^"
(regexp-quote bs-string-current)
"\\|^"
@@ -847,9 +847,8 @@ See `visit-tags-table'."
(defun bs-set-current-buffer-to-show-always (&optional not-to-show-p)
"Toggle status of buffer on line to `always shown'.
-NOT-TO-SHOW-P: prefix argument.
-With no prefix argument the buffer on current line is marked to show
-always. Otherwise it is marked to show never."
+With prefix argument NOT-TO-SHOW-P, the buffer on current line
+is marked to never show instead."
(interactive "P")
(if not-to-show-p
(bs-set-current-buffer-to-show-never)
@@ -1247,8 +1246,6 @@ by buffer configuration `bs-cycle-configuration-name'."
bs--cycle-list)))
(next (car tuple))
(cycle-list (cdr tuple)))
- ;; We don't want the frame iconified if the only window in the frame
- ;; happens to be dedicated.
(bury-buffer (current-buffer))
(switch-to-buffer next nil t)
(setq bs--cycle-list (append (cdr cycle-list)
@@ -1457,7 +1454,7 @@ for buffer selection."
(defun bs--configuration-name-for-prefix-arg (prefix)
"Convert prefix argument PREFIX to a name of a buffer configuration.
If PREFIX is nil return `bs-default-configuration'.
-If PREFIX is an integer return PREFIX element of `bs-configurations'.
+If PREFIX is an integer return PREFIXth element of `bs-configurations'.
Otherwise return `bs-alternative-configuration'."
(cond ;; usually activation
((null prefix)
diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el
index 588fe599a46..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
@@ -107,6 +107,9 @@ The value should be a function of one argument; it will be
called with the buffer. If this function returns non-nil,
then the buffer will be displayed in the buffer list.")
+(defvar-local Buffer-menu-buffer-list nil
+ "The current list of buffers or function to return buffers.")
+
(defvar-keymap Buffer-menu-mode-map
:doc "Local keymap for `Buffer-menu-mode' buffers."
:parent tabulated-list-mode-map
@@ -628,8 +631,10 @@ This behaves like invoking \\[read-only-mode] in that buffer."
This is called by `buffer-menu' and others as a subroutine.
If FILES-ONLY is non-nil, show only file-visiting buffers.
-If BUFFER-LIST is non-nil, it should be a list of buffers; it
-means list those buffers and no others.
+If BUFFER-LIST is non-nil, it should be either a list of buffers
+or a function that returns a list of buffers; it means
+list those buffers and no others.
+See more at `Buffer-menu-buffer-list'.
If FILTER-PREDICATE is non-nil, it should be a function
that filters out buffers from the list of buffers.
See more at `Buffer-menu-filter-predicate'."
@@ -639,6 +644,7 @@ See more at `Buffer-menu-filter-predicate'."
(Buffer-menu-mode)
(setq Buffer-menu-files-only
(and files-only (>= (prefix-numeric-value files-only) 0)))
+ (setq Buffer-menu-buffer-list buffer-list)
(setq Buffer-menu-filter-predicate filter-predicate)
(list-buffers--refresh buffer-list old-buffer)
(tabulated-list-print))
@@ -665,9 +671,16 @@ See more at `Buffer-menu-filter-predicate'."
Buffer-menu-filter-predicate))
entries name-width)
;; Collect info for each buffer we're interested in.
- (dolist (buffer (or buffer-list
- (buffer-list (if Buffer-menu-use-frame-buffer-list
- (selected-frame)))))
+ (dolist (buffer (cond
+ ((functionp buffer-list)
+ (funcall buffer-list))
+ (buffer-list)
+ ((functionp Buffer-menu-buffer-list)
+ (funcall Buffer-menu-buffer-list))
+ (Buffer-menu-buffer-list)
+ (t (buffer-list
+ (if Buffer-menu-use-frame-buffer-list
+ (selected-frame))))))
(with-current-buffer buffer
(let* ((name (buffer-name))
(file buffer-file-name))
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 42156b94606..5e21d506d74 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..75c29a38352 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>
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..b90ed715fae 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
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..cd3de62afdb 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
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..582a2b91ff6 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>
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 00fe081acb5..6f84b83ab75 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 fe510c371e3..156eac46659 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..b932cb999ba 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>
diff --git a/lisp/cedet/semantic/lex.el b/lisp/cedet/semantic/lex.el
index 264b2027711..c2d2e5e1668 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>
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 4d9fc501874..682b555a33c 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>
@@ -384,7 +384,7 @@ This variable is buffer-local."
"\\(?:\\(?:, try\\)? *again\\| (empty for no passphrase)\\| (again)\\)?"
;; "[[:alpha:]]" used to be "for", which fails to match non-English.
"\\(?: [[:alpha:]]+ .+\\)?[[:blank:]]*[:ï¼áŸ–][[:space:]]*\\'"
- ;; The ccrypt encryption dialogue doesn't end with a colon, so
+ ;; The ccrypt encryption dialog doesn't end with a colon, so
;; treat it specially.
"\\|^Enter encryption key: (repeat) *\\'"
;; openssh-8.6p1 format: "(user@host) Password:".
@@ -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 0e09e99da95..0373842de09 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
@@ -1073,7 +1073,7 @@ plain variables. This means that `setopt' will execute any
;; Check that the type is correct.
(when-let ((type (get variable 'custom-type)))
(unless (widget-apply (widget-convert type) :match value)
- (user-error "Value `%S' does not match type %s" value type)))
+ (warn "Value `%S' does not match type %s" value type)))
(put variable 'custom-check-value (list value))
(funcall (or (get variable 'custom-set) #'set-default) variable value))
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 f2ffddcf702..aea6b3e15b7 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..3d78c4cb6f8 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>
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 5e1745069fd..c390017e190 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -1,7 +1,6 @@
;;; dired-aux.el --- less commonly used parts of dired -*- lexical-binding: t -*-
-;; Copyright (C) 1985-1986, 1992, 1994, 1998, 2000-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
@@ -25,7 +24,7 @@
;;; Commentary:
-;; The parts of dired mode not normally used. This is a space-saving hack
+;; The parts of Dired mode not normally used. This is a space-saving hack
;; to avoid having to load a large mode when all that's wanted are a few
;; functions.
@@ -37,8 +36,6 @@
;;; Code:
(require 'cl-lib)
-;; We need macros in dired.el to compile properly,
-;; and we call subroutines in it too.
(require 'dired)
(defvar dired-create-files-failures nil
@@ -135,7 +132,7 @@ substituted, and will be passed through normally to the shell.
%s
-\(Press ^ to %s markers below these occurrences.)
+(Press ^ to %s markers below these occurrences.)
"
"`"
(string (aref command (car char-positions)))
@@ -298,7 +295,7 @@ With prefix arg, prompt for argument SWITCHES which is options for `diff'."
;;;###autoload
(defun dired-compare-directories (dir2 predicate)
- "Mark files with different file attributes in two dired buffers.
+ "Mark files with different file attributes in two Dired buffers.
Compare file attributes of files in the current directory
with file attributes in directory DIR2 using PREDICATE on pairs of files
with the same name. Mark files for which PREDICATE returns non-nil.
@@ -312,8 +309,8 @@ PREDICATE is a Lisp expression that can refer to the following variables:
fa1, fa2 - list of file attributes
returned by function `file-attributes'
- where 1 refers to attribute of file in the current dired buffer
- and 2 to attribute of file in second dired buffer.
+ where 1 refers to attribute of file in the current Dired buffer
+ and 2 to attribute of file in second Dired buffer.
Examples of PREDICATE:
@@ -489,7 +486,8 @@ List has a form of (file-name full-file-name (attribute-list))."
(defun dired-do-chmod (&optional arg)
"Change the mode of the marked (or next ARG) files.
Both octal numeric modes like `644' and symbolic modes like `g+w'
-are supported. Type M-n to pull the file attributes of the file
+are supported. Type \\<minibuffer-local-completion-map>\
+\\[next-history-element] to pull the file attributes of the file
at point into the minibuffer.
See Info node `(coreutils)File permissions' for more information.
@@ -538,7 +536,8 @@ has no effect on MS-Windows."
;;;###autoload
(defun dired-do-chgrp (&optional arg)
"Change the group of the marked (or next ARG) files.
-Type M-n to pull the file attributes of the file at point
+Type \\<minibuffer-local-completion-map>\\[next-history-element] \
+to pull the file attributes of the file at point
into the minibuffer."
(interactive "P")
(if (and (memq system-type '(ms-dos windows-nt))
@@ -549,7 +548,8 @@ into the minibuffer."
;;;###autoload
(defun dired-do-chown (&optional arg)
"Change the owner of the marked (or next ARG) files.
-Type M-n to pull the file attributes of the file at point
+Type \\<minibuffer-local-completion-map>\\[next-history-element] \
+to pull the file attributes of the file at point
into the minibuffer."
(interactive "P")
(if (and (memq system-type '(ms-dos windows-nt))
@@ -561,7 +561,8 @@ into the minibuffer."
(defun dired-do-touch (&optional arg)
"Change the timestamp of the marked (or next ARG) files.
This calls touch.
-Type M-n to pull the file attributes of the file at point
+Type Type \\<minibuffer-local-completion-map>\\[next-history-element] \
+to pull the file attributes of the file at point
into the minibuffer."
(interactive "P")
(dired-do-chxxx "Timestamp" dired-touch-program 'touch arg))
@@ -761,7 +762,7 @@ with a prefix argument."
(defvar dired-aux-files)
(defun dired-minibuffer-default-add-shell-commands ()
- "Return a list of all commands associated with current dired files.
+ "Return a list of all commands associated with current Dired files.
This function is used to add all related commands retrieved by `mailcap'
to the end of the list of defaults just after the default value."
(interactive)
@@ -774,7 +775,7 @@ to the end of the list of defaults just after the default value."
;; This is an extra function so that you can redefine it, e.g., to use gmhist.
(defun dired-read-shell-command (prompt arg files)
- "Read a dired shell command.
+ "Read a Dired shell command.
PROMPT should be a format string with one \"%s\" format sequence,
which is replaced by the value returned by `dired-mark-prompt',
with ARG and FILES as its arguments. FILES should be a list of
@@ -921,11 +922,11 @@ Also see the `dired-confirm-shell-command' variable."
;; Might use {,} for bash or csh:
(defvar dired-mark-prefix ""
- "Prepended to marked files in dired shell commands.")
+ "Prepended to marked files in Dired shell commands.")
(defvar dired-mark-postfix ""
- "Appended to marked files in dired shell commands.")
+ "Appended to marked files in Dired shell commands.")
(defvar dired-mark-separator " "
- "Separates marked files in dired shell commands.")
+ "Separates marked files in Dired shell commands.")
(defun dired-shell-stuff-it (command file-list on-each &optional _raw-arg)
;; "Make up a shell command line from COMMAND and FILE-LIST.
@@ -1336,7 +1337,7 @@ See `dired-guess-shell-alist-user'."
(defun dired-kill-line (&optional arg)
"Kill the current line (not the files).
With a prefix argument, kill that many lines starting with the current line.
-\(A negative argument kills backward.)"
+(A negative argument kills backward.)"
(interactive "P")
(setq arg (prefix-numeric-value arg))
(let (buffer-read-only file)
@@ -1844,7 +1845,7 @@ See Info node `(emacs)Subdir switches' for more details."
(message "Redisplaying...done")))
(defun dired-reset-subdir-switches ()
- "Set `dired-switches-alist' to nil and revert dired buffer."
+ "Set `dired-switches-alist' to nil and revert Dired buffer."
(interactive)
(setq dired-switches-alist nil)
(revert-buffer))
@@ -1880,7 +1881,7 @@ See Info node `(emacs)Subdir switches' for more details."
(defvar dired-omit-localp)
(defun dired-add-entry (filename &optional marker-char relative)
- "Add a new dired entry for FILENAME.
+ "Add a new Dired entry for FILENAME.
Optionally mark it with MARKER-CHAR (a character, else uses
`dired-marker-char'). Note that this adds the entry `out of order'
if files are sorted by time, etc.
@@ -2008,7 +2009,7 @@ files matching `dired-omit-regexp'."
;;;###autoload
(defun dired-remove-file (file)
- "Remove entry FILE on each dired buffer.
+ "Remove entry FILE on each Dired buffer.
Note this doesn't delete FILE in the file system.
See `dired-delete-file' in case you wish that."
(dired-fun-in-all-buffers
@@ -2107,7 +2108,7 @@ option are non-nil, renaming a directory named `old_name' to
`new_name' does not exists already, it will be created and
`old_name' be moved into it. If only `new_name' (without the
trailing /) is given or this option or
-`dired-create-destination-dirs' is `nil', `old_name' will be
+`dired-create-destination-dirs' is nil, `old_name' will be
renamed to `new_name'."
:type '(choice
(const :tag
@@ -3077,7 +3078,7 @@ Type \\`SPC' or \\`y' to %s one file, \\`DEL' or \\`n' to skip to next,
;;;###autoload
(defun dired-maybe-insert-subdir (dirname &optional
switches no-error-if-not-dir-p)
- "Insert this subdirectory into the same dired buffer.
+ "Insert this subdirectory into the same Dired buffer.
If it is already present, just move to it (type \\[dired-do-redisplay] to refresh),
else inserts it at its natural place (as `ls -lR' would have done).
With a prefix arg, you may edit the ls switches used for this listing.
@@ -3427,7 +3428,7 @@ Lower levels are unaffected."
;;;###autoload
(defun dired-tree-up (arg)
- "Go up ARG levels in the dired tree."
+ "Go up ARG levels in the Dired tree."
(interactive "p")
(let ((dir (dired-current-directory)))
(while (>= arg 1)
@@ -3439,7 +3440,7 @@ Lower levels are unaffected."
;;;###autoload
(defun dired-tree-down ()
- "Go down in the dired tree."
+ "Go down in the Dired tree."
(interactive)
(let ((dir (dired-current-directory)) ; has slash
pos case-fold-search) ; filenames are case sensitive
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..11953299da9 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
@@ -147,10 +147,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 a7e1df3622d..937300cf0c0 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>
diff --git a/lisp/emacs-lisp/byte-run.el b/lisp/emacs-lisp/byte-run.el
index 1babf3ec2c4..eb7d026b146 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>
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index f176e769bf5..5df1205869c 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>
diff --git a/lisp/emacs-lisp/cconv.el b/lisp/emacs-lisp/cconv.el
index f3431db4156..0154716627f 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
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 3bddb93b64a..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
@@ -22,28 +22,35 @@
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
-;;
+
;; The Emacs Lisp manual has a nice chapter on how to write
;; documentation strings. Many stylistic suggestions are fairly
;; deterministic and easy to check for syntactically, but also easy
;; to forget. The main checkdoc engine will perform the stylistic
;; checks needed to make sure these styles are remembered.
;;
-;; There are three ways to use checkdoc:
-;; 1) Use `flymake-mode'.
+;; There are four ways to use checkdoc:
+;;
+;; 1) Use `flymake-mode'. Type `M-x flymake-mode' in any Emacs Lisp
+;; buffer; the checkdoc back-end is enabled by default.
+;;
;; 2) Periodically use `checkdoc' or `checkdoc-current-buffer'.
-;; `checkdoc' is a more interactive version of
-;; `checkdoc-current-buffer'
+;; The `checkdoc' command is a more interactive version of
+;; `checkdoc-current-buffer'.
+;;
;; 3) Use `checkdoc-minor-mode' to automatically check your
;; documentation whenever you evaluate Lisp code with C-M-x
;; or [menu-bar emacs-lisp eval-buffer]. Additional key-bindings
;; are also provided under C-c ? KEY
;; (add-hook 'emacs-lisp-mode-hook 'checkdoc-minor-mode)
;;
+;; 4) Use `checkdoc-ispell' to spellcheck docstrings interactively.
+;;
;; Using `checkdoc':
;;
-;; The commands `checkdoc' and `checkdoc-ispell' are the top-level
-;; entry points to all of the different checks that are available. It
+;; Most users will probably use checkdoc through `flymake'. The
+;; commands `checkdoc' and `checkdoc-ispell' are the top-level entry
+;; points to all of the different checks that are available. It
;; breaks examination of your Lisp file into four sections (comments,
;; documentation, messages, and spacing) and indicates its current
;; state in a status buffer.
@@ -66,7 +73,7 @@
;; interface offers several options, including the ability to skip to
;; the next error, or back up to previous errors. Auto-fixing is
;; turned off at this stage, but you can use the `f' or `F' key to fix
-;; a given error (if the fix is available.)
+;; a given error (if the fix is available).
;;
;; Auto-fixing:
;;
@@ -99,6 +106,7 @@
;; install into Ispell on the fly, but only if Ispell is not already
;; running. Use `ispell-kill-ispell' to make checkdoc restart it with
;; these words enabled.
+;; See also the `flyspell-prog-mode' minor mode.
;;
;; Checking parameters:
;;
@@ -176,6 +184,7 @@
"Support for doc string checking in Emacs Lisp."
:prefix "checkdoc"
:group 'lisp
+ :link '(emacs-commentary-link "checkdoc.el")
:version "20.3")
(defcustom checkdoc-minor-mode-string " CDoc"
diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index 66b214554ee..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
@@ -552,7 +552,7 @@ too large if positive or too small if negative)."
,new)))))
(seq-subseq seq start end))
-;;; This isn't a defalias because autoloading defalises doesn't work
+;;; This isn't a defalias because autoloading defaliases doesn't work
;;; very well.
;;;###autoload
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..152a1fe9434 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
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 43a2ed92059..685ab99c26e 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
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 7b562aaa53d..49e3cdb8de7 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
@@ -3716,7 +3716,7 @@ 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)
@@ -4005,8 +4005,11 @@ display a message."
:command (list
(expand-file-name invocation-name
invocation-directory)
- "-no-comp-spawn" "--batch" "-l"
- temp-file)
+ "-no-comp-spawn" "-Q" "--batch"
+ "--eval"
+ ;; Suppress Abort dialogs on MS-Windows
+ "(setq w32-disable-abort-dialog t)"
+ "-l" temp-file)
:sentinel
(lambda (process _event)
(run-hook-with-args
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 2df390ecbeb..5721470ad0d 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>
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..064a55f2727 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
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 11251d7a963..e307776252a 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 7e39a77aed5..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
@@ -514,7 +514,7 @@ This will generate compile-time constants from BINDINGS."
(0 font-lock-builtin-face))
;; ELisp and CLisp `&' keywords as types.
(,(lambda (bound) (lisp-mode--search-key "&" bound))
- (0 font-lock-builtin-face))
+ (0 font-lock-type-face))
;; ELisp regexp grouping constructs
(,(lambda (bound)
(catch 'found
@@ -567,7 +567,7 @@ This will generate compile-time constants from BINDINGS."
(0 font-lock-builtin-face))
;; ELisp and CLisp `&' keywords as types.
(,(lambda (bound) (lisp-mode--search-key "&" bound))
- (0 font-lock-builtin-face))
+ (0 font-lock-type-face))
;; ELisp regexp grouping constructs
;; This is too general -- rms.
;; A user complained that he has functions whose names start with `do'
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 f4df40249de..168de1bf180 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
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 a17fdb7e359..f5a150ac4ae 100644
--- a/lisp/emacs-lisp/oclosure.el
+++ b/lisp/emacs-lisp/oclosure.el
@@ -1,21 +1,23 @@
;;; 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>
-;; This program is free software; you can redistribute it and/or modify
+;; 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.
-;; This program is distributed in the hope that it will be useful,
+;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el
index a4520ab800f..ddcfe57928b 100644
--- a/lisp/emacs-lisp/package-vc.el
+++ b/lisp/emacs-lisp/package-vc.el
@@ -1,22 +1,24 @@
;;; 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
-;; This program is free software; you can redistribute it and/or modify
+;; 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.
-;; This program is distributed in the hope that it will be useful,
+;; 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 this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
@@ -48,6 +50,7 @@
(eval-when-compile (require 'rx))
(eval-when-compile (require 'inline))
(eval-when-compile (require 'map))
+(eval-when-compile (require 'cl-lib))
(require 'package)
(require 'lisp-mnt)
(require 'vc)
@@ -128,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)))))))
@@ -291,21 +294,43 @@ asynchronously."
(insert-file-contents main-file)
(package-strip-rcs-id
(or (lm-header "package-version")
- (lm-header "version"))))
+ (lm-header "version")
+ "0")))
"0"))
(defun package-vc--main-file (pkg-desc)
"Return the name of the main file for PKG-DESC."
(cl-assert (package-vc-p pkg-desc))
- (let ((pkg-spec (package-vc--desc->spec pkg-desc))
- (name (symbol-name (package-desc-name pkg-desc))))
- (or (plist-get pkg-spec :main-file)
- (expand-file-name
- (concat name ".el")
- (file-name-concat
- (or (package-desc-dir pkg-desc)
- (expand-file-name name package-user-dir))
- (plist-get pkg-spec :lisp-dir))))))
+ (let* ((pkg-spec (package-vc--desc->spec pkg-desc))
+ (name (symbol-name (package-desc-name pkg-desc)))
+ (directory (file-name-concat
+ (or (package-desc-dir pkg-desc)
+ (expand-file-name name package-user-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")
+ directory))))
+ (if (file-exists-p file) file
+ ;; The following heuristic is only necessary when fetching a
+ ;; repository with URL that would break the above assumptions.
+ ;; Concrete example: https://github.com/sachac/waveform-el does
+ ;; not have a file waveform-el.el, but a file waveform.el, so we
+ ;; try and find the closest match.
+ (let ((distance most-positive-fixnum) (best nil))
+ (dolist (alt (directory-files directory t "\\.el\\'" t))
+ (let ((sd (string-distance file alt)))
+ (when (and (not (string-match-p (rx (or (: "-autoloads.el")
+ (: "-pkg.el"))
+ eos)
+ alt))
+ (< sd distance))
+ (when (< sd distance)
+ (setq distance (string-distance file alt)
+ best alt)))))
+ best))))
(defun package-vc--generate-description-file (pkg-desc pkg-file)
"Generate a package description file for PKG-DESC and write it to PKG-FILE."
@@ -383,98 +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))
-
- ;; 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.
@@ -528,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)))
@@ -637,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
@@ -661,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
@@ -670,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)
@@ -708,11 +812,11 @@ regular package, but it will not remove a VC package."
(defun package-vc-checkout (pkg-desc directory &optional rev)
"Clone the sources for PKG-DESC into DIRECTORY and visit that directory.
Unlike `package-vc-install', this does not yet set up the package
-for use with Emacs; use `package-vc-link-directory' for setting
-the package up after this function finishes.
-Optional argument REV means to clone a specific version of the
-package; it defaults to the last version available from the
-package's repository. If REV has the special value
+for use with Emacs; use `package-vc-install-from-checkout' for
+setting the package up after this function finishes. Optional
+argument REV means to clone a specific version of the package; it
+defaults to the last version available from the package's
+repository. If REV has the special value
`:last-release' (interactively, the prefix argument), that stands
for the last released version of the package."
(interactive
@@ -751,10 +855,15 @@ name from the base name of DIR."
(package-vc--archives-initialize)
(let* ((name (or name (file-name-base (directory-file-name dir))))
(pkg-dir (expand-file-name name package-user-dir)))
+ (when (file-exists-p pkg-dir)
+ (if (yes-or-no-p (format "Overwrite previous checkout for package `%s'?" name))
+ (package--delete-directory pkg-dir)
+ (error "There already exists a checkout for %s" name)))
(make-symbolic-link (expand-file-name dir) pkg-dir)
(package-vc--unpack-1
(package-desc-create
:name (intern name)
+ :dir pkg-dir
:kind 'vc)
(file-name-as-directory pkg-dir))))
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 3ea5aa2bd47..a96d6f22aae 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>
@@ -1950,8 +1950,10 @@ SEEN is used internally to detect infinite recursion."
(if (eq next-pkg 'emacs)
(error "This package requires Emacs version %s"
(package-version-join next-version))
- (error "Package `%s-%s' is unavailable"
- next-pkg (package-version-join next-version))))))
+ (error (if (not next-version)
+ (format "Package `%s' is unavailable" next-pkg)
+ (format "Package `%s' (version %s) is unavailable"
+ next-pkg (package-version-join next-version))))))))
(setq packages
(package-compute-transaction (cons found packages)
(package-desc-reqs found)
@@ -2093,7 +2095,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..810b13f61d6 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
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 ec51146484a..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.
@@ -1152,7 +1152,12 @@ For extending the `rx' notation in FORM, use `rx-define' or `rx-let-eval'."
(defun rx--to-expr (form)
"Translate the rx-expression FORM to a Lisp expression yielding a regexp."
- (let* ((rx--delayed-evaluation t)
+ (let* ((rx--local-definitions
+ ;; Retrieve local definitions from the macroexpansion environment.
+ ;; (It's unclear whether the previous value of `rx--local-definitions'
+ ;; should be included, and if so, in which order.)
+ (cdr (assq :rx-locals macroexpand-all-environment)))
+ (rx--delayed-evaluation t)
(elems (car (rx--translate form)))
(args nil))
;; Merge adjacent strings.
@@ -1282,12 +1287,7 @@ Additional constructs can be defined using `rx-define' and `rx-let',
which see.
\(fn REGEXPS...)"
- ;; Retrieve local definitions from the macroexpansion environment.
- ;; (It's unclear whether the previous value of `rx--local-definitions'
- ;; should be included, and if so, in which order.)
- (let ((rx--local-definitions
- (cdr (assq :rx-locals macroexpand-all-environment))))
- (rx--to-expr (cons 'seq regexps))))
+ (rx--to-expr (cons 'seq regexps)))
(defun rx--make-binding (name tail)
"Make a definitions entry out of TAIL.
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 83283247150..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
@@ -251,19 +251,24 @@ A FUNC form can have any number of `:no-eval' (or `:no-value'),
:eval (string-glyph-decompose "â„«"))
"Predicates for Strings"
(string-equal
- :eval (string-equal "foo" "foo"))
+ :eval (string-equal "abc" "abc")
+ :eval (string-equal "abc" "ABC"))
(string-equal-ignore-case
:eval (string-equal-ignore-case "foo" "FOO"))
- (eq
- :eval (eq "foo" "foo"))
- (eql
- :eval (eql "foo" "foo"))
(equal
:eval (equal "foo" "foo"))
(cl-equalp
:eval (cl-equalp "Foo" "foo"))
(stringp
+ :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 ""))
@@ -271,16 +276,16 @@ A FUNC form can have any number of `:no-eval' (or `:no-value'),
:no-manual t
:eval (string-blank-p " \n"))
(string-lessp
- :eval (string-lessp "foo" "bar")
+ :eval (string-lessp "abc" "def")
:eval (string-lessp "pic4.png" "pic32.png")
- :eval (string-lessp "1.1" "1 2"))
+ :eval (string-lessp "1.1" "1.2"))
(string-greaterp
:eval (string-greaterp "foo" "bar"))
(string-version-lessp
:eval (string-version-lessp "pic4.png" "pic32.png")
- :eval (string-version-lessp "1.1" "1 2"))
+ :eval (string-version-lessp "1.9.3" "1.10.2"))
(string-collate-lessp
- :eval (string-collate-lessp "1.1" "1 2"))
+ :eval (string-collate-lessp "abc" "abd"))
(string-prefix-p
:eval (string-prefix-p "foo" "foobar"))
(string-suffix-p
@@ -297,9 +302,13 @@ A FUNC form can have any number of `:no-eval' (or `:no-value'),
"Converting Strings"
(string-to-number
:eval (string-to-number "42")
- :eval (string-to-number "deadbeef" 16))
+ :eval (string-to-number "deadbeef" 16)
+ :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")
@@ -627,8 +636,7 @@ A FUNC form can have any number of `:no-eval' (or `:no-value'),
(nconc
:eval (nconc (list 1) (list 2 3 4)))
(delq
- :eval (delq 2 (list 1 2 3 4))
- :eval (delq "a" (list "a" "b" "c" "d")))
+ :eval (delq 'a (list 'a 'b 'c 'd)))
(delete
:eval (delete 2 (list 1 2 3 4))
:eval (delete "a" (list "a" "b" "c" "d")))
@@ -644,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"
@@ -670,29 +678,25 @@ A FUNC form can have any number of `:no-eval' (or `:no-value'),
:eval (nlistp '(1 . 2)))
"Finding Elements"
(memq
- :eval (memq 2 '(1 2 3))
- :eval (memq 2.0 '(1.0 2.0 3.0))
- :eval (memq "b" '("a" "b" "c")))
+ :eval (memq 'b '(a b c)))
+ (memql
+ :eval (memql 2.0 '(1.0 2.0 3.0)))
(member
:eval (member 2 '(1 2 3))
:eval (member "b" '("a" "b" "c")))
(remq
- :eval (remq 2 '(1 2 3 2 4 2))
- :eval (remq "b" '("a" "b" "c")))
- (memql
- :eval (memql 2.0 '(1.0 2.0 3.0)))
+ :eval (remq 'b '(a b c)))
(member-ignore-case
:eval (member-ignore-case "foo" '("bar" "Foo" "zot")))
"Association Lists"
(assoc
- :eval (assoc 'b '((a 1) (b 2))))
+ :eval (assoc "b" '(("a" . 1) ("b" . 2))))
(rassoc
- :eval (rassoc '2 '((a . 1) (b . 2))))
+ :eval (rassoc "b" '((1 . "a") (2 . "b"))))
(assq
- :eval (assq 'b '((a 1) (b 2)))
- :eval (assq "a" '(("a" 1) ("b" 2))))
+ :eval (assq 'b '((a . 1) (b . 2))))
(rassq
- :eval (rassq '2 '((a . 1) (b . 2))))
+ :eval (rassq 'b '((1 . a) (2 . b))))
(assoc-string
:eval (assoc-string "foo" '(("a" 1) (foo 2))))
(alist-get
@@ -725,6 +729,88 @@ A FUNC form can have any number of `:no-eval' (or `:no-value'),
(safe-length
:eval (safe-length '(a b c))))
+(define-short-documentation-group symbol
+ "Making symbols"
+ (intern
+ :eval (intern "abc"))
+ (intern-soft
+ :eval (intern-soft "Phooey!"))
+ (make-symbol
+ :eval (make-symbol "abc"))
+ "Comparing symbols"
+ (eq
+ :eval (eq 'abc 'abc)
+ :eval (eq 'abc 'abd))
+ (eql
+ :eval (eql 'abc 'abc))
+ (equal
+ :eval (equal 'abc 'abc))
+ "Name"
+ (symbol-name
+ :eval (symbol-name 'abc)))
+
+(define-short-documentation-group comparison
+ "General-purpose"
+ (eq
+ :eval (eq 'a 'a)
+ :eval "(eq ?A ?A)"
+ :eval (let ((x (list 'a "b" '(c) 4 5.0)))
+ (eq x x)))
+ (eql
+ :eval (eql 2 2)
+ :eval (eql 2.0 2.0)
+ :eval (eql 2.0 2))
+ (equal
+ :eval (equal "abc" "abc")
+ :eval (equal 2.0 2.0)
+ :eval (equal 2.0 2)
+ :eval (equal '(a "b" (c) 4.0) '(a "b" (c) 4.0)))
+ (cl-equalp
+ :eval (cl-equalp 2 2.0)
+ :eval (cl-equalp "ABC" "abc"))
+ "Numeric"
+ (=
+ :args (number &rest numbers)
+ :eval (= 2 2)
+ :eval (= 2.0 2.0)
+ :eval (= 2.0 2)
+ :eval (= 4 4 4 4))
+ (/=
+ :eval (/= 4 4))
+ (<
+ :args (number &rest numbers)
+ :eval (< 4 4)
+ :eval (< 1 2 3))
+ (<=
+ :args (number &rest numbers)
+ :eval (<= 4 4)
+ :eval (<= 1 2 2 3))
+ (>
+ :args (number &rest numbers)
+ :eval (> 4 4)
+ :eval (> 3 2 1))
+ (>=
+ :args (number &rest numbers)
+ :eval (>= 4 4)
+ :eval (>= 3 2 2 1))
+ "String"
+ (string-equal
+ :eval (string-equal "abc" "abc")
+ :eval (string-equal "abc" "ABC"))
+ (string-equal-ignore-case
+ :eval (string-equal-ignore-case "abc" "ABC"))
+ (string-lessp
+ :eval (string-lessp "abc" "abd")
+ :eval (string-lessp "abc" "abc")
+ :eval (string-lessp "pic4.png" "pic32.png"))
+ (string-greaterp
+ :eval (string-greaterp "abd" "abc")
+ :eval (string-greaterp "abc" "abc"))
+ (string-version-lessp
+ :eval (string-version-lessp "pic4.png" "pic32.png")
+ :eval (string-version-lessp "1.9.3" "1.10.2"))
+ (string-collate-lessp
+ :eval (string-collate-lessp "abc" "abd")))
(define-short-documentation-group vector
"Making Vectors"
@@ -1131,13 +1217,10 @@ A FUNC form can have any number of `:no-eval' (or `:no-value'),
:args (number &rest numbers)
:eval (= 4 4)
:eval (= 4.0 4.0)
- :eval (= 4 5 6 7))
- (eq
- :eval (eq 4 4)
- :eval (eq 4.0 4.0))
+ :eval (= 4 4.0)
+ :eval (= 4 4 4 4))
(eql
:eval (eql 4 4)
- :eval (eql 4 "4")
:eval (eql 4.0 4.0))
(/=
:eval (/= 4 4))
@@ -1148,15 +1231,15 @@ A FUNC form can have any number of `:no-eval' (or `:no-value'),
(<=
:args (number &rest numbers)
:eval (<= 4 4)
- :eval (<= 1 2 3))
+ :eval (<= 1 2 2 3))
(>
:args (number &rest numbers)
:eval (> 4 4)
- :eval (> 1 2 3))
+ :eval (> 3 2 1))
(>=
:args (number &rest numbers)
:eval (>= 4 4)
- :eval (>= 1 2 3))
+ :eval (>= 3 2 2 1))
(zerop
:eval (zerop 0))
(cl-plusp
@@ -1440,14 +1523,16 @@ function's documentation in the Info manual"))
do
(cl-case type
(:eval
+ (insert " ")
(if (stringp value)
- (insert " " value "\n")
- (insert " ")
- (prin1 value (current-buffer))
- (insert "\n")
- (insert " " double-arrow " ")
- (prin1 (eval value) (current-buffer))
- (insert "\n")))
+ (insert value)
+ (prin1 value (current-buffer)))
+ (insert "\n " double-arrow " ")
+ (let ((expr (if (stringp value)
+ (car (read-from-string value))
+ value)))
+ (prin1 (eval expr) (current-buffer)))
+ (insert "\n"))
(:no-eval*
(if (stringp value)
(insert " " value "\n")
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 18087bc937f..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)
@@ -370,7 +373,8 @@ this defaults to the current buffer."
(min end (point-max)))))
(if (not (setq disp (get-text-property sub-start 'display object)))
;; No old properties in this range.
- (put-text-property sub-start sub-end 'display (list prop value))
+ (put-text-property sub-start sub-end 'display (list prop value)
+ object)
;; We have old properties.
(let ((vector nil))
;; Make disp into a list.
@@ -390,7 +394,7 @@ this defaults to the current buffer."
(when vector
(setq disp (seq-into disp 'vector)))
;; Finally update the range.
- (put-text-property sub-start sub-end 'display disp)))
+ (put-text-property sub-start sub-end 'display disp object)))
(setq sub-start sub-end))))
;;;###autoload
@@ -398,7 +402,7 @@ this defaults to the current buffer."
"Query the user for a process and return the process object."
;; Currently supports only the PROCESS argument.
;; Must either return a list containing a process, or signal an error.
- ;; (Returning `nil' would mean the current buffer's process.)
+ ;; (Returning nil would mean the current buffer's process.)
(unless (fboundp 'process-list)
(error "Asynchronous subprocesses are not supported on this system"))
;; Local function to return cons of a complete-able name, and the
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 206c10a7734..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
@@ -263,8 +263,6 @@ Populated by `tabulated-list-init-header'.")
'header-line-indent--line-number-width "29.1")
(define-obsolete-function-alias 'tabulated-list-watch-line-number-width
'header-line-indent--watch-line-number-width "29.1")
-(define-obsolete-function-alias 'tabulated-list-watch-line-number-width
- 'header-line-indent--watch-line-number-width "29.1")
(define-obsolete-function-alias 'tabulated-list-window-scroll-function
'header-line-indent--window-scroll-function "29.1")
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 26793989d05..abadefb7105 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 4c539b56a37..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
@@ -109,7 +109,7 @@ When all keys have been selected, use \\[epa-ks-do-key-to-fetch] to
actually import the keys.
When called interactively, `epa-ks-mark-key-to-fetch' will always
-add a \"F\" tag. Non-interactivly the tag must be specified by
+add a \"F\" tag. Non-interactively the tag must be specified by
setting the TAG parameter."
(interactive (list "F"))
(if (region-active-p)
@@ -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 a4046ba9b39..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
@@ -130,7 +130,8 @@ canonical name.")
(if val "Enable" "Disable")
" ERC " (symbol-name name) " mode."
(when localp
- "\nWith ARG, do so in all buffers for the current connection."))
+ (concat "\nWhen called interactively,"
+ " do so in all buffers for the current connection.")))
(interactive ,@(when localp '("p")))
,@(if localp
`((when (derived-mode-p 'erc-mode)
@@ -301,17 +302,11 @@ nil."
(defun erc-downcase (string)
"Return a downcased copy of STRING with properties.
Use the CASEMAPPING ISUPPORT parameter to determine the style."
- (let* ((mapping (erc--get-isupport-entry 'CASEMAPPING 'single))
- (inhibit-read-only t))
- (if (equal mapping "ascii")
- (downcase string)
- (with-temp-buffer
- (insert string)
- (translate-region (point-min) (point-max)
- (if (equal mapping "rfc1459-strict")
- erc--casemapping-rfc1459-strict
- erc--casemapping-rfc1459))
- (buffer-string)))))
+ (with-case-table (pcase (erc--get-isupport-entry 'CASEMAPPING 'single)
+ ("ascii" ascii-case-table)
+ ("rfc1459-strict" erc--casemapping-rfc1459-strict)
+ (_ erc--casemapping-rfc1459))
+ (downcase string)))
(define-inline erc-get-channel-user (nick)
"Find NICK in the current buffer's `erc-channel-users' hash table."
diff --git a/lisp/erc/erc-compat.el b/lisp/erc/erc-compat.el
index abbaafcd936..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>
@@ -176,12 +176,12 @@ If START or END is negative, it counts from the end."
;; This hard codes `auth-source-pass-port-separator' to ":"
(defun erc-compat--29-auth-source-pass--retrieve-parsed (seen e port-number-p)
(when (string-match (rx (or bot "/")
- (or (: (? (group-n 20 (+ (not (in " /:")))) "@")
- (group-n 10 (+ (not (in " /:@"))))
+ (or (: (? (group-n 20 (+ (not (in "/:")))) "@")
+ (group-n 10 (+ (not (in "/:@"))))
(? ":" (group-n 30 (+ (not (in " /:"))))))
- (: (group-n 11 (+ (not (in " /:@"))))
+ (: (group-n 11 (+ (not (in "/:@"))))
(? ":" (group-n 31 (+ (not (in " /:")))))
- (? "/" (group-n 21 (+ (not (in " /:")))))))
+ (? "/" (group-n 21 (+ (not (in "/:")))))))
eot)
e)
(puthash e `( :host ,(or (match-string 10 e) (match-string 11 e))
@@ -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,8 +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
- (cl-pushnew '("\\`irc6?s?://" . erc-compat--29-browse-url-irc)
- browse-url-default-handlers))
+ (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 19a7ab86437..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>
@@ -60,6 +60,7 @@
(declare-function erc-buffer-filter "erc" (predicate &optional proc))
(declare-function erc-current-nick "erc" nil)
(declare-function erc-display-error-notice "erc" (parsed string))
+(declare-function erc-display-message "erc" (parsed type buffer msg &rest args))
(declare-function erc-error "erc" (&rest args))
(declare-function erc-get-buffer "erc" (target &optional proc))
(declare-function erc-server-buffer "erc" nil)
@@ -1096,7 +1097,8 @@ matching that of the dying buffer."
(erc--target-symbol erc--target))))))))
((not (cdr others))))
(with-current-buffer (car others)
- (rename-buffer (erc--target-string target)))))
+ (unless (get-buffer (erc--target-string target))
+ (rename-buffer (erc--target-string target))))))
(defun erc-networks-shrink-ids-and-buffer-names ()
"Recompute network IDs and buffer names, ignoring the current buffer.
@@ -1187,19 +1189,20 @@ rename them with <n> suffixes going from newest to oldest."
(erc--target-string target)))
placeholder)
;; If we don't exist, claim name temporarily while renaming others
- (when-let* (namesakes
- (ex (get-buffer name))
- ((not (memq ex existing)))
- (temp-name (generate-new-buffer-name (format "*%s*" name))))
- (setq existing (remq ex existing))
- (with-current-buffer ex
- (rename-buffer temp-name)
- (setq placeholder (get-buffer-create name))
- (rename-buffer name 'unique)))
+ (when-let* ((ex (get-buffer name))
+ ((not (memq ex existing))))
+ (if namesakes ; if namesakes is nonempty, it contains ex
+ (with-current-buffer ex
+ (let ((temp-name (generate-new-buffer-name (format "*%s*" name))))
+ (rename-buffer temp-name)
+ (setq placeholder (get-buffer-create name))
+ (rename-buffer name 'unique)))
+ ;; Here, ex must be a server buffer or a non-ERC buffer
+ (setq name (erc-networks--construct-target-buffer-name target))))
(unless (with-suppressed-warnings ((obsolete erc-reuse-buffers))
erc-reuse-buffers)
(when (string-suffix-p ">" name)
- (setq name (substring name 0 -3))))
+ (setq name (string-trim-right name (rx "<" (+ digit) ">")))))
(dolist (ex (erc-networks--id-sort-buffers existing))
(with-current-buffer ex
(rename-buffer name 'unique)))
@@ -1260,24 +1263,45 @@ given by the `RPL_ISUPPORT' NETWORK parameter."
return name)
(and-let* ((vanity (erc--get-isupport-entry 'NETWORK 'single))
((intern vanity))))
+ (erc-networks--id-given erc-networks--id)
erc-networks--name-missing-sentinel))
-(defun erc-networks--set-name (_proc parsed)
+(defvar erc-networks--allow-unknown-network nil
+ "Whether to ignore a failure in identifying the network.
+If you need this as a user option, please say so via \\[erc-bug].
+Otherwise, expect it to vanish at any time.") ; Bug#59976
+
+(defun erc-networks--set-name (proc parsed)
"Set `erc-network' to the value returned by `erc-networks--determine'.
-Signal an error when the network cannot be determined."
+Print an error message when the network cannot be determined before
+shutting down the connection."
;; Always update (possibly clobber) current value, if any.
- (let ((name (erc-networks--determine)))
- (when (eq name erc-networks--name-missing-sentinel)
- ;; This can happen theoretically, e.g., if you're editing some
- ;; settings interactively on a proxy service that impersonates IRC
- ;; but aren't being proxied through to a real network. The
+ (pcase (setq erc-network (erc-networks--determine))
+ ((and (pred (eq (erc-networks--id-given erc-networks--id)))
+ (let m (format "Couldn't determine network. Using given ID `%s'."
+ erc-network)))
+ (erc-display-message parsed 'notice nil m)
+ nil)
+ ((and
+ (guard (eq erc-network erc-networks--name-missing-sentinel))
+ ;; This can happen theoretically, e.g., when adjusting settings
+ ;; on a proxy service that partially impersonates IRC but isn't
+ ;; currently conveying anything through to a real network. The
;; service may send a 422 but no NETWORK param (or *any* 005s).
- (let ((m (concat "Failed to determine network. Please set entry for "
- erc-server-announced-name " in `erc-networks-alist'.")))
- (erc-display-error-notice parsed m)
- (erc-error "Failed to determine network"))) ; beep
- (setq erc-network name))
- nil)
+ (let m (concat "Failed to determine network. Please set entry for \""
+ erc-server-announced-name "\" in `erc-networks-alist'"
+ " or consider calling `erc-tls' with the keyword `:id'."
+ " See Info:\"(erc) Network Identifier\" for more.")))
+ (require 'info)
+ (erc-display-error-notice parsed m)
+ (if erc-networks--allow-unknown-network
+ (progn
+ (erc-display-error-notice
+ parsed (format "Continuing anyway with network set to `%s'."
+ erc-network))
+ nil)
+ (delete-process proc)
+ 'error))))
;; This lives here in this file because all the other "on connect"
;; MOTD stuff ended up here (but perhaps that needs to change).
@@ -1287,11 +1311,12 @@ Signal an error when the network cannot be determined."
Copy source (prefix) from MOTD-ish message as a last resort."
;; The 004 handler never ran; see 2004-03-10 Diane Murray in change log
(unless erc-server-announced-name
- (erc-display-error-notice parsed "Failed to determine server name.")
+ (setq erc-server-announced-name (erc-response.sender parsed))
(erc-display-error-notice
- parsed (concat "If this was unexpected, consider reporting it via "
- (substitute-command-keys "\\[erc-bug]") "."))
- (setq erc-server-announced-name (erc-response.sender parsed)))
+ parsed (concat "Failed to determine server name. Using \""
+ erc-server-announced-name "\" instead."
+ " If this was unexpected, consider reporting it via "
+ (substitute-command-keys "\\[erc-bug]") ".")))
nil)
(defun erc-unset-network-name (_nick _ip _reason)
@@ -1447,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
@@ -1477,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 5b2c93988af..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.
;;
@@ -102,7 +102,7 @@ ERC binds all options defined in this library, such as
`erc-sasl-password', to their values from entry-point invocation.
In return, ERC expects a string to send as the SASL password, or
nil, in which case, ERC will prompt the for input. See info
-node `(erc) Connecting' for details on ERC's auth-source
+node `(erc) auth-source' for details on ERC's auth-source
integration."
:type '(choice (function-item erc-sasl-auth-source-password-as-host)
(function-item erc-auth-source-search)
@@ -414,17 +414,30 @@ This doesn't solicit or validate a suite of supported mechanisms."
" "))
(erc-sasl--destroy proc))
+(defvar erc-sasl--send-cap-ls nil
+ "Whether to send an opening \"CAP LS\" command.
+This is an escape hatch for picky servers. If you need it turned
+into a user option, please let ERC know via \\[erc-bug].
+Otherwise, expect it to disappear in subsequent versions.")
+
(cl-defmethod erc--register-connection (&context (erc-sasl-mode (eql t)))
- "Send speculative/pipelined CAP and AUTHENTICATE and hope for the best."
+ "Send speculative CAP and pipelined AUTHENTICATE and hope for the best."
(if-let* ((c (erc-sasl--state-client erc-sasl--state))
(m (sasl-mechanism-name (sasl-client-mechanism c))))
(progn
- (erc-server-send "CAP REQ :sasl")
- (if (and erc-session-password
- (eq :password (alist-get 'password erc-sasl--options)))
- (let (erc-session-password)
- (erc-login))
- (erc-login))
+ (erc-server-send (if erc-sasl--send-cap-ls "CAP LS" "CAP REQ :sasl"))
+ (let ((erc-session-password
+ (and erc-session-password
+ (not (eq :password (alist-get 'password erc-sasl--options)))
+ erc-session-password))
+ (erc-session-username
+ ;; The username may contain a colon or a space
+ (if (eq :user (alist-get 'user erc-sasl--options))
+ (erc-current-nick)
+ erc-session-username)))
+ (cl-call-next-method))
+ (when erc-sasl--send-cap-ls
+ (erc-server-send "CAP REQ :sasl"))
(erc-server-send (format "AUTHENTICATE %s" m)))
(erc-sasl--destroy erc-server-process)))
diff --git a/lisp/erc/erc-services.el b/lisp/erc/erc-services.el
index 48953288d17..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
@@ -180,7 +180,7 @@ Called with a subset of keyword parameters known to
`auth-source-search' and relevant to authenticating to nickname
services. In return, ERC expects a string to send as the
password, or nil, to fall through to the next method, such as
-prompting. See info node `(erc) Connecting' for details."
+prompting. See info node `(erc) auth-source' for details."
:package-version '(ERC . "5.4.1") ; FIXME update when publishing to ELPA
:type '(choice (const erc-auth-source-search)
(const nil)
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 268d83dc449..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>
@@ -219,7 +219,7 @@ parameters and authentication."
This variable only exists for legacy reasons. It's not customizable and
is limited to a single server password. Users looking for similar
functionality should consider auth-source instead. See info
-node `(auth) Top' and info node `(erc) Connecting'.")
+node `(auth) Top' and info node `(erc) auth-source'.")
(make-obsolete-variable 'erc-password "use auth-source instead" "29.1")
@@ -407,15 +407,27 @@ erc-channel-user struct.")
"Hash table of users on the current server.
It associates nicknames with `erc-server-user' struct instances.")
-(defconst erc--casemapping-rfc1459
- (make-translation-table
- '((?\[ . ?\{) (?\] . ?\}) (?\\ . ?\|) (?~ . ?^))
- (mapcar (lambda (c) (cons c (+ c 32))) "ABCDEFGHIJKLMNOPQRSTUVWXYZ")))
-
(defconst erc--casemapping-rfc1459-strict
- (make-translation-table
- '((?\[ . ?\{) (?\] . ?\}) (?\\ . ?\|))
- (mapcar (lambda (c) (cons c (+ c 32))) "ABCDEFGHIJKLMNOPQRSTUVWXYZ")))
+ (let ((tbl (copy-sequence ascii-case-table))
+ (cup (copy-sequence (char-table-extra-slot ascii-case-table 0))))
+ (set-char-table-extra-slot tbl 0 cup)
+ (set-char-table-extra-slot tbl 1 nil)
+ (set-char-table-extra-slot tbl 2 nil)
+ (pcase-dolist (`(,uc . ,lc) '((?\[ . ?\{) (?\] . ?\}) (?\\ . ?\|)))
+ (aset tbl uc lc)
+ (aset tbl lc lc)
+ (aset cup uc uc))
+ tbl))
+
+(defconst erc--casemapping-rfc1459
+ (let ((tbl (copy-sequence erc--casemapping-rfc1459-strict))
+ (cup (copy-sequence (char-table-extra-slot
+ erc--casemapping-rfc1459-strict 0))))
+ (set-char-table-extra-slot tbl 0 cup)
+ (aset tbl ?~ ?^)
+ (aset tbl ?^ ?^)
+ (aset cup ?~ ?~)
+ tbl))
(defun erc-add-server-user (nick user)
"This function is for internal use only.
@@ -1595,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)
@@ -1607,11 +1620,12 @@ same manner."
(if (and (with-suppressed-warnings ((obsolete erc-reuse-buffers))
erc-reuse-buffers)
id)
- (progn
- (when-let* ((buf (get-buffer (symbol-name id)))
+ (let ((string (symbol-name (erc-networks--id-symbol
+ (erc-networks--id-create id)))))
+ (when-let* ((buf (get-buffer string))
((erc-server-process-alive buf)))
- (user-error "Session with ID %S already exists" id))
- (symbol-name id))
+ (user-error "Session with ID %S already exists" string))
+ string)
(generate-new-buffer-name (if (and server port)
(if (with-suppressed-warnings
((obsolete erc-reuse-buffers))
@@ -1752,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.")
@@ -1970,7 +1983,7 @@ Returns the buffer for the given server or channel."
(let* ((target (and channel (erc--target-from-string channel)))
(buffer (erc-get-buffer-create server port nil target id))
(old-buffer (current-buffer))
- (old-vars (and (not connect) (buffer-local-variables)))
+ (old-vars (and target (buffer-local-variables)))
(old-recon-count erc-server-reconnect-count)
(old-point nil)
(delayed-modules nil)
@@ -2148,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."
@@ -2158,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
@@ -2174,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
@@ -2213,9 +2246,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."
(interactive (erc-select-read-args))
(erc-open server port nick full-name t password nil nil nil nil user id))
@@ -2242,6 +2273,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
@@ -2270,11 +2302,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."
(interactive (let ((erc-default-port erc-default-port-tls))
(erc-select-read-args)))
(let ((erc-server-connect-function 'erc-open-tls-stream))
@@ -2310,7 +2342,7 @@ message instead, to make debugging easier."
(defvar erc-debug-irc-protocol-time-format "%FT%T.%6N%z "
"Timestamp format string for protocol logger.")
-(defconst erc-debug-irc-protocol-version "1"
+(defconst erc-debug-irc-protocol-version "2"
"Protocol log format version number.
This exists to help tooling track changes to the format.
@@ -2321,7 +2353,10 @@ interpreted as email-style headers. Folding is not supported. A second
double CRLF, if present, signals the end of a log. Session resumption
is not supported. Logger lines must adhere to the following format:
TIMESTAMP PEER-NAME FLOW-INDICATOR IRC-MESSAGE CRLF. Outgoing messages
-are indicated with a >> and incoming with a <<.")
+are indicated with a >> and incoming with a <<.
+
+In version 2, certain outgoing passwords are replaced by a string
+of ten question marks.")
(defvar erc-debug-irc-protocol nil
"If non-nil, log all IRC protocol traffic to the buffer \"*erc-protocol*\".
@@ -2377,7 +2412,7 @@ workaround."
(format "%s:%s" erc-session-server erc-session-port))))
(ts (when erc-debug-irc-protocol-time-format
(format-time-string erc-debug-irc-protocol-time-format))))
- (when erc--debug-irc-protocol-mask-secrets
+ (when (and outbound erc--debug-irc-protocol-mask-secrets)
(setq string (erc--mask-secrets string)))
(with-current-buffer (get-buffer-create "*erc-protocol*")
(save-excursion
@@ -3208,7 +3243,7 @@ if any. In return, ERC expects a string to send as the server
password, or nil, to skip the \"PASS\" command completely. An
explicit `:password' argument to entry-point commands `erc' and
`erc-tls' also inhibits lookup, as does setting this option to
-nil. See info node `(erc) Connecting' for details."
+nil. See info node `(erc) auth-source' for details."
:package-version '(ERC . "5.4.1") ; FIXME update when publishing to ELPA
:group 'erc
:type '(choice (const erc-auth-source-search)
@@ -3223,7 +3258,7 @@ channel. In return, ERC expects a string to use as the channel
\"key\", or nil to just join the channel normally. Setting the
option itself to nil tells ERC to always forgo consulting
auth-source for channel keys. For more information, see info
-node `(erc) Connecting'."
+node `(erc) auth-source'."
:package-version '(ERC . "5.4.1") ; FIXME update when publishing to ELPA
:group 'erc
:type '(choice (const erc-auth-source-search)
@@ -5994,18 +6029,18 @@ See also `erc-downcase'."
(and (erc--target-channel-p erc--target)
(erc-get-channel-user (erc-current-nick)) t))
-;; This function happens to return nil in channel buffers previously
-;; parted or those from which a user had been kicked. While this
-;; "works" for detecting whether a channel is currently subscribed to,
-;; new code should consider using
+;; 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, third-party code can use
;;
;; (erc-get-channel-user (erc-current-nick))
;;
-;; instead. For retrieving a target regardless of subscription or
-;; connection status, use replacements based on `erc--target'.
-;; (Coming soon.)
-;;
-;; TODO deprecate this
+;; 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."
(let ((tgt (car erc-default-recipients)))
@@ -6452,6 +6487,8 @@ non-nil value is found.
When `erc-auth-source-server-function' is non-nil, call it with NICK for
the user field and use whatever it returns as the server password."
(or password (and erc-auth-source-server-function
+ (not erc--server-reconnecting)
+ (not erc--target)
(funcall erc-auth-source-server-function :user nick))))
(defun erc-compute-full-name (&optional full-name)
@@ -6744,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 9ad218d5988..1be070480b3 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 ac82e3f225c..ca51cee2558 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 4b5e4dd53ed..f88a06d2e95 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 f87cc2f20aa..9aab3af9b47 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>
@@ -146,9 +146,10 @@ If POS is nil, the location of point is checked."
When each function on this hook is called, point will be at the
current position within the argument list. The function should either
return nil, meaning that it did no argument parsing, or it should
-return the result of the parse as a sexp. It is also responsible for
-moving the point forward to reflect the amount of input text that was
-parsed.
+return the result of the parse as a sexp. If the function did do
+argument parsing, but the result was nothing at all, it should return
+`eshell-empty-token'. The function is also responsible for moving the
+point forward to reflect the amount of input text that was parsed.
If the hook determines that it has reached the end of an argument, it
should call `eshell-finish-arg' to complete processing of the current
@@ -325,13 +326,14 @@ Point is left at the end of the arguments."
(prog1
(char-to-string (char-after))
(forward-char)))))
- (if (not eshell-current-argument)
- (setq eshell-current-argument result)
- (unless eshell-arg-listified
- (setq eshell-current-argument
- (list eshell-current-argument)
- eshell-arg-listified t))
- (nconc eshell-current-argument (list result))))))
+ (unless (eq result 'eshell-empty-token)
+ (if (not eshell-current-argument)
+ (setq eshell-current-argument result)
+ (unless eshell-arg-listified
+ (setq eshell-current-argument
+ (list eshell-current-argument)
+ eshell-arg-listified t))
+ (nconc eshell-current-argument (list result)))))))
(when (and outer eshell-current-argument)
(add-text-properties arg-begin (1+ arg-begin)
'(arg-begin t rear-nonsticky
@@ -375,15 +377,20 @@ after are both returned."
(when (eshell-looking-at-backslash-return (point))
(throw 'eshell-incomplete ?\\))
(forward-char 2) ; Move one char past the backslash.
- ;; If the char is in a quote, backslash only has special meaning
- ;; if it is escaping a special char.
- (if eshell-current-quoted
- (if (memq (char-before) eshell-special-chars-inside-quoting)
+ (if (eq (char-before) ?\n)
+ ;; Escaped newlines are extra-special: they expand to an empty
+ ;; token to allow for continuing Eshell commands across
+ ;; multiple lines.
+ 'eshell-empty-token
+ ;; If the char is in a quote, backslash only has special meaning
+ ;; if it is escaping a special char.
+ (if eshell-current-quoted
+ (if (memq (char-before) eshell-special-chars-inside-quoting)
+ (list 'eshell-escape-arg (char-to-string (char-before)))
+ (concat "\\" (char-to-string (char-before))))
+ (if (memq (char-before) eshell-special-chars-outside-quoting)
(list 'eshell-escape-arg (char-to-string (char-before)))
- (concat "\\" (char-to-string (char-before))))
- (if (memq (char-before) eshell-special-chars-outside-quoting)
- (list 'eshell-escape-arg (char-to-string (char-before)))
- (char-to-string (char-before))))))
+ (char-to-string (char-before)))))))
(defun eshell-parse-literal-quote ()
"Parse a literally quoted string. Nothing has special meaning!"
diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el
index 4a41bbe8fa1..f4ac384ccc5 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>
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..26a8530fe54 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>
@@ -342,7 +342,11 @@ If HANDLES is nil, use `eshell-current-handles'."
(when target
(let ((handles (or handles eshell-current-handles)))
(if (and (stringp target)
- (string= target (null-device)))
+ ;; 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'.
+ (string= target "/dev/null"))
(aset handles index nil)
(let ((where (eshell-get-target target mode))
(current (car (aref handles index))))
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 f52b70fe7a6..e8da847e184 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..f1ec3a905b6 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>
diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el
index 0ec11e8a0b3..d003148dc96 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 57ea42f4933..df1413c2de7 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>
@@ -209,7 +209,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
new file mode 100644
index 00000000000..3f80be1c0a4
--- /dev/null
+++ b/lisp/external-completion.el
@@ -0,0 +1,176 @@
+;;; external-completion.el --- Let external tools control completion style -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
+
+;; Version: 0.1
+;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
+;; Maintainer: JoĂ£o TĂ¡vora <joaotavora@gmail.com>
+;; Keywords:
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Written by Stefan Monnier circa 2016. Variants of this code have
+;; been working stably in SLY and other packages for a long time.
+
+;; The `external' completion style is used with a "programmable
+;; completion" table that gathers completions from an external tool
+;; such as a shell utility, an inferior process, an http server.
+
+;; The table and external tool are fully in control of the matching of
+;; the pattern string to the potential candidates of completion. When
+;; `external' is in use, the usual styles configured by the user or
+;; other in `completion-styles' are ignored.
+;;
+;; This compromise is for speed: all other styles need the full data
+;; set to be available in Emacs' addressing space, which is often slow
+;; if not completely unfeasible.
+;;
+;; To make use of the `external' style the function
+;; `external-completion-table' should be used. See its docstring.
+
+;;; Code:
+(require 'cl-lib)
+
+(add-to-list 'completion-styles-alist
+ '(external
+ external-completion--try-completion
+ external-completion--all-completions
+ "Ad-hoc completion style provided by the completion table."))
+
+(defun external-completion-table (category lookup
+ &optional metadata
+ try-completion-function)
+ "Make completion table using the `external' completion style.
+
+The `external' style is particularly useful when the caller
+interfaces with an external tool that provides completions. This
+may be a shell utility, an inferior process, an http server, etc.
+Given a pattern string, the external tool matches it to an
+arbitrarily large set of candidates. Since the full set doesn't
+need to be transferred to Emacs's address space, this often
+results in much faster overall experience, at the expense of the
+convenience of offered by other completion styles.
+
+CATEGORY is a symbol uniquely naming the external tool. This
+function links CATEGORY to the style `external', by modifying
+`completion-category-defaults', overriding any styles normally
+set in `completion-styles'.
+
+LOOKUP is a function taking a string PATTERN and a number
+POINT. The function should contact the tool and return a list of
+strings representing the completions for PATTERN given that POINT
+is the location of point within it. LOOKUP decides if PATTERN is
+interpreted as a substring, a regular expression, or any other
+type of matching method. The strings returned may be propertized
+with `completions-common-part' to illustrate the specific method
+used. LOOKUP may ignore POINT if it doesn't meaningfully alter
+the results.
+
+LOOKUP is a synchronous blocking function. Since it contacts an
+external tool, it's possible that it takes significant time to
+return results. To maintain Emacs's responsiveness, LOOKUP
+should detect pending user input using `while-no-input' or
+`sit-for' (which see). In those cases, LOOKUP should attempt to
+cancel the request (if possible) and immediately return any
+non-list.
+
+METADATA is an alist of additional properties such as
+`cycle-sort-function' to associate with CATEGORY. This means
+that the caller may still retain control the sorting of the
+candidates while the tool controls the matching.
+
+Optional TRY-COMPLETION-FUNCTION helps some frontends partially
+or fully expand PATTERN before finishing the completion
+operation. If supplied, it is a function taking a (PATTERN POINT
+ALL-COMPLETIONS), where PATTERN and POINT are as described above
+and ALL-COMPLETIONS are gathered by LOOKUP for these
+arguments (this function ensures LOOKUP isn't called more than
+needed). If you know the matching method that the external tool
+using, TRY-COMPLETION-FUNCTION may return a cons
+cell (EXPANDED-PATTERN . NEW-POINT). For example, if the tool is
+completing by prefix, one could call `try-completion' to find the
+largest common prefix in ALL-COMPLETIONS and then return that as
+EXPANDED-PATTERN."
+ (let ((probe (alist-get category completion-category-defaults)))
+ (if probe
+ (cl-assert (equal '(external) (alist-get 'styles probe))
+ nil "Category `%s' must only use `external' style" category)
+ (push `(,category (styles external))
+ completion-category-defaults)))
+ (let ((cache (make-hash-table :test #'equal)))
+ (cl-flet ((lookup-internal (string point)
+ (let* ((key (cons string point))
+ (probe (gethash key cache 'external--notfound)))
+ (if (eq probe 'external--notfound)
+ (puthash key (funcall lookup string point) cache)
+ probe))))
+ (lambda (string pred action)
+ (pcase action
+ (`metadata
+ `(metadata (category . ,category) . ,metadata))
+ ;; Note: the `--tryc' `--allc' suffixes are made akward on
+ ;; purpose, so it's easy to pick them apart from the jungle
+ ;; of combinations of "try" and "all" and "completion" that
+ ;; inhabit Emacs's completion logic.
+ (`(external-completion--tryc . ,point)
+ ;; FIXME: Obey `pred'? Pass it to `try-completion-function'?
+ `(external-completion--tryc
+ . ,(if try-completion-function
+ (funcall try-completion-function
+ string
+ point
+ (lookup-internal string point))
+ (cons string point))))
+ (`(external-completion--allc . ,point)
+ (let ((all (lookup-internal string point)))
+ `(external-completion--allc
+ . ,(if pred (cl-remove-if-not pred all) all))))
+ (`(boundaries . ,_) nil)
+ (_method
+ (let ((all (lookup-internal string (length string))))
+ ;; This branch might be taken:
+ ;;
+ ;; * when users work around
+ ;; `completion-category-defaults' (via
+ ;; `completion-category-overrides') and access this
+ ;; table with another completion style. We assume
+ ;; these users know what they are doing, but it might
+ ;; not work very well, as this whatever is in `all'
+ ;; very often doesn't equate the full set of candidates
+ ;; (many tools cap to sth like 100-1000 results).
+ ;;
+ ;; * when `_method' is nil or `lambda' which some
+ ;; frontends will invoke. Here, `all' should be
+ ;; sufficient information for `complete-with-action' to
+ ;; do the job correctly.
+ (complete-with-action action all string pred))))))))
+
+(defun external-completion--call (op string table pred point)
+ (when (functionp table)
+ (let ((res (funcall table string pred (cons op point))))
+ (when (eq op (car-safe res))
+ (cdr res)))))
+
+(defun external-completion--try-completion (string table pred point)
+ (external-completion--call 'external-completion--tryc string table pred point))
+
+(defun external-completion--all-completions (string table pred point)
+ (external-completion--call 'external-completion--allc string table pred point))
+
+(provide 'external-completion)
+;;; external-completion.el ends here
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 d785d4fd75d..c45c3d40a5d 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,18 +6193,17 @@ instance of such commands."
(rename-buffer (generate-new-buffer-name base-name))
(force-mode-line-update))))
-(defun files--ensure-directory (dir)
- "Make directory DIR if it is not already a directory. Return nil."
+(defun files--ensure-directory (mkdir dir)
+ "Use function MKDIR to make directory DIR if it is not already a directory.
+Return non-nil if DIR is already a directory."
(condition-case err
- (make-directory-internal dir)
+ (funcall mkdir dir)
(error
- (unless (file-directory-p dir)
- (signal (car err) (cdr err))))))
+ (or (file-directory-p dir)
+ (signal (car err) (cdr err))))))
(defun make-directory (dir &optional parents)
"Create the directory DIR and optionally any nonexistent parent dirs.
-If DIR already exists as a directory, signal an error, unless
-PARENTS is non-nil.
Interactively, the default choice of directory to create is the
current buffer's default directory. That is useful when you have
@@ -6214,8 +6213,9 @@ Noninteractively, the second (optional) argument PARENTS, if
non-nil, says whether to create parent directories that don't
exist. Interactively, this happens by default.
-If creating the directory or directories fail, an error will be
-raised."
+Return non-nil if PARENTS is non-nil and DIR already exists as a
+directory, and nil if DIR did not already exist but was created.
+Signal an error if unsuccessful."
(interactive
(list (read-file-name "Make directory: " default-directory default-directory
nil nil)
@@ -6223,25 +6223,32 @@ raised."
;; If default-directory is a remote directory,
;; make sure we find its make-directory handler.
(setq dir (expand-file-name 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)))
- create-list parent)
- (while (progn
- (setq parent (directory-file-name
- (file-name-directory dir)))
- (condition-case ()
- (files--ensure-directory dir)
- (file-missing
- ;; 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)
- (files--ensure-directory 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))))
(defun make-empty-file (filename &optional parents)
"Create an empty file FILENAME.
@@ -6435,7 +6442,7 @@ into NEWNAME instead."
;; copy-directory handler.
(let ((handler (or (find-file-name-handler directory 'copy-directory)
(find-file-name-handler newname 'copy-directory)))
- (follow parents))
+ follow)
(if handler
(funcall handler 'copy-directory directory
newname keep-time parents copy-contents)
@@ -6455,19 +6462,24 @@ into NEWNAME instead."
t)
(make-symbolic-link target newname t)))
;; Else proceed to copy as a regular directory
- (cond ((not (directory-name-p newname))
+ ;; first by creating the destination directory if needed,
+ ;; preparing to follow any symlink to a directory we did not create.
+ (setq follow
+ (if (not (directory-name-p newname))
;; If NEWNAME is not a directory name, create it;
;; that is where we will copy the files of DIRECTORY.
- (make-directory newname parents))
+ (make-directory newname parents)
;; NEWNAME is a directory name. If COPY-CONTENTS is non-nil,
;; create NEWNAME if it is not already a directory;
;; otherwise, create NEWNAME/[DIRECTORY-BASENAME].
- ((if copy-contents
- (or parents (not (file-directory-p newname)))
+ (unless copy-contents
(setq newname (concat newname
(file-name-nondirectory directory))))
- (make-directory (directory-file-name newname) parents))
- (t (setq follow t)))
+ (condition-case err
+ (make-directory (directory-file-name newname) parents)
+ (error
+ (or (file-directory-p newname)
+ (signal (car err) (cdr err)))))))
;; Copy recursively.
(dolist (file
@@ -8497,7 +8509,7 @@ Otherwise, trash FILENAME using the freedesktop.org conventions,
(unless (file-directory-p trash-dir)
(make-directory trash-dir t))
;; Ensure that the trashed file-name is unique.
- (if (file-exists-p new-fn)
+ (if (file-attributes new-fn)
(let ((version-control t)
(backup-directory-alist nil))
(setq new-fn (car (find-backup-file-name new-fn)))))
@@ -8574,7 +8586,7 @@ Otherwise, trash FILENAME using the freedesktop.org conventions,
;; We're checking further down whether the info file
;; exists, but the file name may exist in the trash
;; directory even if there is no info file for it.
- (when (file-exists-p
+ (when (file-attributes
(file-name-concat trash-files-dir files-base))
(setq overwrite t
files-base (file-name-nondirectory
@@ -8612,7 +8624,7 @@ Otherwise, trash FILENAME using the freedesktop.org conventions,
(let ((delete-by-moving-to-trash nil)
(new-fn (file-name-concat trash-files-dir files-base)))
(if (or (not is-directory)
- (not (file-exists-p new-fn)))
+ (not (file-attributes new-fn)))
(rename-file fn new-fn overwrite)
(copy-directory fn
(file-name-as-directory new-fn)
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 400f8a44eea..9c3fa9ae4bb 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 fd5fa0542f4..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.
@@ -10070,7 +10070,7 @@
* gnus-group.el (gnus-group-delete-group): Nix the entry in
gnus-cache-active-hashtb.
- * gnus-agent.el (gnus-agent-mark-unread-afer-downloaded): New variable.
+ * gnus-agent.el (gnus-agent-mark-unread-after-downloaded): New variable.
(gnus-agent-summary-fetch-group): Use it.
* gnus-msg.el (gnus-debug-files): New variable.
@@ -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 3b41e9edc94..d0b195e5f13 100644
--- a/lisp/gnus/ChangeLog.3
+++ b/lisp/gnus/ChangeLog.3
@@ -6032,7 +6032,7 @@
Make `default' the default, for compatibility with open-network-stream.
Handle the no-parameter case exactly as open-network-stream, with no
additional stream processing. Search plists using plist-get.
- Explicitly add :end-of-commend parameter if it is missing.
+ Explicitly add :end-of-comment parameter if it is missing.
(proto-stream-open-default): Rename from
proto-stream-open-network-only. Return 'default as the type.
(proto-stream-open-starttls): Rename from proto-stream-open-network.
@@ -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 1bffdf3513a..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
@@ -603,7 +603,7 @@ is searched."
(when file
(switch-to-buffer (find-file file))
(goto-char (org-find-entry-with-id (gnus-icalendar-event:uid event)))
- (org-show-entry))))
+ (org-fold-show-entry))))
(defun gnus-icalendar--update-org-event (event reply-status &optional org-file)
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..45771e7a204 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
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 ebd0adf2e25..60ee5d82e18 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..c7a75105c08 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
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/nnmaildir.el b/lisp/gnus/nnmaildir.el
index faa288934d1..3fb87f3a712 100644
--- a/lisp/gnus/nnmaildir.el
+++ b/lisp/gnus/nnmaildir.el
@@ -296,7 +296,7 @@ This variable is set by `nnmaildir-request-article'.")
(if (file-attributes file) (delete-file file))))
(defun nnmaildir--mkdir (dir)
(or (file-exists-p (file-name-as-directory dir))
- (make-directory-internal (directory-file-name dir))))
+ (make-directory (directory-file-name dir))))
(defun nnmaildir--mkfile (file)
(write-region "" nil file nil 'no-message))
(defun nnmaildir--delete-dir-files (dir ls)
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..a81051cee03 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
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 ef710d582d3..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
@@ -416,7 +416,6 @@ if that doesn't produce a completion match."
icomplete-scroll (not (null icomplete-vertical-mode))
completion-styles '(flex)
completion-flex-nospace nil
- completion-category-defaults nil
completion-ignore-case t
read-buffer-completion-ignore-case t
read-file-name-completion-ignore-case t)))
diff --git a/lisp/ido.el b/lisp/ido.el
index 77e4dd447d8..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>
@@ -2435,7 +2435,7 @@ If cursor is not at the end of the user input, move to end of input."
filename))
(ido-record-command method dirname)
(ido-record-work-directory dirname)
- (make-directory-internal dirname)
+ (make-directory dirname)
(funcall method dirname))
(t
;; put make-directory command on history
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..1820defa195 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
diff --git a/lisp/image.el b/lisp/image.el
index b6817d3fda3..29c39c5dd55 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
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..c561ea729af 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
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 ac9a213ec75..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
@@ -214,7 +214,7 @@ The functions come in the following groups.
is stored in the constant `ogonek-name-encoding-alist'.
The `ogonek' functions refer to five variables in which the suggested
- answers to dialogue questions are stored. The variables and their
+ answers to dialog questions are stored. The variables and their
default values are:
ogonek-from-encoding iso8859-2
@@ -266,7 +266,7 @@ The functions come in the following groups.
(switch-to-buffer " *ogonek-how*")
(goto-char (point-min)))
-;; ---- Variables keeping the suggested answers to dialogue questions -----
+;; ---- Variables keeping the suggested answers to dialog questions -----
(defvar ogonek-encoding-choices
(cons 'choice
(mapcar (lambda (x) (list 'const (car x)))
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 bc3697deb0a..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.
@@ -4435,7 +4446,7 @@ CASE-FOLD: The value of `isearch-case-fold' to use for lazy
highlighting.
LAX-WHITESPACE: The value of `isearch-lax-whitespace' and
`isearch-regexp-lax-whitespace' to use for lazy highlighting."
- (if (not highlight)
+ (if (or (not highlight) (minibufferp))
#'ignore
(let ((unwind (make-symbol "minibuffer-lazy-highlight--unwind"))
(after-change (make-symbol "minibuffer-lazy-highlight--after-change"))
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 90833e1c1d7..f583d116d20 100644
--- a/lisp/jsonrpc.el
+++ b/lisp/jsonrpc.el
@@ -1,10 +1,10 @@
;;; 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
-;; Version: 1.0.15
+;; Version: 1.0.16
;; Package-Requires: ((emacs "25.2"))
;; This is a GNU ELPA :core package. Avoid functionality that is not
@@ -548,11 +548,26 @@ With optional CLEANUP, kill any associated buffers."
(delete-process proc)
(funcall (jsonrpc--on-shutdown connection) connection)))))
-(defun jsonrpc--process-filter (proc string)
+(defvar jsonrpc--in-process-filter nil
+ "Non-nil if inside `jsonrpc--process-filter'.")
+
+(cl-defun jsonrpc--process-filter (proc string)
"Called when new data STRING has arrived for PROC."
+ (when jsonrpc--in-process-filter
+ ;; Problematic recursive process filters may happen if
+ ;; `jsonrpc--connection-receive', called by us, eventually calls
+ ;; client code which calls `process-send-string' (which see) to,
+ ;; say send a follow-up message. If that happens to writes enough
+ ;; bytes for pending output to be received, we will lose JSONRPC
+ ;; messages. In that case, remove recursiveness by re-scheduling
+ ;; ourselves to run from within a timer as soon as possible
+ ;; (bug#60088)
+ (run-at-time 0 nil #'jsonrpc--process-filter proc string)
+ (cl-return-from jsonrpc--process-filter))
(when (buffer-live-p (process-buffer proc))
(with-current-buffer (process-buffer proc)
(let* ((inhibit-read-only t)
+ (jsonrpc--in-process-filter t)
(connection (process-get proc 'jsonrpc-connection))
(expected-bytes (jsonrpc--expected-bytes connection)))
;; Insert the text, advancing the process marker.
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 eaeba966444..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.
@@ -147,7 +147,7 @@ in KEYMAP as NEWDEF those keys that are defined as OLDDEF in OLDMAP.
If you don't specify OLDMAP, you can usually get the same results
in a cleaner way with command remapping, like this:
(define-key KEYMAP [remap OLDDEF] NEWDEF)
-\n(fn OLDDEF NEWDEF KEYMAP &optional OLDMAP)"
+\n(fn KEYMAP OLDDEF NEWDEF &optional OLDMAP)"
;; Don't document PREFIX in the doc string because we don't want to
;; advertise it. It's meant for recursive calls only. Here's its
;; meaning
@@ -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 937215074bc..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)
@@ -585,7 +585,7 @@ and it selects the Spanish tutorial."))
(nonascii-translation . iso-8859-9)
(unibyte-display . iso-latin-5)
(input-method . "turkish-postfix")
- (sample-text . "Turkish (TĂ¼rkçe) Merhaba")
+ (sample-text . "Turkish (TĂ¼rkçe) Esenlikler / Merhaba")
(setup-function . turkish-case-conversion-enable)
(exit-function . turkish-case-conversion-disable)
(documentation . "Support for Turkish.
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 4994cfdc7ac..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
@@ -552,25 +552,41 @@ environment."))
char-script-table))
;; Brahmi composition rules
-(let ((consonant "[\U00011013-\U00011034]")
- (non-consonant "[^\U00011013-\U00011034\U00011046\U0001107F]")
- (vowel "[\U00011038-\U00011045]")
- (numeral "[\U00011052-\U00011065]")
- (multiplier "[\U00011064\U00011065]")
- (virama "\U00011046")
- (number-joiner "\U0001107F"))
+(let ((consonant "[\x11013-\x11037\x11075]")
+ (independent-vowel "[\x11005-\x11012\x11071\x11072]")
+ (vowel "[\x11038-\x11045\x11073\x11074]")
+ (nasal "[\x11000\x11001]")
+ (virama "\x11046")
+ (jivhamuliya "\x11003")
+ (upadhmaniya "\x11004")
+ (ka-kha "[\x11013\x11014]")
+ (pa-pha "[\x11027\x11028]")
+ (number-joiner "\x1107F")
+ (numeral "[\x11052-\x11065]")
+ (multiplier "[\x11064\x11065]"))
(set-char-table-range composition-function-table
- '(#x11046 . #x11046)
+ '(#x11046 . #x11046)
(list (vector
- ;; Consonant conjuncts
- (concat consonant "\\(?:" virama consonant "\\)+"
- vowel "?")
+ ;; Consonant based syllables
+ (concat consonant "\\(?:" virama consonant
+ "\\)*\\(?:" virama "\\|" vowel "*"
+ nasal "?\\)")
1 'font-shape-gstring)
(vector
- ;; Vowelless consonants
- (concat consonant virama non-consonant)
+ ;; Vowel based syllables
+ (concat independent-vowel virama "?" vowel "?" nasal "?")
1 'font-shape-gstring)))
(set-char-table-range composition-function-table
+ '(#x11003 . #x11004)
+ (list (vector
+ ;; Velar fricative
+ (concat jivhamuliya ka-kha "?")
+ 0 'font-shape-gstring)
+ (vector
+ ;; Bilabial fricative
+ (concat upadhmaniya pa-pha "?")
+ 0 'font-shape-gstring)))
+ (set-char-table-range composition-function-table
'(#x1107F . #x1107F)
(list (vector
;; Additive-multiplicative numerals
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 938859c6916..bad13e9bb9f 100644
--- a/lisp/ldefs-boot.el
+++ b/lisp/ldefs-boot.el
@@ -1944,6 +1944,85 @@ Major mode for editing BibTeX style files.
(register-definition-prefixes "bibtex-style" '("bibtex-style-"))
+;;; Generated autoloads from use-package/bind-key.el
+
+(push (purecopy '(bind-key 2 4 1)) package--builtin-versions)
+(autoload 'bind-key "bind-key" "\
+Bind KEY-NAME to COMMAND in KEYMAP (`global-map' if not passed).
+
+KEY-NAME may be a vector, in which case it is passed straight to
+`define-key'. Or it may be a string to be interpreted as
+spelled-out keystrokes, e.g., \"C-c C-z\". See the documentation
+of `edmacro-mode' for details.
+
+COMMAND must be an interactive function or lambda form.
+
+KEYMAP, if present, should be a keymap variable or symbol.
+For example:
+
+ (bind-key \"M-h\" #\\='some-interactive-function my-mode-map)
+
+ (bind-key \"M-h\" #\\='some-interactive-function \\='my-mode-map)
+
+If PREDICATE is non-nil, it is a form evaluated to determine when
+a key should be bound. It must return non-nil in such cases.
+Emacs can evaluate this form at any time that it does redisplay
+or operates on menu data structures, so you should write it so it
+can safely be called at any time.
+
+(fn KEY-NAME COMMAND &optional KEYMAP PREDICATE)" nil t)
+(autoload 'unbind-key "bind-key" "\
+Unbind the given KEY-NAME, within the KEYMAP (if specified).
+See `bind-key' for more details.
+
+(fn KEY-NAME &optional KEYMAP)" nil t)
+(autoload 'bind-key* "bind-key" "\
+Similar to `bind-key', but overrides any mode-specific bindings.
+
+(fn KEY-NAME COMMAND &optional PREDICATE)" nil t)
+(autoload 'bind-keys "bind-key" "\
+Bind multiple keys at once.
+
+Accepts keyword arguments:
+:map MAP - a keymap into which the keybindings should be
+ added
+:prefix KEY - prefix key for these bindings
+:prefix-map MAP - name of the prefix map that should be created
+ for these bindings
+:prefix-docstring STR - docstring for the prefix-map variable
+:menu-name NAME - optional menu string for prefix map
+:repeat-docstring STR - docstring for the repeat-map variable
+:repeat-map MAP - name of the repeat map that should be created
+ for these bindings. If specified, the
+ `repeat-map' property of each command bound
+ (within the scope of the `:repeat-map' keyword)
+ is set to this map.
+:exit BINDINGS - Within the scope of `:repeat-map' will bind the
+ key in the repeat map, but will not set the
+ `repeat-map' property of the bound command.
+:continue BINDINGS - Within the scope of `:repeat-map' forces the
+ same behavior as if no special keyword had
+ been used (that is, the command is bound, and
+ it's `repeat-map' property set)
+:filter FORM - optional form to determine when bindings apply
+
+The rest of the arguments are conses of keybinding string and a
+function symbol (unquoted).
+
+(fn &rest ARGS)" nil t)
+(autoload 'bind-keys* "bind-key" "\
+Bind multiple keys at once, in `override-global-map'.
+Accepts the same keyword arguments as `bind-keys' (which see).
+
+This binds keys in such a way that bindings are not overridden by
+other modes. See `override-global-mode'.
+
+(fn &rest ARGS)" nil t)
+(autoload 'describe-personal-keybindings "bind-key" "\
+Display all the personal keybindings defined by `bind-key'." t)
+(register-definition-prefixes "bind-key" '("bind-key" "compare-keybindings" "get-binding-description" "override-global-m" "personal-keybindings"))
+
+
;;; Generated autoloads from emacs-lisp/bindat.el
(register-definition-prefixes "bindat" '("bindat-"))
@@ -2841,9 +2920,11 @@ and corresponding effects.
;;; Generated autoloads from progmodes/c-ts-mode.el
-(autoload 'c-ts-mode--base-mode "c-ts-mode" "\
+(autoload 'c-ts-base-mode "c-ts-mode" "\
Major mode for editing C, powered by tree-sitter.
+\\{c-ts-mode-map}
+
(fn)" t)
(autoload 'c-ts-mode "c-ts-mode" "\
Major mode for editing C, powered by tree-sitter.
@@ -2853,7 +2934,7 @@ Major mode for editing C, powered by tree-sitter.
Major mode for editing C++, powered by tree-sitter.
(fn)" t)
-(register-definition-prefixes "c-ts-mode" '("c-ts-"))
+(register-definition-prefixes "c-ts-mode" '("c-ts-mode-"))
;;; Generated autoloads from calendar/cal-bahai.el
@@ -4548,6 +4629,16 @@ For use inside Lisp programs, see also `c-macro-expansion'.
(register-definition-prefixes "cmacexp" '("c-macro-"))
+;;; Generated autoloads from progmodes/cmake-ts-mode.el
+
+(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.
+
+(fn)" t)
+(register-definition-prefixes "cmake-ts-mode" '("cmake-ts-mode-"))
+
+
;;; Generated autoloads from cmuscheme.el
(autoload 'run-scheme "cmuscheme" "\
@@ -7897,6 +7988,16 @@ it is disabled.
(register-definition-prefixes "doc-view" '("doc-view-"))
+;;; Generated autoloads from progmodes/dockerfile-ts-mode.el
+
+(add-to-list 'auto-mode-alist '("\\(?:Dockerfile\\(?:\\..*\\)?\\|\\.[Dd]ockerfile\\)\\'" . dockerfile-ts-mode))
+(autoload 'dockerfile-ts-mode "dockerfile-ts-mode" "\
+Major mode for editing Dockerfiles, powered by tree-sitter.
+
+(fn)" t)
+(register-definition-prefixes "dockerfile-ts-mode" '("dockerfile-ts-mode--"))
+
+
;;; Generated autoloads from play/doctor.el
(autoload 'doctor "doctor" "\
@@ -8096,7 +8197,6 @@ Valid keywords and arguments are:
`nodigits' to suppress digits as prefix arguments.
(fn BS &optional NAME M ARGS)")
-(make-obsolete 'easy-mmode-define-keymap 'define-keymap "29.1")
(autoload 'easy-mmode-defmap "easy-mmode" "\
Define a constant M whose value is the result of `easy-mmode-define-keymap'.
The M, BS, and ARGS arguments are as per that function. DOC is
@@ -8107,7 +8207,6 @@ This macro is deprecated; use `defvar-keymap' instead.
(fn M BS DOC &rest ARGS)" nil t)
(function-put 'easy-mmode-defmap 'doc-string-elt 3)
(function-put 'easy-mmode-defmap 'lisp-indent-function 1)
-(make-obsolete 'easy-mmode-defmap 'defvar-keymap "29.1")
(autoload 'easy-mmode-defsyntax "easy-mmode" "\
Define variable ST as a syntax-table.
CSS contains a list of syntax specifications of the form (CHAR . SYNTAX).
@@ -8572,9 +8671,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
@@ -9035,7 +9134,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.
@@ -9293,10 +9392,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")
@@ -10017,9 +10117,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)
@@ -10034,6 +10132,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
@@ -10062,11 +10161,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" "\
@@ -11277,6 +11376,12 @@ This is used only in conjunction with `expand-add-abbrevs'." t)
(register-definition-prefixes "srecode/expandproto" '("srecode-"))
+;;; Generated autoloads from external-completion.el
+
+(push (purecopy '(external-completion 0 1)) package--builtin-versions)
+(register-definition-prefixes "external-completion" '("external-completion-"))
+
+
;;; Generated autoloads from cedet/srecode/extract.el
(register-definition-prefixes "srecode/extract" '("srecode-extract"))
@@ -14236,6 +14341,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" "\
@@ -18517,7 +18637,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-"))
@@ -23373,15 +23493,15 @@ 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
-for use with Emacs; use `package-vc-link-directory' for setting
-the package up after this function finishes.
-Optional argument REV means to clone a specific version of the
-package; it defaults to the last version available from the
-package's repository. If REV has the special value
+for use with Emacs; use `package-vc-install-from-checkout' for
+setting the package up after this function finishes. Optional
+argument REV means to clone a specific version of the package; it
+defaults to the last version available from the package's
+repository. If REV has the special value
`:last-release' (interactively, the prefix argument), that stands
for the last released version of the package.
@@ -24970,7 +25090,7 @@ Open profile FILENAME.
;;; Generated autoloads from progmodes/project.el
-(push (purecopy '(project 0 9 0)) package--builtin-versions)
+(push (purecopy '(project 0 9 3)) package--builtin-versions)
(autoload 'project-current "project" "\
Return the project instance in DIRECTORY, defaulting to `default-directory'.
@@ -27228,6 +27348,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" "\
@@ -29453,7 +29583,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
@@ -30096,7 +30227,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 enabled, 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" "\
@@ -32278,6 +32412,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" "\
@@ -32550,7 +32694,7 @@ Add archive file name handler to `file-name-handler-alist'." (when (and tramp-ar
;;; Generated autoloads from net/trampver.el
-(push (purecopy '(tramp 2 6 0 -1)) package--builtin-versions)
+(push (purecopy '(tramp 2 6 0 29 1)) package--builtin-versions)
(register-definition-prefixes "trampver" '("tramp-"))
@@ -32875,11 +33019,19 @@ FRAC should be the inverse of the fractional value; for example, a value of
;;; Generated autoloads from progmodes/typescript-ts-mode.el
(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-ts-mode))
-(add-to-list 'auto-mode-alist '("\\.tsx\\'" . typescript-ts-mode))
+(add-to-list 'auto-mode-alist '("\\.tsx\\'" . tsx-ts-mode))
+(autoload 'typescript-ts-base-mode "typescript-ts-mode" "\
+Major mode for editing TypeScript.
+
+(fn)" t)
(autoload 'typescript-ts-mode "typescript-ts-mode" "\
Major mode for editing TypeScript.
(fn)" t)
+(autoload 'tsx-ts-mode "typescript-ts-mode" "\
+Major mode for editing TypeScript.
+
+(fn)" t)
(register-definition-prefixes "typescript-ts-mode" '("typescript-ts-mode-"))
@@ -33606,6 +33758,195 @@ is \"www.fsf.co.uk\".
(register-definition-prefixes "url-vars" '("url-"))
+;;; Generated autoloads from use-package/use-package.el
+
+(push (purecopy '(use-package 2 4 4)) package--builtin-versions)
+
+
+;;; Generated autoloads from use-package/use-package-bind-key.el
+
+(autoload 'use-package-autoload-keymap "use-package-bind-key" "\
+Load PACKAGE and bind key sequence invoking this function to KEYMAP-SYMBOL.
+Then simulate pressing the same key sequence a again, so that the
+next key pressed is routed to the newly loaded keymap.
+
+This function supports use-package's :bind-keymap keyword. It
+works by binding the given key sequence to an invocation of this
+function for a particular keymap. The keymap is expected to be
+defined by the package. In this way, loading the package is
+deferred until the prefix key sequence is pressed.
+
+(fn KEYMAP-SYMBOL PACKAGE OVERRIDE)")
+(autoload 'use-package-normalize-binder "use-package-bind-key" "\
+
+
+(fn NAME KEYWORD ARGS)")
+(defalias 'use-package-normalize/:bind 'use-package-normalize-binder)
+(defalias 'use-package-normalize/:bind* 'use-package-normalize-binder)
+(defalias 'use-package-autoloads/:bind 'use-package-autoloads-mode)
+(defalias 'use-package-autoloads/:bind* 'use-package-autoloads-mode)
+(autoload 'use-package-handler/:bind "use-package-bind-key" "\
+
+
+(fn NAME KEYWORD ARGS REST STATE &optional BIND-MACRO)")
+(defalias 'use-package-normalize/:bind-keymap 'use-package-normalize-binder)
+(defalias 'use-package-normalize/:bind-keymap* 'use-package-normalize-binder)
+(autoload 'use-package-handler/:bind-keymap "use-package-bind-key" "\
+
+
+(fn NAME KEYWORD ARGS REST STATE &optional OVERRIDE)")
+(autoload 'use-package-handler/:bind-keymap* "use-package-bind-key" "\
+
+
+(fn NAME KEYWORD ARG REST STATE)")
+(register-definition-prefixes "use-package-bind-key" '("use-package-handler/:bind*"))
+
+
+;;; Generated autoloads from use-package/use-package-core.el
+
+(autoload 'use-package "use-package-core" "\
+Declare an Emacs package by specifying a group of configuration options.
+
+For the full documentation, see Info node `(use-package) top'.
+Usage:
+
+ (use-package package-name
+ [:keyword [option]]...)
+
+:init Code to run before PACKAGE-NAME has been loaded.
+:config Code to run after PACKAGE-NAME has been loaded. Note that
+ if loading is deferred for any reason, this code does not
+ execute until the lazy load has occurred.
+:preface Code to be run before everything except `:disabled'; this
+ can be used to define functions for use in `:if', or that
+ should be seen by the byte-compiler.
+
+:mode Form to be added to `auto-mode-alist'.
+:magic Form to be added to `magic-mode-alist'.
+:magic-fallback Form to be added to `magic-fallback-mode-alist'.
+:interpreter Form to be added to `interpreter-mode-alist'.
+
+:commands Define autoloads for commands that will be defined by the
+ package. This is useful if the package is being lazily
+ loaded, and you wish to conditionally call functions in your
+ `:init' block that are defined in the package.
+:autoload Similar to :commands, but it for no-interactive one.
+:hook Specify hook(s) to attach this package to.
+
+:bind Bind keys, and define autoloads for the bound commands.
+:bind* Bind keys, and define autoloads for the bound commands,
+ *overriding all minor mode bindings*.
+:bind-keymap Bind a key prefix to an auto-loaded keymap defined in the
+ package. This is like `:bind', but for keymaps.
+:bind-keymap* Like `:bind-keymap', but overrides all minor mode bindings
+
+:defer Defer loading of a package -- this is implied when using
+ `:commands', `:bind', `:bind*', `:mode', `:magic', `:hook',
+ `:magic-fallback', or `:interpreter'. This can be an integer,
+ to force loading after N seconds of idle time, if the package
+ has not already been loaded.
+:demand Prevent the automatic deferred loading introduced by constructs
+ such as `:bind' (see `:defer' for the complete list).
+
+:after Delay the effect of the use-package declaration
+ until after the named libraries have loaded.
+ Before they have been loaded, no other keyword
+ has any effect at all, and once they have been
+ loaded it is as if `:after' was not specified.
+
+:if EXPR Initialize and load only if EXPR evaluates to a non-nil value.
+:disabled The package is ignored completely if this keyword is present.
+:defines Declare certain variables to silence the byte-compiler.
+:functions Declare certain functions to silence the byte-compiler.
+:load-path Add to the `load-path' before attempting to load the package.
+:diminish Support for diminish.el (if installed).
+:delight Support for delight.el (if installed).
+:custom Call `Custom-set' or `set-default' with each variable
+ definition without modifying the Emacs `custom-file'.
+ (compare with `custom-set-variables').
+:custom-face Call `custom-set-faces' with each face definition.
+:ensure Loads the package using package.el if necessary.
+:pin Pin the package to an archive.
+
+(fn NAME &rest ARGS)" nil t)
+(function-put 'use-package 'lisp-indent-function 'defun)
+(register-definition-prefixes "use-package-core" '("use-package-"))
+
+
+;;; Generated autoloads from use-package/use-package-delight.el
+
+(autoload 'use-package-normalize/:delight "use-package-delight" "\
+Normalize arguments to delight.
+
+(fn NAME KEYWORD ARGS)")
+(autoload 'use-package-handler/:delight "use-package-delight" "\
+
+
+(fn NAME KEYWORD ARGS REST STATE)")
+(register-definition-prefixes "use-package-delight" '("use-package-normalize-delight"))
+
+
+;;; Generated autoloads from use-package/use-package-diminish.el
+
+(autoload 'use-package-normalize/:diminish "use-package-diminish" "\
+
+
+(fn NAME KEYWORD ARGS)")
+(autoload 'use-package-handler/:diminish "use-package-diminish" "\
+
+
+(fn NAME KEYWORD ARG REST STATE)")
+(register-definition-prefixes "use-package-diminish" '("use-package-normalize-diminish"))
+
+
+;;; Generated autoloads from use-package/use-package-ensure.el
+
+(autoload 'use-package-normalize/:ensure "use-package-ensure" "\
+
+
+(fn NAME KEYWORD ARGS)")
+(autoload 'use-package-handler/:ensure "use-package-ensure" "\
+
+
+(fn NAME KEYWORD ENSURE REST STATE)")
+(register-definition-prefixes "use-package-ensure" '("use-package-"))
+
+
+;;; Generated autoloads from use-package/use-package-ensure-system-package.el
+
+(push (purecopy '(use-package-ensure-system-package 0 2)) package--builtin-versions)
+(autoload 'use-package-normalize/:ensure-system-package "use-package-ensure-system-package" "\
+Turn ARGS into a list of conses of the form (PACKAGE-NAME . INSTALL-COMMAND).
+
+(fn NAME-SYMBOL KEYWORD ARGS)")
+(autoload 'use-package-handler/:ensure-system-package "use-package-ensure-system-package" "\
+Execute the handler for `:ensure-system-package' keyword in `use-package'.
+
+(fn NAME KEYWORD ARG REST STATE)")
+(register-definition-prefixes "use-package-ensure-system-package" '("use-package-ensure-system-package-"))
+
+
+;;; Generated autoloads from use-package/use-package-jump.el
+
+(autoload 'use-package-jump-to-package-form "use-package-jump" "\
+Attempt to find and jump to the `use-package' form that loaded PACKAGE.
+This will only find the form if that form actually required
+PACKAGE. If PACKAGE was previously required then this function
+will jump to the file that originally required PACKAGE instead.
+
+(fn PACKAGE)" t)
+(register-definition-prefixes "use-package-jump" '("use-package-find-require"))
+
+
+;;; Generated autoloads from use-package/use-package-lint.el
+
+(autoload 'use-package-lint "use-package-lint" "\
+Check for errors in `use-package' declarations.
+For example, if the module's `:if' condition is met, but even
+with the specified `:load-path' the module cannot be found." t)
+(register-definition-prefixes "use-package-lint" '("use-package-lint-declaration"))
+
+
;;; Generated autoloads from userlock.el
(put 'create-lockfiles 'safe-local-variable 'booleanp)
@@ -36602,6 +36943,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 9f85bc18230..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)
@@ -1712,6 +1712,138 @@ as follows.
("/T" ?Ó¨)
("/Y" ?̉®))
+
+;; Chuvash layout based on russian-computer.
+(quail-define-package
+ "cyrillic-chuvash" "Chuvash" "CV" t
+ "Input method for cyrillic Chuvash with a postfix modifier.
+
+ Đ* -> Ó
+ Đ°* -> Ó‘
+ Đ•* -> Ó–
+ Đ•* -> Ó—
+ Đ¡* -> ̉ª
+ Ñ* -> ̉«
+ Đ£* -> Ó²
+ у* -> ӳ
+
+Doubling the postfix separates the letter and postfix
+"
+ nil t nil nil nil nil nil nil nil nil t)
+
+(quail-define-rules
+ ("1" ?1)
+ ("2" ?2)
+ ("3" ?3)
+ ("4" ?4)
+ ("5" ?5)
+ ("6" ?6)
+ ("7" ?7)
+ ("8" ?8)
+ ("9" ?9)
+ ("0" ?0)
+ ("-" ?-)
+ ("=" ?=)
+ ("|" ?/)
+ ("`" ?Ñ‘)
+ ("q" ?Đ¹)
+ ("w" ?ц)
+ ("e" ?у)
+ ("r" ?Đº)
+ ("t" ?е)
+ ("y" ?Đ½)
+ ("u" ?Đ³)
+ ("i" ?ш)
+ ("o" ?щ)
+ ("p" ?Đ·)
+ ("[" ?Ñ…)
+ ("]" ?Ñ)
+ ("a" ?Ñ„)
+ ("s" ?Ñ‹)
+ ("d" ?Đ²)
+ ("f" ?Đ°)
+ ("g" ?Đ¿)
+ ("h" ?Ñ€)
+ ("j" ?Đ¾)
+ ("k" ?Đ»)
+ ("l" ?Đ´)
+ (";" ?ж)
+ ("'" ?Ñ)
+ ("\\" ?\\)
+ ("z" ?Ñ)
+ ("x" ?ч)
+ ("c" ?Ñ)
+ ("v" ?Đ¼)
+ ("b" ?и)
+ ("n" ?Ñ‚)
+ ("m" ?ь)
+ ("," ?б)
+ ("." ?Ñ)
+ ("/" ?.)
+ ("!" ?!)
+ ("@" ?\")
+ ("#" ?â„–)
+ ("$" ?\;)
+ ("%" ?%)
+ ("^" ?:)
+ ("&" ??)
+ ("*" ?*)
+ ("(" ?\()
+ (")" ?\))
+ ("_" ?_)
+ ("+" ?+)
+ ("~" ?Đ)
+ ("Q" ?Đ™)
+ ("W" ?Ц)
+ ("E" ?Đ£)
+ ("R" ?Đ)
+ ("T" ?Đ•)
+ ("Y" ?Đ)
+ ("U" ?Đ“)
+ ("I" ?Ш)
+ ("O" ?Đ©)
+ ("P" ?Đ—)
+ ("{" ?Đ¥)
+ ("}" ?Đª)
+ ("A" ?Ф)
+ ("S" ?Đ«)
+ ("D" ?Đ’)
+ ("F" ?Đ)
+ ("G" ?ĐŸ)
+ ("H" ?Đ )
+ ("J" ?Đ)
+ ("K" ?Đ›)
+ ("L" ?Đ”)
+ (":" ?Đ–)
+ ("\"" ?Đ­)
+ ("|" ?|)
+ ("Z" ?Đ¯)
+ ("X" ?Ч)
+ ("C" ?Đ¡)
+ ("V" ?Đœ)
+ ("B" ?Đ˜)
+ ("N" ?Đ¢)
+ ("M" ?Ь)
+ ("<" ?Đ‘)
+ (">" ?Đ®)
+ ("?" ?,)
+ ("F*" ?Ó)
+ ("f*" ?Ó‘)
+ ("T*" ?Ó–)
+ ("t*" ?Ó—)
+ ("C*" ?̉ª)
+ ("c*" ?̉«)
+ ("E*" ?Ó²)
+ ("e*" ?Ó³)
+ ("F**" ["Đ*"])
+ ("f**" ["Đ°*"])
+ ("T**" ["Đ•*"])
+ ("t**" ["е*"])
+ ("C**" ["Đ¡*"])
+ ("c**" ["Ñ*"])
+ ("E**" ["Đ£*"])
+ ("e**" ["у*"]))
+
;; Local Variables:
;; coding: utf-8
;; End:
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..d0c0efec53b 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
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 b30c32aaffd..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
@@ -80,9 +80,14 @@ commands consecutively. Filled by
(defvar rmail-summary-message-parents-vector nil
"Vector that holds a list of indices of parents for each message.
-Message A is parent to message B if the id of A appear in the
-References or In-reply-to fields of B, or if A is the first
-message with the same subject as B. First element is ignored.")
+Message A is parent of message B if the id of A appears in the
+\"References\" or \"In-reply-to\" fields of B, or if A is the first
+message with the same \"Subject\" as B. First element is ignored.")
+
+(defvar rmail-summary-message-descendants-vector nil
+ "Vector that holds the direct descendants of each message.
+This is the antipode of `rmail-summary-message-parents-vector'.
+First element is ignored.")
(defvar rmail-summary-font-lock-keywords
'(("^ *[0-9]+D.*" . font-lock-string-face) ; Deleted.
@@ -318,11 +323,13 @@ message with the same subject as B. First element is ignored.")
(defun rmail-summary-fill-message-ids-hash-table ()
"Fill `rmail-summary-message-ids-hash-table'."
(with-current-buffer rmail-buffer
- (setq rmail-summary-message-ids-hash-table (make-hash-table :test 'equal :size 1024))
+ (setq rmail-summary-message-ids-hash-table
+ (make-hash-table :test 'equal :size 1024))
(let ((msgnum 1))
(while (<= msgnum rmail-total-messages)
(let ((id (rmail-get-header "Message-ID" msgnum)))
- (puthash id (cons (cons id msgnum) (gethash id rmail-summary-message-ids-hash-table))
+ (puthash id (cons (cons id msgnum)
+ (gethash id rmail-summary-message-ids-hash-table))
rmail-summary-message-ids-hash-table))
(setq msgnum (1+ msgnum))))))
@@ -331,14 +338,18 @@ message with the same subject as B. First element is ignored.")
(if header
(split-string header "[ \f\t\n\r\v,;]+"))))
-(defun rmail-summary-fill-message-parents-vector ()
- "Fill `rmail-summary-message-parents-vector'."
+(defun rmail-summary-fill-message-parents-and-descs-vectors ()
+ "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
(rmail-summary-fill-message-ids-hash-table)
(setq rmail-summary-subjects-hash-table
(make-hash-table :test 'equal :size 1024))
(setq rmail-summary-message-parents-vector
(make-vector (1+ rmail-total-messages) nil))
+ (setq rmail-summary-message-descendants-vector
+ (make-vector (1+ rmail-total-messages) nil))
(let ((msgnum 1))
(while (<= msgnum rmail-total-messages)
(let* ((parents nil)
@@ -346,18 +357,27 @@ message with the same subject as B. First element is ignored.")
(subj-cell (gethash subject rmail-summary-subjects-hash-table))
(subj-par (assoc subject subj-cell))
(refs (rmail-summary--split-header-field "References" msgnum))
- (reply-to (rmail-summary--split-header-field "In-reply-to"
+ (reply-tos (rmail-summary--split-header-field "In-reply-to"
msgnum)))
(if subj-par
- (setq parents (cons (cdr subj-par) parents))
+ (progn
+ (setq parents (cons (cdr subj-par) nil))
+ (aset rmail-summary-message-descendants-vector (cdr subj-par)
+ (cons msgnum
+ (aref rmail-summary-message-descendants-vector
+ (cdr subj-par)))))
(puthash subject (cons (cons subject msgnum) subj-cell)
rmail-summary-subjects-hash-table))
- (dolist (id (append refs reply-to))
+ (dolist (id (append refs reply-tos))
(let ((ent
(assoc id
(gethash id rmail-summary-message-ids-hash-table))))
- (if ent
- (setq parents (cons (cdr ent) parents)))))
+ (when ent
+ (setq parents (cons (cdr ent) parents))
+ (aset rmail-summary-message-descendants-vector (cdr ent)
+ (cons msgnum
+ (aref rmail-summary-message-descendants-vector
+ (cdr ent)))))))
(aset rmail-summary-message-parents-vector msgnum parents)
(setq msgnum (1+ msgnum)))))))
@@ -387,20 +407,6 @@ the messages that are displayed."
(interactive)
(rmail-new-summary "All" '(rmail-summary) nil))
-(defun rmail-summary-direct-descendants (msgnum encountered-msgs)
- "Find all direct descendants of MSGNUM, ignoring ENCOUNTERED-MSGS.
-Assumes `rmail-summary-message-parents-vector' is filled. Ignores messages
-already ticked in ENCOUNTERED-MSGS."
- (let (desc
- (msg 1))
- (while (<= msg rmail-total-messages)
- (when (and
- (not (aref encountered-msgs msg))
- (memq msgnum (aref rmail-summary-message-parents-vector msg)))
- (setq desc (cons msg desc)))
- (setq msg (1+ msg)))
- desc))
-
(defun rmail-summary--walk-thread-message-recursively (msgnum encountered-msgs)
"Add parents and descendants of message MSGNUM to ENCOUNTERED-MSGS, recursively."
(unless (aref encountered-msgs msgnum)
@@ -412,7 +418,7 @@ already ticked in ENCOUNTERED-MSGS."
(mapc walk-thread-msg
(aref rmail-summary-message-parents-vector msgnum))
(mapc walk-thread-msg
- (rmail-summary-direct-descendants msgnum encountered-msgs)))))
+ (aref rmail-summary-message-descendants-vector msgnum)))))
;;;###autoload
(defun rmail-summary-by-thread (&optional msgnum)
@@ -430,7 +436,7 @@ headers of the messages."
(unless (and rmail-summary-message-parents-vector
(= (length rmail-summary-message-parents-vector)
(1+ rmail-total-messages)))
- (rmail-summary-fill-message-parents-vector))
+ (rmail-summary-fill-message-parents-and-descs-vectors))
(let ((enc-msgs (make-bool-vector (1+ rmail-total-messages) nil)))
(rmail-summary--walk-thread-message-recursively msgnum enc-msgs)
(rmail-new-summary (format "thread containing message %d" msgnum)
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 bcdf91299be..502036f78b7 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 5faa3c8d4e8..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
@@ -1326,9 +1326,9 @@ pair of a group title string and a list of group candidate strings."
:version "28.1")
(defface completions-group-separator
- '((t :inherit shadow :underline t))
+ '((t :inherit shadow :strike-through t))
"Face used for the separator lines between the candidate groups."
- :version "29.1")
+ :version "28.1")
(defun completion--cycle-threshold (metadata)
(let* ((cat (completion-metadata-get metadata 'category))
@@ -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 f515cc8aacf..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
@@ -275,6 +275,7 @@ To test this function, evaluate:
have-scrolled
window-last-row
col window-last-col
+ switch-frame-p
(scroll-col-delta 0)
;; be conservative about allowing horizontal scrolling
(col-scrolling-p (mouse-drag-should-do-col-scrolling)))
@@ -286,15 +287,21 @@ To test this function, evaluate:
(setq track-mouse 'drag-dragging)
(while (progn
(setq event (read--potential-mouse-event)
- end (event-end event)
- row (cdr (posn-col-row end))
- col (car (posn-col-row end)))
- (or (mouse-movement-p event)
- (eq (car-safe event) 'switch-frame)))
+ switch-frame-p (eq (car-safe event) 'switch-frame))
+ ;; We want to skip switch-frame events and treat then
+ ;; as moves over a different window. These events have
+ ;; no position spec, so all the posn-* accessor
+ ;; functions are likely to barf if passed such an
+ ;; event.
+ (or switch-frame-p
+ (setq end (event-end event)
+ row (cdr (posn-col-row end))
+ col (car (posn-col-row end))))
+ (or (mouse-movement-p event) switch-frame-p))
;; Scroll if see if we're on the edge.
;; FIXME: should handle mouse-in-other window.
(cond
- ((not (eq start-window (posn-window end)))
+ ((or switch-frame-p (not (eq start-window (posn-window end))))
t) ; wait for return to original window
((<= row 0) (mouse-drag-repeatedly-safe-scroll -1 0))
((>= row window-last-row) (mouse-drag-repeatedly-safe-scroll 1 0))
diff --git a/lisp/mouse.el b/lisp/mouse.el
index f72ab4fc642..d93594deb04 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 6e17e417ea3..4bf87c14f31 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
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..859a9b44bcb 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
diff --git a/lisp/net/gnutls.el b/lisp/net/gnutls.el
index 6e3845aec1a..f7361f38130 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)
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..1afcd1db3c4 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
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 29957a62d04..77a9d70ac9e 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..73974f864b3 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>
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..4578f1fe073 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
diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el
index 9c1e78d6b0b..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
@@ -215,11 +215,18 @@ It must be supported by libarchive(3).")
;; In older Emacs (prior 27.1), `tramp-archive-autoload-file-name-regexp'
;; is not autoloaded. So we cannot expect it to be known in
;; tramp-loaddefs.el. But it exists, when tramp-archive.el is loaded.
+;; We must wrap it into `eval-when-compile'. Otherwise, there could
+;; be an "Eager macro-expansion failure" when unloading/reloading Tramp.
;;;###tramp-autoload
(defconst tramp-archive-file-name-regexp
- (ignore-errors (tramp-archive-autoload-file-name-regexp))
+ (eval-when-compile (ignore-errors (tramp-archive-autoload-file-name-regexp)))
"Regular expression matching archive file names.")
+;; The value above is nil for Emacs 26. Set it now.
+(if (<= emacs-major-version 26)
+ (setq tramp-archive-file-name-regexp
+ (ignore-errors (tramp-archive-autoload-file-name-regexp))))
+
;;;###tramp-autoload
(defconst tramp-archive-method "archive"
"Method name for archives in GVFS.")
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 fa40f968180..c7696a51dae 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
@@ -318,7 +318,7 @@ connection if a previous connection has died for some reason."
(process-put p 'vector vec)
(set-process-query-on-exit-flag p nil)))
- ;; The following operations must be performed w/o
+ ;; The following operations must be performed without
;; `tramp-crypt-file-name-handler'.
(let* (tramp-crypt-enabled
;; Don't check for a proper method.
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..e1ad0c2e5d2 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
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index 73f773e8f4d..0273c28beca 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
@@ -690,7 +690,7 @@ It has been changed in GVFS 1.14.")
("gvfs-set-attribute" . "set"))
"List of cons cells, mapping \"gvfs-<command>\" to \"gio <command>\".")
-;; <http://www.pygtk.org/docs/pygobject/gio-constants.html>
+;; <https://www.pygtk.org/docs/pygobject/gio-constants.html>
(eval-and-compile
(defconst tramp-gvfs-file-attributes
'("name"
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 df5800f4e9d..ec8437176db 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 {
@@ -2829,7 +2827,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)))
@@ -3431,6 +3429,7 @@ implementation will be used."
(signal (car err) (cdr err)))))
;; Impossible to copy. Trigger `file-missing' error.
+ (delete-file tmpfile)
(setq tmpfile nil))))
(defun tramp-sh-handle-write-region
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index c720b33b5f2..cad6cb335cc 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
@@ -279,7 +279,7 @@ See `tramp-actions-before-shell' for more info.")
(lock-file . tramp-handle-lock-file)
(make-auto-save-file-name . tramp-handle-make-auto-save-file-name)
(make-directory . tramp-smb-handle-make-directory)
- (make-directory-internal . tramp-smb-handle-make-directory-internal)
+ (make-directory-internal . ignore)
(make-lock-file-name . tramp-handle-make-lock-file-name)
(make-nearby-temp-file . tramp-handle-make-nearby-temp-file)
(make-process . ignore)
@@ -1186,12 +1186,21 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored."
(make-directory ldir parents))
;; Just do it.
(when (file-directory-p ldir)
- (make-directory-internal dir))
+ (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)))))
+;; This is not used anymore.
(defun tramp-smb-handle-make-directory-internal (directory)
"Like `make-directory-internal' for Tramp files."
+ (declare (obsolete nil "29.1"))
(setq directory (directory-file-name (expand-file-name directory)))
(unless (file-name-absolute-p directory)
(setq directory (expand-file-name directory default-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..88dacdc7893 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
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 9b7117cb875..61a606c3383 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>
@@ -2605,12 +2605,14 @@ Must be handled by the callers."
file-selinux-context file-symlink-p file-truename
file-writable-p find-backup-file-name get-file-buffer
insert-directory insert-file-contents load
- make-directory make-directory-internal set-file-acl
- set-file-modes set-file-selinux-context set-file-times
+ make-directory set-file-acl set-file-modes
+ set-file-selinux-context set-file-times
substitute-in-file-name unhandled-file-name-directory
vc-registered
;; Emacs 27+ only.
file-system-info
+ ;; Emacs 28- only.
+ make-directory-internal
;; Emacs 28+ only.
file-locked-p lock-file make-lock-file-name unlock-file
;; Emacs 29+ only.
diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el
index caf6750c26d..fa4604103c5 100644
--- a/lisp/net/trampver.el
+++ b/lisp/net/trampver.el
@@ -1,13 +1,13 @@
;;; 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>
;; Keywords: comm, processes
;; Package: tramp
-;; Version: 2.6.0-pre
+;; Version: 2.6.0.29.1
;; Package-Requires: ((emacs "26.1"))
;; Package-Type: multi
;; URL: https://www.gnu.org/software/tramp/
@@ -40,7 +40,7 @@
;; ./configure" to change them.
;;;###tramp-autoload
-(defconst tramp-version "2.6.0-pre"
+(defconst tramp-version "2.6.0.29.1"
"This version of Tramp.")
;;;###tramp-autoload
@@ -78,7 +78,7 @@
;; Check for Emacs version.
(let ((x (if (not (string-version-lessp emacs-version "26.1"))
"ok"
- (format "Tramp 2.6.0-pre is not fit for %s"
+ (format "Tramp 2.6.0.29.1 is not fit for %s"
(replace-regexp-in-string "\n" "" (emacs-version))))))
(unless (string-equal "ok" x) (error "%s" x)))
@@ -104,7 +104,8 @@
("2.3.3" . "26.1") ("2.3.3.26.1" . "26.1") ("2.3.5.26.2" . "26.2")
("2.3.5.26.3" . "26.3")
("2.4.3.27.1" . "27.1") ("2.4.5.27.2" . "27.2")
- ("2.5.2.28.1" . "28.1") ("2.5.3.28.2" . "28.2")))
+ ("2.5.2.28.1" . "28.1") ("2.5.3.28.2" . "28.2")
+ ("2.6.0.29.1" . "29.1")))
(add-hook 'tramp-unload-hook
(lambda ()
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 f79d8bf6743..eb126df6334 100644
--- a/lisp/org/ChangeLog.1
+++ b/lisp/org/ChangeLog.1
@@ -1867,7 +1867,7 @@
* org.el: Use
`org-define-obsolete-{function,variable}-alias´instead of
- `define-obsolate{function,variable}-alias´.
+ `define-obsolete-{function,variable}-alias´.
* org-compat.el (user-error): Defalias to `error´ for Emacsen that
don't have it.
@@ -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 f68b5b44e4d..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
@@ -241,11 +241,11 @@ This function is called by `org-babel-execute-src-block'."
(defun org-babel-R-assign-elisp (name value colnames-p rownames-p)
"Construct R code assigning the elisp VALUE to a variable named NAME."
(if (listp value)
- (let* ((lengths (mapcar 'length (cl-remove-if-not 'sequencep value)))
+ (let* ((lengths (mapcar 'length (cl-remove-if-not 'listp value)))
(max (if lengths (apply 'max lengths) 0))
(min (if lengths (apply 'min lengths) 0)))
;; Ensure VALUE has an orgtbl structure (depth of at least 2).
- (unless (listp (car value)) (setq value (list value)))
+ (unless (listp (car value)) (setq value (mapcar 'list value)))
(let ((file (orgtbl-to-tsv value '(:fmt org-babel-R-quote-tsv-field)))
(header (if (or (eq (nth 1 value) 'hline) colnames-p)
"TRUE" "FALSE"))
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 b424cf48ff9..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>
@@ -248,8 +248,8 @@ or set the `:backend' header argument"))))
"value")))
result0)))
(ob-clojure-string-or-list
- ;; Filter out s-expressions that return `nil' (string "nil"
- ;; from nrepl eval) or comment forms (actual `nil' from nrepl)
+ ;; Filter out s-expressions that return nil (string "nil"
+ ;; from nrepl eval) or comment forms (actual nil from nrepl)
(reverse (delete "" (mapcar (lambda (r)
(replace-regexp-in-string "nil" "" (or r "")))
result0)))))))
diff --git a/lisp/org/ob-comint.el b/lisp/org/ob-comint.el
index e8d83670767..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
@@ -117,6 +117,14 @@ or user `keyboard-quit' during execution of body."
(goto-char (process-mark (get-buffer-process (current-buffer))))
(insert dangling-text)
+ ;; Replace partially supplied input lines.
+ ;; This is needed when output filter spits partial lines that
+ ;; do not include a full prompt at a time.
+ (setq string-buffer
+ (replace-regexp-in-string
+ comint-prompt-regexp
+ ,org-babel-comint-prompt-separator
+ string-buffer))
;; remove echo'd FULL-BODY from input
(when (and ,remove-echo ,full-body
(string-match
diff --git a/lisp/org/ob-core.el b/lisp/org/ob-core.el
index 5b78ee946ff..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")))
@@ -2709,7 +2718,9 @@ specified as an an \"attachment:\" style link."
((and 'attachment (guard in-attach-dir)) "attachment")
(_ "file"))
(if (and request-attachment in-attach-dir)
- (file-relative-name result-file-name)
+ (file-relative-name
+ result-file-name
+ (file-name-as-directory attach-dir))
(if (and default-directory
base-file-name same-directory?)
(if (eq org-link-file-path-type 'adaptive)
@@ -3181,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 b0a7767ec3e..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
@@ -91,7 +91,7 @@ end")
(list
"set (0, \"defaultfigurevisible\", \"off\");"
full-body
- (format "print -dpng %s" gfx-file))
+ (format "print -dpng %S\nans=%S" gfx-file gfx-file))
"\n")
full-body)
result-type matlabp)))
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 33fba8c4016..d5e5490ede2 100644
--- a/lisp/org/oc-bibtex.el
+++ b/lisp/org/oc-bibtex.el
@@ -1,23 +1,23 @@
;;; 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>
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; 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.
-;; This program is distributed in the hope that it will be useful,
+;; 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 this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
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 cd52e9cf4df..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
@@ -1488,9 +1488,9 @@ If the link is in hidden text, expose it."
(defun org-link-descriptive-ensure ()
"Toggle the literal or descriptive display of links in current buffer if needed."
- (if org-link-descriptive
- (org-fold-core-set-folding-spec-property (car org-link--link-folding-spec) :visible nil)
- (org-fold-core-set-folding-spec-property (car org-link--link-folding-spec) :visible t)))
+ (org-fold-core-set-folding-spec-property
+ (car org-link--link-folding-spec)
+ :visible (not org-link-descriptive)))
;;;###autoload
(defun org-toggle-link-display ()
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 f28805d5e6b..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
@@ -3049,53 +3049,58 @@ PROPERTIES: The list properties specified in the `:properties' parameter
"If this is a CLOCK line, update it and return t.
Otherwise, return nil."
(interactive)
- (save-excursion
- (beginning-of-line 1)
- (skip-chars-forward " \t")
- (when (looking-at org-clock-string)
- (let ((re (concat "[ \t]*" org-clock-string
- " *[[<]\\([^]>]+\\)[]>]\\(-+[[<]\\([^]>]+\\)[]>]"
- "\\([ \t]*=>.*\\)?\\)?"))
- ts te h m s neg)
- (cond
- ((not (looking-at re))
- nil)
- ((not (match-end 2))
- (when (and (equal (marker-buffer org-clock-marker) (current-buffer))
- (> org-clock-marker (point))
- (<= org-clock-marker (line-end-position)))
- ;; The clock is running here
- (setq org-clock-start-time
- (org-time-string-to-time (match-string 1)))
- (org-clock-update-mode-line)))
- (t
- ;; Prevent recursive call from `org-timestamp-change'.
- (cl-letf (((symbol-function 'org-clock-update-time-maybe) #'ignore))
- ;; Update timestamps.
- (save-excursion
- (goto-char (match-beginning 1)) ; opening timestamp
- (save-match-data (org-timestamp-change 0 'day)))
+ (let ((origin (point))) ;; `save-excursion' may not work when deleting.
+ (save-excursion
+ (beginning-of-line 1)
+ (skip-chars-forward " \t")
+ (when (looking-at org-clock-string)
+ (let ((re (concat "[ \t]*" org-clock-string
+ " *[[<]\\([^]>]+\\)[]>]\\(-+[[<]\\([^]>]+\\)[]>]"
+ "\\([ \t]*=>.*\\)?\\)?"))
+ ts te h m s neg)
+ (cond
+ ((not (looking-at re))
+ nil)
+ ((not (match-end 2))
+ (when (and (equal (marker-buffer org-clock-marker) (current-buffer))
+ (> org-clock-marker (point))
+ (<= org-clock-marker (line-end-position)))
+ ;; The clock is running here
+ (setq org-clock-start-time
+ (org-time-string-to-time (match-string 1)))
+ (org-clock-update-mode-line)))
+ (t
+ ;; Prevent recursive call from `org-timestamp-change'.
+ (cl-letf (((symbol-function 'org-clock-update-time-maybe) #'ignore))
+ ;; Update timestamps.
+ (save-excursion
+ (goto-char (match-beginning 1)) ; opening timestamp
+ (save-match-data (org-timestamp-change 0 'day)))
+ ;; Refresh match data.
+ (looking-at re)
+ (save-excursion
+ (goto-char (match-beginning 3)) ; closing timestamp
+ (save-match-data (org-timestamp-change 0 'day))))
;; Refresh match data.
(looking-at re)
- (save-excursion
- (goto-char (match-beginning 3)) ; closing timestamp
- (save-match-data (org-timestamp-change 0 'day))))
- ;; Refresh match data.
- (looking-at re)
- (and (match-end 4) (delete-region (match-beginning 4) (match-end 4)))
- (end-of-line 1)
- (setq ts (match-string 1)
- te (match-string 3))
- (setq s (- (org-time-string-to-seconds te)
- (org-time-string-to-seconds ts))
- neg (< s 0)
- s (abs s)
- h (floor (/ s 3600))
- s (- s (* 3600 h))
- m (floor (/ s 60))
- s (- s (* 60 s)))
- (insert " => " (format (if neg "-%d:%02d" "%2d:%02d") h m))
- t))))))
+ (and (match-end 4) (delete-region (match-beginning 4) (match-end 4)))
+ (end-of-line 1)
+ (setq ts (match-string 1)
+ te (match-string 3))
+ (setq s (- (org-time-string-to-seconds te)
+ (org-time-string-to-seconds ts))
+ neg (< s 0)
+ s (abs s)
+ h (floor (/ s 3600))
+ s (- s (* 3600 h))
+ m (floor (/ s 60))
+ s (- s (* 60 s)))
+ (insert " => " (format (if neg "-%d:%02d" "%2d:%02d") h m))
+ t)))))
+ ;; Move back to initial position, but never beyond updated
+ ;; clock.
+ (unless (< (point) origin)
+ (goto-char origin))))
(defun org-clock-save ()
"Persist various clock-related data to disk.
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 48ede9c5289..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',
@@ -5295,6 +5307,7 @@ indentation removed from its contents."
;; `org-element--cache-diagnostics-ring-size', `org-element--cache-map-statistics',
;; `org-element--cache-map-statistics-threshold'.
+;;;###autoload
(defvar org-element-use-cache t
"Non-nil when Org parser should cache its results.")
@@ -5717,7 +5730,11 @@ This function assumes `org-element--headline-cache' is a valid AVL tree."
;; `combine-change-calls' because the buffer is potentially
;; changed without notice (the change will be registered
;; after exiting the `combine-change-calls' body though).
- (memq #'org-element--cache-after-change after-change-functions))))))
+ (catch :inhibited
+ (org-fold-core-cycle-over-indirect-buffers
+ (unless (memq #'org-element--cache-after-change after-change-functions)
+ (throw :inhibited nil)))
+ t))))))
;; FIXME: Remove after we establish that hashing is effective.
(defun org-element-cache-hash-show-statistics ()
@@ -7255,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 be600f8a0cc..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
@@ -497,7 +497,7 @@ hanging around."
(declare (debug (form body)) (indent 0))
`(let (buffers dead-properties)
(if (and (not (buffer-base-buffer))
- (not (eq (current-buffer) (car org-fold-core--indirect-buffers))))
+ (not (memq (current-buffer) org-fold-core--indirect-buffers)))
;; We are in base buffer with `org-fold-core--indirect-buffers' value from
;; different buffer. This can happen, for example, when
;; org-capture copies local variables into *Capture* buffer.
@@ -930,6 +930,8 @@ are provided.
If FROM is non-nil and TO is nil, search the folded regions at FROM.
+When both FROM and TO are nil, search folded regions in the whole buffer.
+
When SPECS is non-nil it should be a list of folding specs or a symbol.
Only return the matching fold types.
@@ -946,6 +948,9 @@ WITH-MARKERS must be nil when RELATIVE is non-nil."
(unless (listp specs) (setq specs (list specs)))
(let (regions region mk-region)
(org-with-wide-buffer
+ (when (and (not from) (not to))
+ (setq from (point-min)
+ to (point-max)))
(when (and from (not to)) (setq to (point-max)))
(when (and from (< from (point-min))) (setq from (point-min)))
(when (and to (> to (point-max))) (setq to (point-max)))
@@ -1058,7 +1063,7 @@ means that the buffer should stay alive during the operation,
because otherwise all these markers will point to nowhere."
(declare (debug (form body)) (indent 1))
(org-with-gensyms (regions)
- `(let* ((,regions ,(org-fold-core-get-regions :with-markers use-markers)))
+ `(let* ((,regions (org-fold-core-get-regions :with-markers ,use-markers)))
(unwind-protect (progn ,@body)
(org-fold-core-regions ,regions :override t :clean-markers t)))))
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 aedd413351c..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
@@ -851,9 +851,12 @@ to `org-footnote-section'. Inline definitions are ignored."
(format "[fn:%s] DEFINITION NOT FOUND." label))
"\n"))))
;; Insert un-referenced footnote definitions at the end.
- (pcase-dolist (`(,label . ,definition) definitions)
- (unless (member label inserted)
- (insert "\n" definition "\n")))))))))
+ ;; Combine all insertions into one to create a single cache
+ ;; update call.
+ (combine-change-calls (point) (point)
+ (pcase-dolist (`(,label . ,definition) definitions)
+ (unless (member label inserted)
+ (insert "\n" definition "\n"))))))))))
(defun org-footnote-normalize ()
"Turn every footnote in buffer into a numbered one."
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 108292f1e92..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
@@ -134,7 +134,7 @@
;; from the persistent storage at the end of Emacs session. The
;; expiry condition can be set when saving/registering data
;; containers. The expirty condition can be `never' - data will never
-;; expire; `nil' - data will expire at the end of current Emacs session;
+;; expire; nil - data will expire at the end of current Emacs session;
;; a number - data will expire after the number days from last access;
;; a function - data will expire if the function, called with a single
;; argument - collection, returns non-nil.
@@ -161,7 +161,7 @@
(declare-function org-at-heading-p "org" (&optional invisible-not-ok))
-(defconst org-persist--storage-version "2.5"
+(defconst org-persist--storage-version "3.1"
"Persistent storage layout version.")
(defgroup org-persist nil
@@ -222,8 +222,11 @@ function will be called with a single argument - collection."
(defconst org-persist-index-file "index"
"File name used to store the data index.")
-(defvar org-persist-disable-when-emacs-Q t
- "Disable persistence when Emacs is called with -Q command line arg.")
+(defvar org-persist--disable-when-emacs-Q t
+ "Disable persistence when Emacs is called with -Q command line arg.
+When non-nil, this sets `org-persist-directory' to temporary directory.
+
+This variable must be set before loading org-persist library.")
(defvar org-persist-before-write-hook nil
"Abnormal hook ran before saving data.
@@ -428,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.
@@ -647,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)
@@ -662,12 +668,13 @@ 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))
- (if (org--should-fetch-remote-resource-p path)
- (url-copy-file path file-copy 'overwrite)
- (error "The remote resource %S is considered unsafe, and will not be downloaded."
- path))
+ (unless (file-exists-p file-copy)
+ (unless (file-exists-p (file-name-directory file-copy))
+ (make-directory (file-name-directory file-copy) t))
+ (if (org--should-fetch-remote-resource-p path)
+ (url-copy-file path file-copy 'overwrite)
+ (error "The remote resource %S is considered unsafe, and will not be downloaded."
+ path)))
(format "%s-%s.%s" persist-file (md5 path) ext)))))
(defun org-persist-write:index (container _)
@@ -715,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))
@@ -771,43 +779,39 @@ ASSOCIATED can be a plist, a buffer, or a string.
A buffer is treated as (:buffer ASSOCIATED).
A string is treated as (:file ASSOCIATED).
When LOAD? is non-nil, load the data instead of reading."
+ (unless org-persist--index (org-persist--load-index))
(setq associated (org-persist--normalize-associated associated))
(setq container (org-persist--normalize-container container))
- (unless (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))
- (let* ((collection (org-persist--find-index `(:container ,container :associated ,associated)))
- (persist-file
- (when collection
- (org-file-name-concat
- org-persist-directory
- (plist-get collection :persist-file))))
- (data nil))
- (when (and collection
- (file-exists-p persist-file)
- (or (not (plist-get collection :expiry)) ; current session
- (not (org-persist--gc-expired-p
- (plist-get collection :expiry) collection)))
- (or (not hash-must-match)
- (and (plist-get associated :hash)
- (equal (plist-get associated :hash)
- (plist-get (plist-get collection :associated) :hash)))))
- (unless (seq-find (lambda (v)
- (run-hook-with-args-until-success 'org-persist-before-read-hook v associated))
- (plist-get collection :container))
- (setq data (or (gethash persist-file org-persist--write-cache)
- (org-persist--read-elisp-file persist-file)))
- (when data
- (cl-loop for container in (plist-get collection :container)
- with result = nil
- do
- (if load?
- (push (org-persist-load:generic container (alist-get container data nil nil #'equal) collection) result)
- (push (org-persist-read:generic container (alist-get container data nil nil #'equal) collection) result))
- (run-hook-with-args 'org-persist-after-read-hook container associated)
- finally return (if (= 1 (length result)) (car result) result))))))))
+ (let* ((collection (org-persist--find-index `(:container ,container :associated ,associated)))
+ (persist-file
+ (when collection
+ (org-file-name-concat
+ org-persist-directory
+ (plist-get collection :persist-file))))
+ (data nil))
+ (when (and collection
+ (file-exists-p persist-file)
+ (or (not (plist-get collection :expiry)) ; current session
+ (not (org-persist--gc-expired-p
+ (plist-get collection :expiry) collection)))
+ (or (not hash-must-match)
+ (and (plist-get associated :hash)
+ (equal (plist-get associated :hash)
+ (plist-get (plist-get collection :associated) :hash)))))
+ (unless (seq-find (lambda (v)
+ (run-hook-with-args-until-success 'org-persist-before-read-hook v associated))
+ (plist-get collection :container))
+ (setq data (or (gethash persist-file org-persist--write-cache)
+ (org-persist--read-elisp-file persist-file)))
+ (when data
+ (cl-loop for container in (plist-get collection :container)
+ with result = nil
+ do
+ (if load?
+ (push (org-persist-load:generic container (alist-get container data nil nil #'equal) collection) result)
+ (push (org-persist-read:generic container (alist-get container data nil nil #'equal) collection) result))
+ (run-hook-with-args 'org-persist-after-read-hook container associated)
+ finally return (if (= 1 (length result)) (car result) result)))))))
(defun org-persist-load (container &optional associated hash-must-match)
"Load CONTAINER data for ASSOCIATED.
@@ -843,55 +847,72 @@ The return value is nil when writing fails and the written value (as
returned by `org-persist-read') on success.
When IGNORE-RETURN is non-nil, just return t on success without calling
`org-persist-read'."
- (unless (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 associated (org-persist--normalize-associated associated))
- ;; Update hash
- (when (and (plist-get associated :file)
- (plist-get associated :hash)
- (get-file-buffer (plist-get associated :file)))
- (setq associated (org-persist--normalize-associated (get-file-buffer (plist-get associated :file)))))
- (let ((collection (org-persist--get-collection container associated)))
- (setf collection (plist-put collection :associated associated))
- (unless (seq-find (lambda (v)
- (run-hook-with-args-until-success 'org-persist-before-write-hook v associated))
- (plist-get collection :container))
- (when (or (file-exists-p org-persist-directory) (org-persist--save-index))
- (let ((file (org-file-name-concat org-persist-directory (plist-get collection :persist-file)))
- (data (mapcar (lambda (c) (cons c (org-persist-write:generic c collection)))
- (plist-get collection :container))))
- (puthash file data org-persist--write-cache)
- (org-persist--write-elisp-file file data)
- (or ignore-return (org-persist-read container associated))))))))
+ (setq associated (org-persist--normalize-associated associated))
+ ;; Update hash
+ (when (and (plist-get associated :file)
+ (plist-get associated :hash)
+ (get-file-buffer (plist-get associated :file)))
+ (setq associated (org-persist--normalize-associated (get-file-buffer (plist-get associated :file)))))
+ (let ((collection (org-persist--get-collection container associated)))
+ (setf collection (plist-put collection :associated associated))
+ (unless (or
+ ;; Prevent data leakage from encrypted files.
+ ;; We do it in somewhat paranoid manner and do not
+ ;; allow anything related to encrypted files to be
+ ;; written.
+ (and (plist-get associated :file)
+ (string-match-p epa-file-name-regexp (plist-get associated :file)))
+ (seq-find (lambda (v)
+ (run-hook-with-args-until-success 'org-persist-before-write-hook v associated))
+ (plist-get collection :container)))
+ (when (or (file-exists-p org-persist-directory) (org-persist--save-index))
+ (let ((file (org-file-name-concat org-persist-directory (plist-get collection :persist-file)))
+ (data (mapcar (lambda (c) (cons c (org-persist-write:generic c collection)))
+ (plist-get collection :container))))
+ (puthash file data org-persist--write-cache)
+ (org-persist--write-elisp-file file data)
+ (or ignore-return (org-persist-read container associated)))))))
(defun org-persist-write-all (&optional associated)
"Save all the persistent data.
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))
- (let (all-containers)
- (dolist (collection org-persist--index)
- (if associated
- (when collection
- (cl-pushnew (plist-get collection :container) all-containers :test #'equal))
- (condition-case err
- (org-persist-write (plist-get collection :container) (plist-get collection :associated) t)
- (error
- (message "%s. Deleting bad index entry." err)
- (org-persist--remove-from-index collection)
- nil))))
- (dolist (container all-containers)
- (let ((collection (org-persist--find-index `(:container ,container :associated ,associated))))
- (when collection
+ (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)))
+ (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
+ (when collection
+ (cl-pushnew (plist-get collection :container) all-containers :test #'equal))
(condition-case err
- (org-persist-write container associated t)
+ (org-persist-write (plist-get collection :container) (plist-get collection :associated) t)
(error
(message "%s. Deleting bad index entry." err)
(org-persist--remove-from-index collection)
- nil)))))))
+ nil))))
+ (dolist (container all-containers)
+ (let ((collection (org-persist--find-index `(:container ,container :associated ,associated))))
+ (when collection
+ (condition-case err
+ (org-persist-write container associated t)
+ (error
+ (message "%s. Deleting bad index entry." err)
+ (org-persist--remove-from-index collection)
+ nil))))))))
(defun org-persist-write-all-buffer ()
"Call `org-persist-write-all' in current buffer.
@@ -924,48 +945,68 @@ Do nothing in an indirect buffer."
(defun org-persist-gc ()
"Remove expired or unregistered containers.
Also, remove containers associated with non-existing files."
- (unless (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))
- (let (new-index (remote-files-num 0))
- (dolist (collection org-persist--index)
- (let* ((file (plist-get (plist-get collection :associated) :file))
- (file-remote (when file (file-remote-p file)))
- (persist-file (when (plist-get collection :persist-file)
- (org-file-name-concat
- org-persist-directory
- (plist-get collection :persist-file))))
- (expired? (org-persist--gc-expired-p
- (plist-get collection :expiry) collection)))
- (when persist-file
- (when file
- (when file-remote (cl-incf remote-files-num))
- (unless (if (not file-remote)
- (file-exists-p file)
- (pcase org-persist-remote-files
- ('t t)
- ('check-existence
- (file-exists-p file))
- ((pred numberp)
- (<= org-persist-remote-files remote-files-num))
- (_ nil)))
- (setq expired? t)))
- (if expired?
- (org-persist--gc-persist-file persist-file)
- (push collection new-index)))))
- (setq org-persist--index (nreverse new-index)))))
+ (let (new-index (remote-files-num 0))
+ (dolist (collection org-persist--index)
+ (let* ((file (plist-get (plist-get collection :associated) :file))
+ (file-remote (when file (file-remote-p file)))
+ (persist-file (when (plist-get collection :persist-file)
+ (org-file-name-concat
+ org-persist-directory
+ (plist-get collection :persist-file))))
+ (expired? (org-persist--gc-expired-p
+ (plist-get collection :expiry) collection)))
+ (when persist-file
+ (when file
+ (when file-remote (cl-incf remote-files-num))
+ (unless (if (not file-remote)
+ (file-exists-p file)
+ (pcase org-persist-remote-files
+ ('t t)
+ ('check-existence
+ (file-exists-p file))
+ ((pred numberp)
+ (<= org-persist-remote-files remote-files-num))
+ (_ nil)))
+ (setq expired? t)))
+ (if expired?
+ (org-persist--gc-persist-file persist-file)
+ (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))))
(while (and (not (file-exists-p dir))
(not (equal dir (setq dir (directory-file-name
- (file-name-directory dir)))))))
+ (file-name-directory dir)))))))
(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'.
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 8e0e8e6cf86..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
@@ -41,6 +41,7 @@
(require 'org-macs)
(require 'org-compat)
(require 'org-keys)
+(require 'org-fold-core)
(declare-function calc-eval "calc" (str &optional separator &rest args))
(declare-function face-remap-remove-relative "face-remap" (cookie))
@@ -4448,6 +4449,13 @@ FIELD is a string. WIDTH is a number. ALIGN is either \"c\",
(defun org-table-justify-field-maybe (&optional new)
"Justify the current field, text to left, number to right.
Optional argument NEW may specify text to replace the current field content."
+ ;; FIXME: Prevent newlines inside field. They are currently not
+ ;; supported.
+ (when (and (stringp new) (string-match-p "\n" new))
+ (message "Removing newlines from formula result: %S" new)
+ (setq new (replace-regexp-in-string
+ "\n" " "
+ (replace-regexp-in-string "\\(^\n+\\)\\|\\(\n+$\\)" "" new))))
(cond
((and (not new) org-table-may-need-update)) ; Realignment will happen anyway
((org-at-table-hline-p))
@@ -5721,31 +5729,32 @@ This may be either a string or a function of two arguments:
;; Initialize communication channel in INFO.
(with-temp-buffer
(let ((org-inhibit-startup t)) (org-mode))
- (let ((standard-output (current-buffer))
- (org-element-use-cache nil))
- (dolist (e table)
- (cond ((eq e 'hline) (princ "|--\n"))
- ((consp e)
- (princ "| ") (dolist (c e) (princ c) (princ " |"))
- (princ "\n")))))
- (org-element-cache-reset)
- ;; Add back-end specific filters, but not user-defined ones. In
- ;; particular, make sure to call parse-tree filters on the
- ;; table.
- (setq info
- (let ((org-export-filters-alist nil))
- (org-export-install-filters
- (org-combine-plists
- (org-export-get-environment backend nil params)
- `(:back-end ,(org-export-get-backend backend))))))
- (setq data
- (org-export-filter-apply-functions
- (plist-get info :filter-parse-tree)
- (org-element-map (org-element-parse-buffer) 'table
- #'identity nil t)
- info)))
- (when (and backend (symbolp backend) (not (org-export-get-backend backend)))
- (user-error "Unknown :backend value"))
+ (org-fold-core-ignore-modifications
+ (let ((standard-output (current-buffer))
+ (org-element-use-cache nil))
+ (dolist (e table)
+ (cond ((eq e 'hline) (princ "|--\n"))
+ ((consp e)
+ (princ "| ") (dolist (c e) (princ c) (princ " |"))
+ (princ "\n")))))
+ (org-element-cache-reset)
+ ;; Add back-end specific filters, but not user-defined ones. In
+ ;; particular, make sure to call parse-tree filters on the
+ ;; table.
+ (setq info
+ (let ((org-export-filters-alist nil))
+ (org-export-install-filters
+ (org-combine-plists
+ (org-export-get-environment backend nil params)
+ `(:back-end ,(org-export-get-backend backend))))))
+ (setq data
+ (org-export-filter-apply-functions
+ (plist-get info :filter-parse-tree)
+ (org-element-map (org-element-parse-buffer) 'table
+ #'identity nil t)
+ info))
+ (when (and backend (symbolp backend) (not (org-export-get-backend backend)))
+ (user-error "Unknown :backend value"))))
(when (or (not backend) (plist-get info :raw)) (require 'ox-org))
;; Handle :skip parameter.
(let ((skip (plist-get info :skip)))
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 e9339690409..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-3-ga4d38e"))
+ (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 ab6212daccd..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>
@@ -102,6 +102,7 @@
(require 'org-cycle)
(defvaralias 'org-hide-block-startup 'org-cycle-hide-block-startup)
+(defvaralias 'org-hide-drawer-startup 'org-cycle-hide-drawer-startup)
(defvaralias 'org-pre-cycle-hook 'org-cycle-pre-hook)
(defvaralias 'org-tab-first-hook 'org-cycle-tab-first-hook)
(defalias 'org-global-cycle #'org-cycle-global)
@@ -4596,8 +4597,8 @@ is available. This option applies only if FILE is a URL."
This checks every pattern in `org-safe-remote-resources', and
returns non-nil if any of them match."
(let ((uri-patterns org-safe-remote-resources)
- (file-uri (and buffer-file-name
- (concat "file://" (file-truename buffer-file-name))))
+ (file-uri (and (buffer-file-name (buffer-base-buffer))
+ (concat "file://" (file-truename (buffer-file-name (buffer-base-buffer))))))
match-p)
(while (and (not match-p) uri-patterns)
(setq match-p (or (string-match-p (car uri-patterns) uri)
@@ -4608,7 +4609,8 @@ returns non-nil if any of them match."
(defun org--confirm-resource-safe (uri)
"Ask the user if URI should be considered safe, returning non-nil if so."
(unless noninteractive
- (let ((current-file (and buffer-file-name (file-truename buffer-file-name)))
+ (let ((current-file (and (buffer-file-name (buffer-base-buffer))
+ (file-truename (buffer-file-name (buffer-base-buffer)))))
(domain (and (string-match
(rx (seq "http" (? "s") "://")
(optional (+ (not (any "@/\n"))) "@")
@@ -11380,7 +11382,7 @@ See also `org-scan-tags'."
(pv (match-string 7 term))
(regexp (eq (string-to-char pv) ?{))
(strp (eq (string-to-char pv) ?\"))
- (timep (string-match-p "^\"[[<][0-9]+.*[]>]\"$" pv))
+ (timep (string-match-p "^\"[[<]\\(?:[0-9]+\\|now\\|today\\|tomorrow\\|[+-][0-9]+[dmwy]\\).*[]>]\"$" pv))
(po (org-op-to-function (match-string 6 term)
(if timep 'time strp))))
(setq pv (if (or regexp strp) (substring pv 1 -1) pv))
@@ -16322,6 +16324,10 @@ buffer boundaries with possible narrowing."
(org-element-property :end link))
(skip-chars-backward " \t")
(point)))))
+ ;; FIXME: See bug#59902. We cannot rely
+ ;; on Emacs to update image if the file
+ ;; has changed.
+ (image-flush image)
(overlay-put ov 'display image)
(overlay-put ov 'face 'default)
(overlay-put ov 'org-image-overlay t)
@@ -16395,6 +16401,10 @@ buffer boundaries with possible narrowing."
"Remove inline-display overlay if a corresponding region is modified."
(when (and ov after)
(delete ov org-inline-image-overlays)
+ ;; Clear image from cache to avoid image not updating upon
+ ;; changing on disk. See Emacs bug#59902.
+ (when (overlay-get ov 'org-image-overlay)
+ (image-flush (overlay-get ov 'display)))
(delete-overlay ov)))
(defun org-remove-inline-images (&optional beg end)
@@ -20203,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 01e0aa0491b..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>
@@ -87,7 +87,8 @@ included into another document or application that reserves top-level
headings for its own use."
:group 'org-export-md
:package-version '(Org . "9.6")
- :type 'natnum)
+ ;; Avoid `natnum' because that's not available until Emacs 28.1.
+ :type 'integer)
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 5c0a8f2424b..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>
@@ -2559,7 +2559,7 @@ variable and do not do anything that might alter it (like calling a
major mode) to prevent data corruption. Also, do note that Emacs may
jump into the created buffer if the original file buffer is closed and
then re-opened. Making edits in the buffer copy may also trigger
-Emacs save dialogue. Prefer using `org-export-with-buffer-copy' macro
+Emacs save dialog. Prefer using `org-export-with-buffer-copy' macro
when possible.
When optional key `:to-buffer' is non-nil, copy into BUFFER.
@@ -3036,6 +3036,11 @@ Return code as a string."
(org-narrow-to-subtree)
(goto-char (point-min))
(org-end-of-meta-data)
+ ;; Make the region include top heading in the subtree.
+ ;; This way, we will be able to retrieve its export
+ ;; options when calling
+ ;; `org-export--get-subtree-options'.
+ (backward-char)
(narrow-to-region (point) (point-max))))
;; Initialize communication channel with original buffer
;; attributes, unavailable in its copy.
@@ -4607,12 +4612,17 @@ If LINK refers to a remote resource, modify it to point to a local
downloaded copy. Otherwise, return unchanged LINK."
(when (org-export-link-remote-p link)
(let* ((local-path (org-export-link--remote-local-copy link)))
- (setcdr link
- (thread-first (cadr link)
- (plist-put :type "file")
- (plist-put :path local-path)
- (plist-put :raw-link (concat "file:" local-path))
- list))))
+ (if local-path
+ (setcdr link
+ (thread-first (cadr link)
+ (plist-put :type "file")
+ (plist-put :path local-path)
+ (plist-put :raw-link (concat "file:" local-path))
+ list))
+ (display-warning
+ '(org export)
+ (format "unable to obtain local copy of %s"
+ (org-element-property :raw-link link))))))
link)
;;;; For References
@@ -4748,23 +4758,27 @@ objects of the same type."
(let ((counter 0))
;; Increment counter until ELEMENT is found again.
(org-element-map (plist-get info :parse-tree)
- (or types (org-element-type element))
+ (or (and types (cons (org-element-type element) types))
+ (org-element-type element))
(lambda (el)
(let ((cached (org-element-property :org-export--counter el)))
(cond
((eq element el) (1+ counter))
;; Use cached result.
- ((and cached (equal predicate (car cached)))
- (cdr cached))
+ ((and cached
+ (equal predicate (car cached))
+ (equal types (cadr cached)))
+ (setq counter (nth 2 cached))
+ nil)
((not predicate)
(cl-incf counter)
(org-element-put-property
- el :org-export--counter (cons predicate counter))
+ el :org-export--counter (list predicate types counter))
nil)
((funcall predicate el info)
(cl-incf counter)
(org-element-put-property
- el :org-export--counter (cons predicate counter))
+ el :org-export--counter (list predicate types counter))
nil))))
info 'first-match)))))
diff --git a/lisp/outline.el b/lisp/outline.el
index 2c3f9798ec4..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
@@ -1817,7 +1817,7 @@ With a prefix argument, show headings up to that LEVEL."
(unless o
(when (eq outline-minor-mode-use-buttons 'insert)
(let ((inhibit-read-only t))
- (insert " ")
+ (insert (apply #'propertize " " (text-properties-at (point))))
(beginning-of-line)))
(setq o (make-overlay (point) (1+ (point))))
(overlay-put o 'outline-button t)
@@ -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 ef286b70fe0..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
@@ -193,7 +193,7 @@ and how is entirely up to the behavior of the
"If non-nil, allow effects in `pcomplete-parse-arguments-function'.
For the `pcomplete' command, it was common for functions in
`pcomplete-parse-arguments-function' to make modifications to the
-buffer, like expanding variables are such.
+buffer, like expanding variables and such.
For `completion-at-point-functions', this is not an option any more, so
this variable is used to tell `pcomplete-parse-arguments-function'
whether it can do the modifications like it used to, or whether
@@ -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.
@@ -1456,7 +1469,7 @@ COMMAND and ARGS as arguments."
(pcomplete-match-string 1 0)))
((string-prefix-p "-" (pcomplete-arg 0))
(pcomplete-here (apply #'pcomplete-from-help command args)))
- (t (pcomplete-here (pcomplete-entries))))))
+ (t (pcomplete-here* (pcomplete-entries))))))
(provide 'pcomplete)
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 c7419288edf..a9c7ef9ef3d 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 6bac297a298..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
@@ -44,7 +44,7 @@
;; Separate package `dos-indent' (Matthew Fidler) provides rudimentary
;; indentation, see https://www.emacswiki.org/emacs/dos-indent.el.
;;
-;; Acknowledgements:
+;; Acknowledgments:
;;
;; Inspired by `batch-mode' (Agnar Renolen) and `cmd-mode' (Tadamegu Furukawa).
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 a8189a0f3da..1f2a195bf64 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>
@@ -9,19 +9,18 @@
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; 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.
-;; This program is distributed in the hope that it will be useful,
+;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;;
@@ -40,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"
@@ -62,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
@@ -79,9 +82,35 @@ follows the form of `treesit-simple-indent-rules'."
(modify-syntax-entry ?\240 "." table)
(modify-syntax-entry ?/ ". 124b" table)
(modify-syntax-entry ?* ". 23" table)
+ (modify-syntax-entry ?\n "> b" table)
+ (modify-syntax-entry ?\^m "> b" 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'.
MODE is either `c' or `cpp'."
@@ -89,12 +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)
- ((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)
((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)
@@ -103,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)
@@ -119,6 +150,8 @@ MODE is either `c' or `cpp'."
((query "(call_expression arguments: (_) @indent)") parent c-ts-mode-indent-offset)
((parent-is "call_expression") parent 0)
((parent-is "enumerator_list") parent-bol c-ts-mode-indent-offset)
+ ,@(when (eq mode 'cpp)
+ '(((node-is "access_specifier") parent-bol 0)))
((parent-is "field_declaration_list") parent-bol c-ts-mode-indent-offset)
((parent-is "initializer_list") parent-bol c-ts-mode-indent-offset)
((parent-is "if_statement") parent-bol c-ts-mode-indent-offset)
@@ -157,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")
@@ -169,9 +235,9 @@ MODE is either `c' or `cpp'."
'("break" "case" "const" "continue"
"default" "do" "else" "enum"
"extern" "for" "goto" "if" "inline"
- "long" "register" "return" "short"
- "signed" "sizeof" "static" "struct"
- "switch" "typedef" "union" "unsigned"
+ "register" "return"
+ "sizeof" "static" "struct"
+ "switch" "typedef" "union"
"volatile" "while")))
(if (eq mode 'cpp)
(append c-keywords
@@ -188,6 +254,10 @@ MODE is either `c' or `cpp'."
"xor" "xor_eq"))
(append '("auto") c-keywords))))
+(defvar c-ts-mode--type-keywords
+ '("long" "short" "signed" "unsigned")
+ "Keywords that should be considered as part of a type.")
+
(defvar c-ts-mode--operators
'("=" "-" "*" "/" "+" "%" "~" "|" "&" "^" "<<" ">>" "->"
"." "<" "<=" ">=" ">" "==" "!=" "!" "&&" "||" "-="
@@ -229,13 +299,14 @@ MODE is either `c' or `cpp'."
(false) @font-lock-constant-face
(null) @font-lock-constant-face
,@(when (eq mode 'cpp)
- '((this) @font-lock-constant-face)))
+ '((nullptr) @font-lock-constant-face)))
:language mode
:feature 'keyword
`([,@(c-ts-mode--keywords mode)] @font-lock-keyword-face
,@(when (eq mode 'cpp)
- '((auto) @font-lock-keyword-face)))
+ '((auto) @font-lock-keyword-face
+ (this) @font-lock-keyword-face)))
:language mode
:feature 'operator
@@ -245,7 +316,9 @@ MODE is either `c' or `cpp'."
:language mode
:feature 'string
`((string_literal) @font-lock-string-face
- (system_lib_string) @font-lock-string-face)
+ (system_lib_string) @font-lock-string-face
+ ,@(when (eq mode 'cpp)
+ '((raw_string_literal) @font-lock-string-face)))
:language mode
:feature 'literal
@@ -263,7 +336,8 @@ MODE is either `c' or `cpp'."
(qualified_identifier
scope: (namespace_identifier) @font-lock-type-face)
- (operator_cast) type: (type_identifier) @font-lock-type-face)))
+ (operator_cast) type: (type_identifier) @font-lock-type-face))
+ [,@c-ts-mode--type-keywords] @font-lock-type-face)
:language mode
:feature 'definition
@@ -314,7 +388,7 @@ MODE is either `c' or `cpp'."
:language mode
:feature 'error
- '((ERROR) @c-ts-fontify-error)
+ '((ERROR) @c-ts-mode--fontify-error)
:feature 'escape-sequence
:language mode
@@ -343,42 +417,45 @@ 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
- (max (treesit-node-start node) start)
- (min (treesit-node-end node) end)
- (pcase (treesit-node-type (treesit-node-parent node))
- ("function_declarator" 'font-lock-function-name-face)
- (_ 'font-lock-variable-name-face))
- override))))
+ 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.
-Fontify it if NODE is not a function identifier. For NODE,
+ "Fontify an identifier node if it is a variable.
+Don't fontify if it is a function identifier. For NODE,
OVERRIDE, START, END, and ARGS, see `treesit-font-lock-rules'."
(when (not (equal (treesit-node-type
(treesit-node-parent node))
"call_expression"))
(treesit-fontify-with-override
- (max (treesit-node-start node) start)
- (min (treesit-node-end node) end)
- 'font-lock-variable-name-face
- override)))
+ (treesit-node-start node) (treesit-node-end node)
+ 'font-lock-variable-name-face override start end)))
(defun c-ts-mode--fontify-defun (node override start end &rest _)
"Correctly fontify the DEFUN macro.
@@ -405,31 +482,28 @@ This function corrects the fontification on the colon in
(when (equal (treesit-node-text node t) ":")
(treesit-fontify-with-override
(treesit-node-start node) (treesit-node-end node)
- 'default override)))
+ 'default override start end)))
;; Fix the parameter list.
(while arg-list-2
(let ((type (and arg-list-2 (pop arg-list-2)))
(arg (and arg-list-2 (pop arg-list-2))))
(when type
(treesit-fontify-with-override
- (max start (treesit-node-start type))
- (min end (treesit-node-end type))
- 'font-lock-type-face override))
+ (treesit-node-start type) (treesit-node-end type)
+ 'font-lock-type-face override start end))
(when arg
(treesit-fontify-with-override
- (max start (treesit-node-start arg))
- (min end (treesit-node-end arg))
- 'default override))))))
+ (treesit-node-start arg) (treesit-node-end arg)
+ 'default override start end))))))
-(defun c-ts-fontify-error (node override start end &rest _)
+(defun c-ts-mode--fontify-error (node override start end &rest _)
"Fontify the error nodes.
For NODE, OVERRIDE, START, and END, see
`treesit-font-lock-rules'."
(let ((parent (treesit-node-parent node))
(child (treesit-node-child node 0)))
(treesit-fontify-with-override
- (max start (treesit-node-start node))
- (min end (treesit-node-end node))
+ (treesit-node-start node) (treesit-node-end node)
(cond
;; This matches the case MACRO(struct a, b, c)
;; where struct is seen as error.
@@ -439,97 +513,228 @@ For NODE, OVERRIDE, START, and END, see
'("struct" "long" "short" "enum" "union")))
'font-lock-keyword-face)
(t 'font-lock-warning-face))
- override)))
-
-(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)))))
+ override start end)))
+
+;;; 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)
+ "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.
+Structs in C ends with a semicolon, but the semicolon is not
+considered part of the struct node, so point would stop before
+the semicolon. This function skips the semicolon."
+ (when (looking-at (rx (* (or " " "\t")) ";"))
+ (goto-char (match-end 0)))
+ (treesit-default-defun-skipper))
+
+(defun c-ts-mode-indent-defun ()
+ "Indent the current top-level declaration syntactically.
+
+`treesit-defun-type-regexp' defines what constructs to indent."
+ (interactive "*")
+ (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
+ "C-c C-q" #'c-ts-mode-indent-defun)
;;;###autoload
(define-derived-mode c-ts-base-mode prog-mode "C"
- "Major mode for editing C, powered by tree-sitter."
+ "Major mode for editing C, powered by tree-sitter.
+
+\\{c-ts-mode-map}"
:syntax-table c-ts-mode--syntax-table
;; Navigation.
(setq-local treesit-defun-type-regexp
- (regexp-opt '("function_definition"
- "type_definition"
- "struct_specifier"
- "enum_specifier"
- "union_specifier")))
+ (cons (regexp-opt '("function_definition"
+ "type_definition"
+ "struct_specifier"
+ "enum_specifier"
+ "union_specifier"
+ "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.
@@ -539,13 +744,25 @@ the subtrees."
(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)
@@ -566,13 +783,6 @@ the subtrees."
;; 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))
@@ -580,11 +790,7 @@ the subtrees."
;; 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++"
@@ -594,18 +800,9 @@ the subtrees."
(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 (+ "*") "/")))))
-
(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))
@@ -613,11 +810,7 @@ the subtrees."
;; 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 b13f6a5914e..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
@@ -1826,7 +1826,7 @@ with value CHAR in the region [FROM to)."
'(or (looking-at
"\\([;#]\\|\\'\\|\\s(\\|\\s)\\|\\s\"\\|\\s\\\\|\\s$\\|\\s<\\|\\s>\\)"
(let ((prop (c-get-char-property (point) 'syntax-table)))
- (eq prop '(14))))))) ; '(14) is generic comment delimiter.
+ (equal prop '(14))))))) ; '(14) is generic comment delimiter.
(defsubst c-intersect-lists (list alist)
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
new file mode 100644
index 00000000000..a31250f68be
--- /dev/null
+++ b/lisp/progmodes/cmake-ts-mode.el
@@ -0,0 +1,234 @@
+;;; cmake-ts-mode.el --- tree-sitter support for CMake -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
+
+;; Author : Randy Taylor <dev@rjt.dev>
+;; Maintainer : Randy Taylor <dev@rjt.dev>
+;; Created : December 2022
+;; Keywords : cmake 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:
+;;
+
+;;; Code:
+
+(require 'treesit)
+(eval-when-compile (require 'rx))
+
+(declare-function treesit-parser-create "treesit.c")
+(declare-function treesit-induce-sparse-tree "treesit.c")
+(declare-function treesit-node-child "treesit.c")
+(declare-function treesit-node-start "treesit.c")
+(declare-function treesit-node-type "treesit.c")
+
+(defcustom cmake-ts-mode-indent-offset 2
+ "Number of spaces for each indentation step in `cmake-ts-mode'."
+ :version "29.1"
+ :type 'integer
+ :safe 'integerp
+ :group 'cmake)
+
+(defvar cmake-ts-mode--syntax-table
+ (let ((table (make-syntax-table)))
+ (modify-syntax-entry ?# "<" table)
+ (modify-syntax-entry ?\n ">" table)
+ (modify-syntax-entry ?$ "'" table)
+ table)
+ "Syntax table for `cmake-ts-mode'.")
+
+(defvar cmake-ts-mode--indent-rules
+ `((cmake
+ ((node-is ")") parent-bol 0)
+ ((node-is "else_command") parent-bol 0)
+ ((node-is "elseif_command") parent-bol 0)
+ ((node-is "endforeach_command") parent-bol 0)
+ ((node-is "endfunction_command") parent-bol 0)
+ ((node-is "endif_command") parent-bol 0)
+ ((parent-is "foreach_loop") parent-bol cmake-ts-mode-indent-offset)
+ ((parent-is "function_def") parent-bol cmake-ts-mode-indent-offset)
+ ((parent-is "if_condition") parent-bol cmake-ts-mode-indent-offset)
+ ((parent-is "normal_command") parent-bol cmake-ts-mode-indent-offset)))
+ "Tree-sitter indent rules for `cmake-ts-mode'.")
+
+(defvar cmake-ts-mode--constants
+ '("1" "ON" "TRUE" "YES" "Y" "0" "OFF" "FALSE" "NO" "N" "IGNORE"
+ "NOTFOUND")
+ "CMake constants for tree-sitter font-locking.")
+
+(defvar cmake-ts-mode--keywords
+ '((else) (elseif) (endforeach) (endfunction) (endif) (endmacro)
+ (endwhile) (foreach) (function) (if) (macro) (while))
+ "CMake keywords for tree-sitter font-locking.")
+
+(defvar cmake-ts-mode--foreach-options
+ '("IN" "ITEMS" "LISTS" "RANGE" "ZIP_LISTS")
+ "CMake foreach options for tree-sitter font-locking.")
+
+(defvar cmake-ts-mode--if-conditions
+ '("AND" "COMMAND" "DEFINED" "EQUAL" "EXISTS" "GREATER"
+ "GREATER_EQUAL" "LESS" "LESS_EQUAL" "MATCHES" "NOT" "OR"
+ "PATH_EQUAL" "STREQUAL" "STRGREATER" "STRGREATER_EQUAL" "STRLESS"
+ "STRLESS_EQUAL" "VERSION_EQUAL" "VERSION_GREATER"
+ "VERSION_GREATER_EQUAL" "VERSION_LESS" "VERSION_LESS_EQUAL")
+ "CMake if conditions for tree-sitter font-locking.")
+
+(defvar cmake-ts-mode--font-lock-settings
+ (treesit-font-lock-rules
+ :language 'cmake
+ :feature 'bracket
+ '((["(" ")"]) @font-lock-bracket-face)
+
+ :language 'cmake
+ :feature 'builtin
+ `(((foreach_command
+ ((argument) @font-lock-constant-face
+ (:match ,(rx-to-string
+ `(seq bol
+ (or ,@cmake-ts-mode--foreach-options)
+ eol))
+ @font-lock-constant-face))))
+ ((if_command
+ ((argument) @font-lock-constant-face
+ (:match ,(rx-to-string
+ `(seq bol
+ (or ,@cmake-ts-mode--if-conditions)
+ eol))
+ @font-lock-constant-face)))))
+
+ :language 'cmake
+ :feature 'comment
+ '([(bracket_comment) (line_comment)] @font-lock-comment-face)
+
+ :language 'cmake
+ :feature 'constant
+ `(((argument) @font-lock-constant-face
+ (:match ,(rx-to-string
+ `(seq bol
+ (or ,@cmake-ts-mode--constants)
+ eol))
+ @font-lock-constant-face)))
+
+ :language 'cmake
+ :feature 'function
+ '((normal_command (identifier) @font-lock-function-name-face))
+
+ :language 'cmake
+ :feature 'keyword
+ `([,@cmake-ts-mode--keywords] @font-lock-keyword-face)
+
+ :language 'cmake
+ :feature 'number
+ '(((unquoted_argument) @font-lock-number-face
+ (:match "^[[:digit:]]*\\.?[[:digit:]]*\\.?[[:digit:]]+$" @font-lock-number-face)))
+
+ :language 'cmake
+ :feature 'string
+ '([(bracket_argument) (quoted_argument)] @font-lock-string-face)
+
+ :language 'cmake
+ :feature 'escape-sequence
+ :override t
+ '((escape_sequence) @font-lock-escape-face)
+
+ :language 'cmake
+ :feature 'misc-punctuation
+ ;; Don't override strings.
+ :override 'nil
+ '((["$" "{" "}" "<" ">"]) @font-lock-misc-punctuation-face)
+
+ :language 'cmake
+ :feature 'variable
+ :override t
+ '((variable) @font-lock-variable-name-face)
+
+ :language 'cmake
+ :feature 'error
+ :override t
+ '((ERROR) @font-lock-warning-face))
+ "Tree-sitter font-lock settings for `cmake-ts-mode'.")
+
+(defun cmake-ts-mode--imenu ()
+ "Return Imenu alist for the current buffer."
+ (let* ((node (treesit-buffer-root-node))
+ (func-tree (treesit-induce-sparse-tree
+ node "function_def" nil 1000))
+ (func-index (cmake-ts-mode--imenu-1 func-tree)))
+ (append
+ (when func-index `(("Function" . ,func-index))))))
+
+(defun cmake-ts-mode--imenu-1 (node)
+ "Helper for `cmake-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 #'cmake-ts-mode--imenu-1
+ children))
+ (name (when ts-node
+ (pcase (treesit-node-type ts-node)
+ ("function_def"
+ (treesit-node-text
+ (treesit-node-child (treesit-node-child ts-node 0) 2) 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))))))
+
+;;;###autoload
+(add-to-list 'auto-mode-alist
+ '("\\(?:CMakeLists\\.txt\\|\\.cmake\\)\\'" . cmake-ts-mode))
+
+;;;###autoload
+(define-derived-mode cmake-ts-mode prog-mode "CMake"
+ "Major mode for editing CMake files, powered by tree-sitter."
+ :group 'cmake
+ :syntax-table cmake-ts-mode--syntax-table
+
+ (when (treesit-ready-p 'cmake)
+ (treesit-parser-create 'cmake)
+
+ ;; Comments.
+ (setq-local comment-start "# ")
+ (setq-local comment-end "")
+ (setq-local comment-start-skip (rx "#" (* (syntax whitespace))))
+
+ ;; Imenu.
+ (setq-local imenu-create-index-function #'cmake-ts-mode--imenu)
+ (setq-local which-func-functions nil)
+
+ ;; Indent.
+ (setq-local treesit-simple-indent-rules cmake-ts-mode--indent-rules)
+
+ ;; Font-lock.
+ (setq-local treesit-font-lock-settings cmake-ts-mode--font-lock-settings)
+ (setq-local treesit-font-lock-feature-list
+ '((comment)
+ (keyword string)
+ (builtin constant escape-sequence function number variable)
+ (bracket error misc-punctuation)))
+
+ (treesit-major-mode-setup)))
+
+(provide 'cmake-ts-mode)
+
+;;; cmake-ts-mode.el ends here
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index e8ada9388e1..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>,
@@ -186,6 +186,7 @@ and a string describing how the process finished.")
face compilation-info
help-echo "Number of informational messages so far")
"]"))
+(put 'compilation-mode-line-errors 'risky-local-variable t)
;; If you make any changes to `compilation-error-regexp-alist-alist',
;; be sure to run the ERT test in test/lisp/progmodes/compile-tests.el.
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 054dabfed07..473e8f49fd3 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>
@@ -11,18 +11,18 @@
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; 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.
-;; This program is distributed in the hope that it will be useful,
+;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
@@ -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
@@ -505,7 +507,7 @@ compilation and evaluation time conflicts."
(defun csharp--compilation-error-file-resolve ()
"Resolve an msbuild error to a (filename . dirname) cons cell."
- ;; http://stackoverflow.com/a/18049590/429091
+ ;; https://stackoverflow.com/a/18049590/429091
(cons (match-string 1) (file-name-directory (match-string 4))))
(defconst csharp-compilation-re-msbuild-error
@@ -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)
@@ -688,31 +693,54 @@ 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
- `((integer_literal) @font-lock-constant-face
- (real_literal) @font-lock-constant-face
+ `((integer_literal) @font-lock-number-face
+ (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,12 +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-variable-name-face)
+ '((qualified_name (identifier) @font-lock-type-face)
(using_directive (identifier) @font-lock-type-face)
+ (using_directive (name_equals
+ (identifier) @font-lock-type-face))
(enum_declaration (identifier) @font-lock-type-face)
(enum_member_declaration (identifier) @font-lock-variable-name-face)
@@ -761,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)
@@ -775,21 +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 (identifier) @font-lock-function-name-face))
-
(catch_declaration
((identifier) @font-lock-type-face))
(catch_declaration
@@ -797,79 +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))
+ (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 'bracket
- '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-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 'delimiter
- '((["," ":" ";"]) @font-lock-delimiter-face)))
+ :feature 'escape-sequence
+ :override t
+ '((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))
@@ -890,6 +894,7 @@ Key bindings:
;;;###autoload
(define-derived-mode csharp-ts-mode prog-mode "C#"
"Major mode for editing C# code."
+ :syntax-table (csharp--make-mode-syntax-table)
(unless (treesit-ready-p 'c-sharp)
(error "Tree-sitter for C# isn't available"))
@@ -898,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)
;; Indent.
(setq-local treesit-simple-indent-rules csharp-ts-mode--indent-rules)
@@ -917,18 +914,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 type)
- ( attribute constant expression literal)
- ( bracket delimiter)))
+ ( 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
new file mode 100644
index 00000000000..3f8766e6713
--- /dev/null
+++ b/lisp/progmodes/dockerfile-ts-mode.el
@@ -0,0 +1,177 @@
+;;; dockerfile-ts-mode.el --- tree-sitter support for Dockerfiles -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
+
+;; Author : Randy Taylor <dev@rjt.dev>
+;; Maintainer : Randy Taylor <dev@rjt.dev>
+;; Created : December 2022
+;; Keywords : dockerfile 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:
+;;
+
+;;; Code:
+
+(require 'treesit)
+(eval-when-compile (require 'rx))
+
+(declare-function treesit-parser-create "treesit.c")
+(declare-function treesit-induce-sparse-tree "treesit.c")
+(declare-function treesit-node-child "treesit.c")
+(declare-function treesit-node-child-by-field-name "treesit.c")
+(declare-function treesit-node-start "treesit.c")
+(declare-function treesit-node-type "treesit.c")
+
+(defvar dockerfile-ts-mode--syntax-table
+ (let ((table (make-syntax-table)))
+ (modify-syntax-entry ?# "<" table)
+ (modify-syntax-entry ?\n ">" table)
+ table)
+ "Syntax table for `dockerfile-ts-mode'.")
+
+(defvar dockerfile-ts-mode--indent-rules
+ `((dockerfile
+ ((parent-is "copy_instruction") (nth-sibling 1) 0)
+ ((parent-is "env_instruction") (nth-sibling 1) 0)
+ ((parent-is "expose_instruction") (nth-sibling 1) 0)
+ ((parent-is "label_instruction") (nth-sibling 1) 0)
+ ((parent-is "shell_command") first-sibling 0)
+ ((parent-is "string_array") first-sibling 1)))
+ "Tree-sitter indent rules.")
+
+(defvar dockerfile-ts-mode--keywords
+ '("ADD" "ARG" "AS" "CMD" "COPY" "CROSS_BUILD" "ENTRYPOINT" "ENV"
+ "EXPOSE" "FROM" "HEALTHCHECK" "LABEL" "MAINTAINER" "ONBUILD" "RUN"
+ "SHELL" "STOPSIGNAL" "USER" "VOLUME" "WORKDIR")
+ "Dockerfile keywords for tree-sitter font-locking.")
+
+(defvar dockerfile-ts-mode--font-lock-settings
+ (treesit-font-lock-rules
+ :language 'dockerfile
+ :feature 'bracket
+ '((["[" "]"]) @font-lock-bracket-face)
+
+ :language 'dockerfile
+ :feature 'comment
+ '((comment) @font-lock-comment-face)
+
+ :language 'dockerfile
+ :feature 'delimiter
+ '(([","]) @font-lock-delimiter-face)
+
+ :language 'dockerfile
+ :feature 'image-spec
+ '((image_spec) @font-lock-constant-face)
+
+ :language 'dockerfile
+ :feature 'keyword
+ `([,@dockerfile-ts-mode--keywords] @font-lock-keyword-face)
+
+ :language 'dockerfile
+ :feature 'number
+ '((expose_port) @font-lock-number-face)
+
+ :language 'dockerfile
+ :feature 'operator
+ '((["="]) @font-lock-operator-face)
+
+ :language 'dockerfile
+ :feature 'string
+ '((double_quoted_string) @font-lock-string-face)
+
+ :language 'dockerfile
+ :feature 'error
+ :override t
+ '((ERROR) @font-lock-warning-face))
+ "Tree-sitter font-lock settings.")
+
+(defun dockerfile-ts-mode--imenu ()
+ "Return Imenu alist for the current buffer."
+ (let* ((node (treesit-buffer-root-node))
+ (stage-tree (treesit-induce-sparse-tree
+ node "from_instruction"
+ nil 1000)))
+ `(("Stage" . ,(dockerfile-ts-mode--imenu-1 stage-tree)))))
+
+(defun dockerfile-ts-mode--imenu-1 (node)
+ "Helper for `dockerfile-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 #'dockerfile-ts-mode--imenu-1
+ children))
+ (name (when ts-node
+ (pcase (treesit-node-type ts-node)
+ ("from_instruction"
+ (treesit-node-text
+ (or (treesit-node-child-by-field-name ts-node "as")
+ (treesit-node-child ts-node 1)) 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))))))
+
+;;;###autoload
+(add-to-list 'auto-mode-alist
+ ;; NOTE: We can't use `rx' here, as it breaks bootstrap.
+ '("\\(?:Dockerfile\\(?:\\..*\\)?\\|\\.[Dd]ockerfile\\)\\'"
+ . dockerfile-ts-mode))
+
+;;;###autoload
+(define-derived-mode dockerfile-ts-mode prog-mode "Dockerfile"
+ "Major mode for editing Dockerfiles, powered by tree-sitter."
+ :group 'dockerfile
+ :syntax-table dockerfile-ts-mode--syntax-table
+
+ (when (treesit-ready-p 'dockerfile)
+ (treesit-parser-create 'dockerfile)
+
+ ;; Comments.
+ (setq-local comment-start "# ")
+ (setq-local comment-end "")
+ (setq-local comment-start-skip (rx "#" (* (syntax whitespace))))
+
+ ;; Imenu.
+ (setq-local imenu-create-index-function
+ #'dockerfile-ts-mode--imenu)
+ (setq-local which-func-functions nil)
+
+ ;; Indent.
+ (setq-local treesit-simple-indent-rules
+ dockerfile-ts-mode--indent-rules)
+
+ ;; Font-lock.
+ (setq-local treesit-font-lock-settings
+ dockerfile-ts-mode--font-lock-settings)
+ (setq-local treesit-font-lock-feature-list
+ '((comment)
+ (keyword string)
+ (image-spec number)
+ (bracket delimiter error operator)))
+
+ (treesit-major-mode-setup)))
+
+(provide 'dockerfile-ts-mode)
+
+;;; dockerfile-ts-mode.el ends here
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 c266f6e18a3..6d192d9b333 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -1,13 +1,13 @@
;;; 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.9
+;; Version: 1.10
;; Author: JoĂ£o TĂ¡vora <joaotavora@gmail.com>
;; Maintainer: JoĂ£o TĂ¡vora <joaotavora@gmail.com>
;; URL: https://github.com/joaotavora/eglot
;; Keywords: convenience, languages
-;; Package-Requires: ((emacs "26.3") (jsonrpc "1.0.14") (flymake "1.2.1") (project "0.3.0") (xref "1.0.1") (eldoc "1.11.0") (seq "2.23"))
+;; Package-Requires: ((emacs "26.3") (jsonrpc "1.0.16") (flymake "1.2.1") (project "0.9.3") (xref "1.0.1") (eldoc "1.11.0") (seq "2.23") (external-completion "0.1"))
;; This is a GNU ELPA :core package. Avoid adding functionality
;; that is not available in the version of Emacs recorded above or any
@@ -110,6 +110,7 @@
(require 'filenotify)
(require 'ert)
(require 'array)
+(require 'external-completion)
;; ElDoc is preloaded in Emacs, so `require'-ing won't guarantee we are
;; using the latest version from GNU Elpa when we load eglot.el. Use an
@@ -181,14 +182,15 @@ chosen (interactively or automatically)."
when probe return (cons probe args)
finally (funcall err)))))))
-(defvar eglot-server-programs `((rust-mode . ,(eglot-alternatives '("rust-analyzer" "rls")))
- (cmake-mode . ("cmake-language-server"))
+(defvar eglot-server-programs `(((rust-ts-mode rust-mode) . ,(eglot-alternatives '("rust-analyzer" "rls")))
+ ((cmake-mode cmake-ts-mode) . ("cmake-language-server"))
(vimrc-mode . ("vim-language-server" "--stdio"))
((python-mode python-ts-mode)
. ,(eglot-alternatives
'("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"))
@@ -203,14 +205,15 @@ 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"))
(elm-mode . ("elm-language-server"))
(mint-mode . ("mint" "ls"))
(kotlin-mode . ("kotlin-language-server"))
- ((go-mode go-dot-mod-mode go-dot-work-mode) . ("gopls"))
+ ((go-mode go-dot-mod-mode go-dot-work-mode go-ts-mode go-mod-ts-mode)
+ . ("gopls"))
((R-mode ess-r-mode) . ("R" "--slave" "-e"
"languageserver::run()"))
((java-mode java-ts-mode) . ("jdtls"))
@@ -223,7 +226,7 @@ chosen (interactively or automatically)."
((tex-mode context-mode texinfo-mode bibtex-mode)
. ,(eglot-alternatives '("digestif" "texlab")))
(erlang-mode . ("erlang_ls" "--transport" "stdio"))
- (yaml-mode . ("yaml-language-server" "--stdio"))
+ ((yaml-ts-mode yaml-mode) . ("yaml-language-server" "--stdio"))
(nix-mode . ,(eglot-alternatives '("nil" "rnix-lsp")))
(gdscript-mode . ("localhost" 6008))
((fortran-mode f90-mode) . ("fortls"))
@@ -235,11 +238,13 @@ chosen (interactively or automatically)."
. ,(eglot-alternatives '(("vscode-css-language-server" "--stdio")
("css-languageserver" "--stdio"))))
(html-mode . ,(eglot-alternatives '(("vscode-html-language-server" "--stdio") ("html-languageserver" "--stdio"))))
- (dockerfile-mode . ("docker-langserver" "--stdio"))
+ ((dockerfile-mode dockerfile-ts-mode) . ("docker-langserver" "--stdio"))
((clojure-mode clojurescript-mode clojurec-mode)
. ("clojure-lsp"))
((csharp-mode csharp-ts-mode)
- . ("omnisharp" "-lsp"))
+ . ,(eglot-alternatives
+ '(("omnisharp" "-lsp")
+ ("csharp-ls"))))
(purescript-mode . ("purescript-language-server" "--stdio"))
((perl-mode cperl-mode) . ("perl" "-MPerl::LanguageServer" "-e" "Perl::LanguageServer::run"))
(markdown-mode . ("marksman" "server")))
@@ -386,6 +391,11 @@ done by `eglot-reconnect'."
"String displayed in mode line when Eglot is active."
:type 'string)
+(defcustom eglot-report-progress t
+ "If non-nil, show progress of long running LSP server work"
+ :type 'boolean
+ :version "29.1")
+
(defvar eglot-withhold-process-id nil
"If non-nil, Eglot will not send the Emacs process id to the language server.
This can be useful when using docker to run a language server.")
@@ -470,6 +480,7 @@ This can be useful when using docker to run a language server.")
(TextDocumentEdit (:textDocument :edits) ())
(TextEdit (:range :newText))
(VersionedTextDocumentIdentifier (:uri :version) ())
+ (WorkDoneProgress (:kind) (:title :message :percentage :cancellable))
(WorkspaceEdit () (:changes :documentChanges))
(WorkspaceSymbol (:name :kind) (:containerName :location :data)))
"Alist (INTERFACE-NAME . INTERFACE) of known external LSP interfaces.
@@ -492,7 +503,7 @@ Here's what an element of this alist might look like:
;; disallow-non-standard-keys
;; enforce-required-keys
;; enforce-optional-keys
- )
+ no-unknown-interfaces)
"How strictly to check LSP interfaces at compile- and run-time.
Value is a list of symbols (if the list is empty, no checks are
@@ -513,7 +524,10 @@ happens at run-time. At compile-time, a warning is raised if a
destructuring spec doesn't use all optional fields.
If the symbol `disallow-unknown-methods' is present, Eglot warns
-on unknown notifications and errors on unknown requests."))
+on unknown notifications and errors on unknown requests.
+
+If the symbol `no-unknown-interfaces' is present, Eglot warns at
+compile time if an undeclared LSP interface is used."))
(cl-defun eglot--check-object (interface-name
object
@@ -540,7 +554,7 @@ on unknown notifications and errors on unknown requests."))
for type = (or (cdr (assoc k types)) t) ;; FIXME: enforce nil type?
unless (cl-typep v type)
do (eglot--error "A `%s' must have a %s as %s, but has %s"
- interface-name )))
+ interface-name)))
t))
(eval-and-compile
@@ -587,7 +601,7 @@ on unknown notifications and errors on unknown requests."))
(when missing-out (byte-compile-warn
"Destructuring for %s is missing out on %s"
interface-name missing-out))))
- (t
+ ((memq 'no-unknown-interfaces eglot-strict-mode)
(byte-compile-warn "Unknown LSP interface %s" interface-name))))))
(cl-defmacro eglot--dbind (vars object &body body)
@@ -831,6 +845,9 @@ treated as in `eglot--dbind'."
(project
:documentation "Project associated with server."
:accessor eglot--project)
+ (progress-reporters
+ :initform (make-hash-table :test #'equal) :accessor eglot--progress-reporters
+ :documentation "Maps LSP progress tokens to progress reporters.")
(inhibit-autoreconnect
:initform t
:documentation "Generalized boolean inhibiting auto-reconnection if true."
@@ -891,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.
@@ -909,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))
@@ -925,7 +947,7 @@ PRESERVE-BUFFERS as in `eglot-shutdown', which see."
(push sym retval))))
retval))
-(defvar eglot--command-history nil
+(defvar eglot-command-history nil
"History of CONTACT arguments to `eglot'.")
(defun eglot--lookup-mode (mode)
@@ -1040,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
@@ -1125,11 +1144,11 @@ INTERACTIVE is t if called interactively."
(let ((buffer (current-buffer)))
(cl-labels
((maybe-connect
- ()
- (remove-hook 'post-command-hook #'maybe-connect nil)
- (eglot--when-live-buffer buffer
- (unless eglot--managed-mode
- (apply #'eglot--connect (eglot--guess-contact))))))
+ ()
+ (remove-hook 'post-command-hook #'maybe-connect nil)
+ (eglot--when-live-buffer buffer
+ (unless eglot--managed-mode
+ (apply #'eglot--connect (eglot--guess-contact))))))
(when buffer-file-name
(add-hook 'post-command-hook #'maybe-connect 'append nil)))))
@@ -1181,7 +1200,7 @@ Each function is passed the server as an argument")
(list "sh" "-c"
(string-join (cons "stty raw > /dev/null;"
(mapcar #'shell-quote-argument contact))
- " "))
+ " "))
contact))
(defvar-local eglot--cached-server nil
@@ -1235,7 +1254,7 @@ This docstring appeases checkdoc, that's all."
,@more-initargs)))))
(spread (lambda (fn) (lambda (server method params)
(let ((eglot--cached-server server))
- (apply fn server method (append params nil))))))
+ (apply fn server method (append params nil))))))
(server
(apply
#'make-instance class
@@ -1569,7 +1588,7 @@ Doubles as an indicator of snippet support."
(setq-local markdown-fontify-code-blocks-natively t)
(insert string)
(let ((inhibit-message t)
- (message-log-max nil))
+ (message-log-max nil))
(ignore-errors (delay-mode-hooks (funcall mode))))
(font-lock-ensure)
(string-trim (buffer-string)))))
@@ -1854,8 +1873,8 @@ If it is activated, also signal textDocument/didOpen."
(force-mode-line-update t))))))
(defun eglot-manual () "Open documentation."
- (declare (obsolete info "29.1"))
- (interactive) (info "(eglot)"))
+ (declare (obsolete info "29.1"))
+ (interactive) (info "(eglot)"))
(easy-menu-define eglot-menu nil "Eglot"
`("Eglot"
@@ -1959,17 +1978,17 @@ Uses THING, FACE, DEFS and PREPEND."
'keymap (let ((map (make-sparse-keymap)))
(define-key map [mode-line down-mouse-1] eglot-server-menu)
map))
- ,@(when last-error
+ ,@(when last-error
`("/" ,(eglot--mode-line-props
"error" 'compilation-mode-line-fail
'((mouse-3 eglot-clear-status "Clear this status"))
(format "An error occurred: %s\n" (plist-get last-error
- :message)))))
- ,@(when (cl-plusp pending)
- `("/" ,(eglot--mode-line-props
- (format "%d" pending) 'warning
- '((mouse-3 eglot-forget-pending-continuations
- "Forget pending continuations"))
+ :message)))))
+ ,@(when (cl-plusp pending)
+ `("/" ,(eglot--mode-line-props
+ (format "%d" pending) 'warning
+ '((mouse-3 eglot-forget-pending-continuations
+ "Forget pending continuations"))
"Number of outgoing, \
still unanswered LSP requests to the server\n"))))))))
@@ -1987,13 +2006,13 @@ still unanswered LSP requests to the server\n"))))))))
(defalias 'eglot--diag-data 'flymake-diagnostic-data)
(cl-loop for i from 1
- for type in '(eglot-note eglot-warning eglot-error )
+ for type in '(eglot-note eglot-warning eglot-error)
do (put type 'flymake-overlay-control
`((mouse-face . highlight)
(priority . ,(+ 50 i))
(keymap . ,(let ((map (make-sparse-keymap)))
(define-key map [mouse-1]
- (eglot--mouse-call 'eglot-code-actions))
+ (eglot--mouse-call 'eglot-code-actions))
map)))))
@@ -2050,6 +2069,27 @@ COMMAND is a symbol naming the command."
"Handle notification telemetry/event.") ;; noop, use events buffer
(cl-defmethod eglot-handle-notification
+ (server (_method (eql $/progress)) &key token value)
+ "Handle $/progress notification identified by TOKEN from SERVER."
+ (when eglot-report-progress
+ (cl-flet ((fmt (&rest args) (mapconcat #'identity args " ")))
+ (eglot--dbind ((WorkDoneProgress) kind title percentage message) value
+ (pcase kind
+ ("begin"
+ (let* ((prefix (format (concat "[eglot] %s %s:" (when percentage " "))
+ (eglot-project-nickname server) token))
+ (pr (puthash token
+ (if percentage
+ (make-progress-reporter prefix 0 100 percentage 1 0)
+ (make-progress-reporter prefix nil nil nil 1 0))
+ (eglot--progress-reporters server))))
+ (progress-reporter-update pr percentage (fmt title message))))
+ ("report"
+ (when-let ((pr (gethash token (eglot--progress-reporters server))))
+ (progress-reporter-update pr percentage (fmt title message))))
+ ("end" (remhash token (eglot--progress-reporters server))))))))
+
+(cl-defmethod eglot-handle-notification
(_server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics
&allow-other-keys) ; FIXME: doesn't respect `eglot-strict-mode'
"Handle notification publishDiagnostics."
@@ -2060,9 +2100,11 @@ COMMAND is a symbol naming the command."
(t 'eglot-note)))
(mess (source code message)
(concat source (and code (format " [%s]" code)) ": " message)))
- (if-let ((buffer (find-buffer-visiting (eglot--uri-to-path uri))))
+ (if-let* ((path (expand-file-name (eglot--uri-to-path uri)))
+ (buffer (find-buffer-visiting path)))
(with-current-buffer buffer
(cl-loop
+ initially (assoc-delete-all path flymake-list-only-diagnostics #'string=)
for diag-spec across diagnostics
collect (eglot--dbind ((Diagnostic) range code message severity source tags)
diag-spec
@@ -2105,7 +2147,6 @@ COMMAND is a symbol naming the command."
(t
(setq eglot--diagnostics diags)))))
(cl-loop
- with path = (expand-file-name (eglot--uri-to-path uri))
for diag-spec across diagnostics
collect (eglot--dbind ((Diagnostic) code range message severity source) diag-spec
(setq message (mess source code message))
@@ -2172,7 +2213,7 @@ THINGS are either registrations or unregisterations (sic)."
(append
(eglot--VersionedTextDocumentIdentifier)
(list :languageId
- (eglot--language-id (eglot--current-server-or-lose))
+ (eglot--language-id (eglot--current-server-or-lose))
:text
(eglot--widening
(buffer-substring-no-properties (point-min) (point-max))))))
@@ -2571,7 +2612,7 @@ If BUFFER, switch to it before."
(let ((probe (gethash pat cache :missing)))
(if (eq probe :missing) (puthash pat (refresh pat) cache)
probe)))
- (lookup (pat)
+ (lookup (pat _point)
(let ((res (lookup-1 pat))
(def (and (string= pat "") (gethash :default cache))))
(append def res nil)))
@@ -2579,16 +2620,12 @@ If BUFFER, switch to it before."
(cl-getf (get-text-property
0 'eglot--lsp-workspaceSymbol c)
:score 0)))
- (lambda (string _pred action)
- (pcase action
- (`metadata `(metadata
- (cycle-sort-function
- . ,(lambda (completions)
- (cl-sort completions #'> :key #'score)))
- (category . eglot-indirection-joy)))
- (`(eglot--lsp-tryc . ,point) `(eglot--lsp-tryc . (,string . ,point)))
- (`(eglot--lsp-allc . ,_point) `(eglot--lsp-allc . ,(lookup string)))
- (_ nil))))))
+ (external-completion-table
+ 'eglot-indirection-joy
+ #'lookup
+ `((cycle-sort-function
+ . ,(lambda (completions)
+ (cl-sort completions #'> :key #'score))))))))
(defun eglot--recover-workspace-symbol-meta (string)
"Search `eglot--workspace-symbols-cache' for rich entry of STRING."
@@ -2600,9 +2637,6 @@ If BUFFER, switch to it before."
(setq v (cdr v))))
eglot--workspace-symbols-cache)))
-(add-to-list 'completion-category-overrides
- '(eglot-indirection-joy (styles . (eglot--lsp-backend-style))))
-
(cl-defmethod xref-backend-identifier-at-point ((_backend (eql eglot)))
(let ((attempt
(and (xref--prompt-p this-command)
@@ -2641,7 +2675,7 @@ If BUFFER, switch to it before."
uri range))))))
(if (vectorp response) response (and response (list response)))))))
-(cl-defun eglot--lsp-xref-helper (method &key extra-params capability )
+(cl-defun eglot--lsp-xref-helper (method &key extra-params capability)
"Helper for `eglot-find-declaration' & friends."
(let ((eglot--lsp-xref-refs (eglot--lsp-xrefs-for-method
method
@@ -2673,7 +2707,7 @@ If BUFFER, switch to it before."
(get-text-property 0 'eglot--lsp-workspaceSymbol probe)
(eglot--dbind ((Location) uri range) location
(list (eglot--xref-make-match name uri range))))
- (eglot--lsp-xrefs-for-method :textDocument/definition))))
+ (eglot--lsp-xrefs-for-method :textDocument/definition))))
(cl-defmethod xref-backend-references ((_backend (eql eglot)) _identifier)
(or
@@ -2712,7 +2746,7 @@ for which LSP on-type-formatting should be requested."
`(:textDocument/onTypeFormatting
:documentOnTypeFormattingProvider
,`(:position ,(eglot--pos-to-lsp-position beg)
- :ch ,(string on-type-format))))
+ :ch ,(string on-type-format))))
((and beg end)
`(:textDocument/rangeFormatting
:documentRangeFormattingProvider
@@ -3285,24 +3319,24 @@ at point. With prefix argument, prompt for ACTION-KIND."
(eglot--project server))))))
(cl-labels
((handle-event
- (event)
- (pcase-let* ((`(,desc ,action ,file ,file1) event)
- (action-type (cl-case action
- (created 1) (changed 2) (deleted 3)))
- (action-bit (when action-type
- (ash 1 (1- action-type)))))
- (cond
- ((and (memq action '(created changed deleted))
- (cl-loop for (glob . kind-bitmask) in globs
- thereis (and (> (logand kind-bitmask action-bit) 0)
- (funcall glob file))))
- (jsonrpc-notify
- server :workspace/didChangeWatchedFiles
- `(:changes ,(vector `(:uri ,(eglot--path-to-uri file)
- :type ,action-type)))))
- ((eq action 'renamed)
- (handle-event `(,desc 'deleted ,file))
- (handle-event `(,desc 'created ,file1)))))))
+ (event)
+ (pcase-let* ((`(,desc ,action ,file ,file1) event)
+ (action-type (cl-case action
+ (created 1) (changed 2) (deleted 3)))
+ (action-bit (when action-type
+ (ash 1 (1- action-type)))))
+ (cond
+ ((and (memq action '(created changed deleted))
+ (cl-loop for (glob . kind-bitmask) in globs
+ thereis (and (> (logand kind-bitmask action-bit) 0)
+ (funcall glob file))))
+ (jsonrpc-notify
+ server :workspace/didChangeWatchedFiles
+ `(:changes ,(vector `(:uri ,(eglot--path-to-uri file)
+ :type ,action-type)))))
+ ((eq action 'renamed)
+ (handle-event `(,desc 'deleted ,file))
+ (handle-event `(,desc 'created ,file1)))))))
(unwind-protect
(progn
(dolist (dir dirs-to-watch)
@@ -3437,42 +3471,6 @@ If NOERROR, return predicate, else erroring function."
'eglot-managed-mode-hook "1.6")
(provide 'eglot)
-
-;;; Backend completion
-
-;; Written by Stefan Monnier circa 2016. Something to move to
-;; minibuffer.el "ASAP" (with all the `eglot--lsp-' replaced by
-;; something else. The very same code already in SLY and stable for a
-;; long time.
-
-;; This "completion style" delegates all the work to the "programmable
-;; completion" table which is then free to implement its own
-;; completion style. Typically this is used to take advantage of some
-;; external tool which already has its own completion system and
-;; doesn't give you efficient access to the prefix completion needed
-;; by other completion styles. The table should recognize the symbols
-;; 'eglot--lsp-tryc and 'eglot--lsp-allc as ACTION, reply with
-;; (eglot--lsp-tryc COMP...) or (eglot--lsp-allc . (STRING . POINT)),
-;; accordingly. tryc/allc names made akward/recognizable on purpose.
-
-(add-to-list 'completion-styles-alist
- '(eglot--lsp-backend-style
- eglot--lsp-backend-style-try-completion
- eglot--lsp-backend-style-all-completions
- "Ad-hoc completion style provided by the completion table."))
-
-(defun eglot--lsp-backend-style-call (op string table pred point)
- (when (functionp table)
- (let ((res (funcall table string pred (cons op point))))
- (when (eq op (car-safe res))
- (cdr res)))))
-
-(defun eglot--lsp-backend-style-try-completion (string table pred point)
- (eglot--lsp-backend-style-call 'eglot--lsp-tryc string table pred point))
-
-(defun eglot--lsp-backend-style-all-completions (string table pred point)
- (eglot--lsp-backend-style-call 'eglot--lsp-allc string table pred point))
-
;; Local Variables:
;; bug-reference-bug-regexp: "\\(github#\\([0-9]+\\)\\)"
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 adb984c3e59..6f293acca5e 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>
@@ -54,9 +54,8 @@
;; (question mark) if no backends were even configured.
;;
;; For programmers interested in writing a new Flymake backend, the
-;; docstring of `flymake-diagnostic-functions', the Flymake manual,
-;; and the code of existing backends are probably a good starting
-;; point.
+;; docstring of `flymake-diagnostic-functions', the Flymake manual, and the
+;; code of existing backends are probably good starting points.
;;
;; The user wishing to customize the appearance of error types should
;; set properties on the symbols associated with each diagnostic type.
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 e8d8f9104e4..8b157dd3333 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
new file mode 100644
index 00000000000..1d6a8a30db5
--- /dev/null
+++ b/lisp/progmodes/go-ts-mode.el
@@ -0,0 +1,354 @@
+;;; go-ts-mode.el --- tree-sitter support for Go -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
+
+;; Author : Randy Taylor <dev@rjt.dev>
+;; Maintainer : Randy Taylor <dev@rjt.dev>
+;; Created : December 2022
+;; Keywords : go 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:
+;;
+
+;;; Code:
+
+(require 'treesit)
+(eval-when-compile (require 'rx))
+
+(declare-function treesit-parser-create "treesit.c")
+(declare-function treesit-induce-sparse-tree "treesit.c")
+(declare-function treesit-node-child "treesit.c")
+(declare-function treesit-node-child-by-field-name "treesit.c")
+(declare-function treesit-node-start "treesit.c")
+(declare-function treesit-node-type "treesit.c")
+
+(defcustom go-ts-mode-indent-offset 4
+ "Number of spaces for each indentation step in `go-ts-mode'."
+ :version "29.1"
+ :type 'integer
+ :safe 'integerp
+ :group 'go)
+
+(defvar go-ts-mode--syntax-table
+ (let ((table (make-syntax-table)))
+ (modify-syntax-entry ?+ "." table)
+ (modify-syntax-entry ?- "." table)
+ (modify-syntax-entry ?= "." table)
+ (modify-syntax-entry ?% "." table)
+ (modify-syntax-entry ?& "." table)
+ (modify-syntax-entry ?| "." table)
+ (modify-syntax-entry ?^ "." table)
+ (modify-syntax-entry ?! "." table)
+ (modify-syntax-entry ?< "." table)
+ (modify-syntax-entry ?> "." table)
+ (modify-syntax-entry ?\\ "\\" table)
+ (modify-syntax-entry ?/ ". 124b" table)
+ (modify-syntax-entry ?* ". 23" table)
+ (modify-syntax-entry ?\n "> b" table)
+ table)
+ "Syntax table for `go-ts-mode'.")
+
+(defvar go-ts-mode--indent-rules
+ `((go
+ ((node-is ")") parent-bol 0)
+ ((node-is "]") parent-bol 0)
+ ((node-is "}") parent-bol 0)
+ ((node-is "labeled_statement") no-indent)
+ ((parent-is "argument_list") parent-bol go-ts-mode-indent-offset)
+ ((parent-is "block") parent-bol go-ts-mode-indent-offset)
+ ((parent-is "const_declaration") parent-bol go-ts-mode-indent-offset)
+ ((parent-is "default_case") parent-bol go-ts-mode-indent-offset)
+ ((parent-is "expression_case") parent-bol go-ts-mode-indent-offset)
+ ((parent-is "expression_switch_statement") parent-bol 0)
+ ((parent-is "field_declaration_list") parent-bol go-ts-mode-indent-offset)
+ ((parent-is "import_spec_list") parent-bol go-ts-mode-indent-offset)
+ ((parent-is "labeled_statement") parent-bol go-ts-mode-indent-offset)
+ ((parent-is "literal_value") parent-bol go-ts-mode-indent-offset)
+ ((parent-is "type_spec") parent-bol go-ts-mode-indent-offset)
+ ((parent-is "var_declaration") parent-bol go-ts-mode-indent-offset)
+ (no-node parent-bol 0)))
+ "Tree-sitter indent rules for `go-ts-mode'.")
+
+(defvar go-ts-mode--keywords
+ '("break" "case" "chan" "const" "continue" "default" "defer" "else"
+ "fallthrough" "for" "func" "go" "goto" "if" "import" "interface" "map"
+ "package" "range" "return" "select" "struct" "switch" "type" "var")
+ "Go keywords for tree-sitter font-locking.")
+
+(defvar go-ts-mode--operators
+ '("+" "&" "+=" "&=" "&&" "==" "!=" "-" "|" "-=" "|=" "||" "<" "<="
+ "*" "^" "*=" "^=" "<-" ">" ">=" "/" "<<" "/=" "<<=" "++" "=" ":=" "%"
+ ">>" "%=" ">>=" "--" "!" "..." "&^" "&^=" "~")
+ "Go operators for tree-sitter font-locking.")
+
+(defvar go-ts-mode--font-lock-settings
+ (treesit-font-lock-rules
+ :language 'go
+ :feature 'bracket
+ '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face)
+
+ :language 'go
+ :feature 'comment
+ '((comment) @font-lock-comment-face)
+
+ :language 'go
+ :feature 'constant
+ '([(false) (iota) (nil) (true)] @font-lock-constant-face
+ (const_declaration
+ (const_spec name: (identifier) @font-lock-constant-face)))
+
+ :language 'go
+ :feature 'delimiter
+ '((["," "." ";" ":"]) @font-lock-delimiter-face)
+
+ :language 'go
+ :feature 'function
+ '((call_expression
+ function: (identifier) @font-lock-function-name-face)
+ (call_expression
+ function: (selector_expression
+ field: (field_identifier) @font-lock-function-name-face))
+ (function_declaration
+ name: (identifier) @font-lock-function-name-face)
+ (method_declaration
+ name: (field_identifier) @font-lock-function-name-face))
+
+ :language 'go
+ :feature 'keyword
+ `([,@go-ts-mode--keywords] @font-lock-keyword-face)
+
+ :language 'go
+ :feature 'label
+ '((label_name) @font-lock-constant-face)
+
+ :language 'go
+ :feature 'number
+ '([(float_literal)
+ (imaginary_literal)
+ (int_literal)] @font-lock-number-face)
+
+ :language 'go
+ :feature 'string
+ '([(interpreted_string_literal)
+ (raw_string_literal)
+ (rune_literal)] @font-lock-string-face)
+
+ :language 'go
+ :feature 'type
+ '([(package_identifier) (type_identifier)] @font-lock-type-face)
+
+ :language 'go
+ :feature 'variable
+ '((identifier) @font-lock-variable-name-face)
+
+ :language 'go
+ :feature 'escape-sequence
+ :override t
+ '((escape_sequence) @font-lock-escape-face)
+
+ :language 'go
+ :feature 'property
+ :override t
+ '((field_identifier) @font-lock-property-face
+ (keyed_element (_ (identifier) @font-lock-property-face)))
+
+ :language 'go
+ :feature 'error
+ :override t
+ '((ERROR) @font-lock-warning-face))
+ "Tree-sitter font-lock settings for `go-ts-mode'.")
+
+(defun go-ts-mode--imenu ()
+ "Return Imenu alist for the current buffer."
+ (let* ((node (treesit-buffer-root-node))
+ (func-tree (treesit-induce-sparse-tree
+ node "function_declaration" nil 1000))
+ (type-tree (treesit-induce-sparse-tree
+ node "type_spec" nil 1000))
+ (func-index (go-ts-mode--imenu-1 func-tree))
+ (type-index (go-ts-mode--imenu-1 type-tree)))
+ (append
+ (when func-index `(("Function" . ,func-index)))
+ (when type-index `(("Type" . ,type-index))))))
+
+(defun go-ts-mode--imenu-1 (node)
+ "Helper for `go-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 #'go-ts-mode--imenu-1
+ children))
+ (name (when ts-node
+ (treesit-node-text
+ (pcase (treesit-node-type ts-node)
+ ("function_declaration"
+ (treesit-node-child-by-field-name ts-node "name"))
+ ("type_spec"
+ (treesit-node-child-by-field-name ts-node "name"))))))
+ (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))))))
+
+;;;###autoload
+(add-to-list 'auto-mode-alist '("\\.go\\'" . go-ts-mode))
+
+;;;###autoload
+(define-derived-mode go-ts-mode prog-mode "Go"
+ "Major mode for editing Go, powered by tree-sitter."
+ :group 'go
+ :syntax-table go-ts-mode--syntax-table
+
+ (when (treesit-ready-p 'go)
+ (treesit-parser-create 'go)
+
+ ;; Comments.
+ (setq-local comment-start "// ")
+ (setq-local comment-end "")
+ (setq-local comment-start-skip (rx "//" (* (syntax whitespace))))
+
+ ;; Imenu.
+ (setq-local imenu-create-index-function #'go-ts-mode--imenu)
+ (setq-local which-func-functions nil)
+
+ ;; Indent.
+ (setq-local indent-tabs-mode t
+ treesit-simple-indent-rules go-ts-mode--indent-rules)
+
+ ;; Font-lock.
+ (setq-local treesit-font-lock-settings go-ts-mode--font-lock-settings)
+ (setq-local treesit-font-lock-feature-list
+ '(( comment)
+ ( keyword string type)
+ ( constant escape-sequence function label number
+ property variable)
+ ( bracket delimiter error operator)))
+
+ (treesit-major-mode-setup)))
+
+;; go.mod support.
+
+(defvar go-mod-ts-mode--syntax-table
+ (let ((table (make-syntax-table)))
+ (modify-syntax-entry ?/ ". 124b" table)
+ (modify-syntax-entry ?\n "> b" table)
+ table)
+ "Syntax table for `go-mod-ts-mode'.")
+
+(defvar go-mod-ts-mode--indent-rules
+ `((gomod
+ ((node-is ")") parent-bol 0)
+ ((parent-is "exclude_directive") parent-bol go-ts-mode-indent-offset)
+ ((parent-is "module_directive") parent-bol go-ts-mode-indent-offset)
+ ((parent-is "replace_directive") parent-bol go-ts-mode-indent-offset)
+ ((parent-is "require_directive") parent-bol go-ts-mode-indent-offset)
+ ((parent-is "retract_directive") parent-bol go-ts-mode-indent-offset)
+ ((go-mod-ts-mode--in-directive-p) no-indent go-ts-mode-indent-offset)
+ (no-node no-indent 0)))
+ "Tree-sitter indent rules for `go-mod-ts-mode'.")
+
+(defun go-mod-ts-mode--in-directive-p ()
+ "Return non-nil if inside a directive.
+When entering an empty directive or adding a new entry to one, no node
+will be present meaning none of the indentation rules will match,
+because there is no parent to match against. This function determines
+what the parent of the node would be if it were a node."
+ (lambda (node _ _ &rest _)
+ (unless (treesit-node-type node)
+ (save-excursion
+ (backward-up-list)
+ (back-to-indentation)
+ (pcase (treesit-node-type (treesit-node-at (point)))
+ ("exclude" t)
+ ("module" t)
+ ("replace" t)
+ ("require" t)
+ ("retract" t))))))
+
+(defvar go-mod-ts-mode--keywords
+ '("exclude" "go" "module" "replace" "require" "retract")
+ "go.mod keywords for tree-sitter font-locking.")
+
+(defvar go-mod-ts-mode--font-lock-settings
+ (treesit-font-lock-rules
+ :language 'gomod
+ :feature 'bracket
+ '((["(" ")"]) @font-lock-bracket-face)
+
+ :language 'gomod
+ :feature 'comment
+ '((comment) @font-lock-comment-face)
+
+ :language 'gomod
+ :feature 'keyword
+ `([,@go-mod-ts-mode--keywords] @font-lock-keyword-face)
+
+ :language 'gomod
+ :feature 'number
+ '([(go_version) (version)] @font-lock-number-face)
+
+ :language 'gomod
+ :feature 'operator
+ '((["=>"]) @font-lock-operator-face)
+
+ :language 'gomod
+ :feature 'error
+ :override t
+ '((ERROR) @font-lock-warning-face))
+ "Tree-sitter font-lock settings for `go-mod-ts-mode'.")
+
+;;;###autoload
+(add-to-list 'auto-mode-alist '("/go\\.mod\\'" . go-mod-ts-mode))
+
+;;;###autoload
+(define-derived-mode go-mod-ts-mode prog-mode "Go Mod"
+ "Major mode for editing go.mod files, powered by tree-sitter."
+ :group 'go
+ :syntax-table go-mod-ts-mode--syntax-table
+
+ (when (treesit-ready-p 'gomod)
+ (treesit-parser-create 'gomod)
+
+ ;; Comments.
+ (setq-local comment-start "// ")
+ (setq-local comment-end "")
+ (setq-local comment-start-skip (rx "//" (* (syntax whitespace))))
+
+ ;; Indent.
+ (setq-local indent-tabs-mode t
+ treesit-simple-indent-rules go-mod-ts-mode--indent-rules)
+
+ ;; Font-lock.
+ (setq-local treesit-font-lock-settings go-mod-ts-mode--font-lock-settings)
+ (setq-local treesit-font-lock-feature-list
+ '((comment)
+ (keyword)
+ (number)
+ (bracket error operator)))
+
+ (treesit-major-mode-setup)))
+
+(provide 'go-ts-mode)
+
+;;; go-ts-mode.el ends here
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 2446e86abbe..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>
@@ -1254,6 +1254,10 @@ or not."
nil default-directory t))
(confirm (equal current-prefix-arg '(4))))
(list regexp files dir confirm))))))
+ ;; If called non-interactively, also compute the defaults if we
+ ;; haven't already.
+ (unless grep-find-template
+ (grep-compute-defaults))
(when (and (stringp regexp) (> (length regexp) 0))
(unless (and dir (file-accessible-directory-p dir))
(setq dir default-directory))
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 143fa8c6798..cb766c68411 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 cd2fc7c7079..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>
@@ -133,7 +133,7 @@
;; limited to comments only and occurs only when a comment
;; paragraph is filled via `idlwave-fill-paragraph'.
;;
-;; Muti-statement lines (using "&") on block begin and end lines can
+;; Multi-statement lines (using "&") on block begin and end lines can
;; ruin the formatting. For example, multiple end statements on a
;; line: endif & endif. Using "&" outside of block begin/end lines
;; should be okay.
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 2c42505ac94..96d8045bd61 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>
@@ -9,19 +9,18 @@
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; 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.
-;; This program is distributed in the hope that it will be useful,
+;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;;
@@ -30,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
@@ -58,6 +59,11 @@
(modify-syntax-entry ?| "." table)
(modify-syntax-entry ?\' "\"" table)
(modify-syntax-entry ?\240 "." table)
+ (modify-syntax-entry ?/ ". 124b" table)
+ (modify-syntax-entry ?* ". 23" table)
+ (modify-syntax-entry ?\n "> b" table)
+ (modify-syntax-entry ?\^m "> b" table)
+ (modify-syntax-entry ?@ "'" table)
table)
"Syntax table for `java-ts-mode'.")
@@ -67,8 +73,10 @@
((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)
((parent-is "constructor_body") parent-bol java-ts-mode-indent-offset)
@@ -81,6 +89,7 @@
((parent-is "method_invocation") parent-bol java-ts-mode-indent-offset)
((parent-is "switch_rule") parent-bol java-ts-mode-indent-offset)
((parent-is "ternary_expression") parent-bol java-ts-mode-indent-offset)
+ ((parent-is "lambda_expression") parent-bol java-ts-mode-indent-offset)
((parent-is "element_value_array_initializer") parent-bol java-ts-mode-indent-offset)
((parent-is "function_definition") parent-bol 0)
((parent-is "conditional_expression") first-sibling 0)
@@ -114,14 +123,14 @@
"static" "strictfp" "switch" "synchronized"
"throw" "throws" "to" "transient" "transitive"
"try" "uses" "volatile" "while" "with" "record")
- "C keywords for tree-sitter font-locking.")
+ "Java keywords for tree-sitter font-locking.")
(defvar java-ts-mode--operators
'("+" ":" "++" "-" "--" "&" "&&" "|" "||" "="
"!=" "==" "*" "/" "%" "<" "<=" ">" ">="
"-=" "+=" "*=" "/=" "%=" "->" "^" "^="
"|=" "~" ">>" ">>>" "<<" "::" "?" "&=")
- "C operators for tree-sitter font-locking.")
+ "Java operators for tree-sitter font-locking.")
(defvar java-ts-mode--font-lock-settings
(treesit-font-lock-rules
@@ -139,9 +148,10 @@
:language 'java
:override t
:feature 'keyword
- `([,@java-ts-mode--keywords] @font-lock-keyword-face
- (labeled_statement
- (identifier) @font-lock-keyword-face))
+ `([,@java-ts-mode--keywords
+ (this)] @font-lock-keyword-face
+ (labeled_statement
+ (identifier) @font-lock-keyword-face))
:language 'java
:override t
:feature 'operator
@@ -158,7 +168,8 @@
:language 'java
:override t
:feature 'string
- `((string_literal) @font-lock-string-face)
+ `((string_literal) @font-lock-string-face
+ (text_block) @font-lock-string-face)
:language 'java
:override t
:feature 'literal
@@ -229,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
@@ -238,54 +251,23 @@
:language 'java
:feature 'delimiter
'((["," ":" ";"]) @font-lock-delimiter-face))
- "Tree-sitter font-lock settings.")
-
-(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))))))
+ "Tree-sitter font-lock settings for `java-ts-mode'.")
+
+(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"
@@ -299,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)
;; Indent.
(setq-local treesit-simple-indent-rules java-ts-mode--indent-rules)
@@ -317,7 +291,16 @@ the subtrees."
(append "{}():;," electric-indent-chars))
;; Navigation.
- (setq-local treesit-defun-type-regexp "declaration")
+ (setq-local treesit-defun-type-regexp
+ (regexp-opt '("method_declaration"
+ "class_declaration"
+ "record_declaration"
+ "interface_declaration"
+ "enum_declaration"
+ "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)
@@ -328,8 +311,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 389096147ac..050472002bb 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
@@ -686,7 +689,7 @@ This variable is like `sgml-attribute-offset'."
(modify-syntax-entry ?$ "_" table)
(modify-syntax-entry ?` "\"" table)
table)
- "Syntax table for `js-mode'.")
+ "Syntax table for `js-mode' and `js-ts-mode'.")
(defvar-local js--quick-match-re nil
"Autogenerated regexp used by `js-mode' to match buffer constructs.")
@@ -1928,7 +1931,7 @@ This performs fontification according to `js--class-styles'."
;; identified as such), then the `syntax-propertize' region won’t be
;; extended backwards to the start of the JSXOpeningElement:
;;
-;; <div ↠This line wasn’t JSX when last edited.
+;; <div ↠This line wasn't JSX when last edited.
;; attr=""> ↠Despite completing the JSX, the next
;; ^ `syntax-propertize' region wouldn’t magically
;; extend back a few lines.
@@ -2090,7 +2093,7 @@ JSXElement or a JSXOpeningElement/JSXClosingElement pair."
;; JSXOpeningElement has been found, so keep
;; looking backwards for an enclosing one).
(or (not close-tag-pos) (<= start close-tag-pos)))))))))
- ;; Don’t return the last tag pos, as it wasn’t enclosing.
+ ;; Don't return the last tag pos, as it wasn't enclosing.
(setq tag-beg nil close-tag-pos nil))
(and tag-beg (list tag-beg-pos tag-end-pos close-tag-pos))))
@@ -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)
@@ -3445,17 +3448,19 @@ This function is intended for use in `after-change-functions'."
((parent-is "pair") parent-bol js-indent-level)
((parent-is "arrow_function") parent-bol js-indent-level)
((parent-is "parenthesized_expression") parent-bol js-indent-level)
+ ((parent-is "binary_expression") parent-bol js-indent-level)
((parent-is "class_body") parent-bol js-indent-level)
((parent-is ,switch-case) parent-bol js-indent-level)
((parent-is "statement_block") parent-bol js-indent-level)
;; JSX
- ((parent-is "jsx_opening_element") parent js-indent-level)
+ ((node-is "jsx_fragment") parent typescript-ts-mode-indent-offset)
+ ((node-is "jsx_element") parent typescript-ts-mode-indent-offset)
+ ((node-is "jsx_expression") parent typescript-ts-mode-indent-offset)
+ ((node-is "jsx_self_closing_element") parent typescript-ts-mode-indent-offset)
((node-is "jsx_closing_element") parent 0)
- ((node-is "jsx_text") parent js-indent-level)
- ((parent-is "jsx_element") parent js-indent-level)
((node-is "/") parent 0)
- ((parent-is "jsx_self_closing_element") parent js-indent-level)))))
+ ((node-is ">") parent 0)))))
(defvar js--treesit-keywords
'("as" "async" "await" "break" "case" "catch" "class" "const" "continue"
@@ -3476,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
@@ -3517,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)
@@ -3532,48 +3545,39 @@ 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)
+ :feature 'property
+ '(((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)
- (for_in_statement
- left: (identifier) @font-lock-variable-name-face)
+ ((shorthand_property_identifier) @font-lock-property-face)
- (arrow_function
- parameter: (identifier) @font-lock-variable-name-face))
+ ((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)
@@ -3591,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)))
@@ -3611,18 +3615,7 @@ This function is intended for use in `after-change-functions'."
:language 'javascript
:feature 'escape-sequence
:override t
- '((escape_sequence) @font-lock-escape-face)
-
- :language 'javascript
- :override t
- :feature 'property
- `((property_identifier) @font-lock-property-face
-
- (pair value: (identifier) @font-lock-variable-name-face)
-
- ((shorthand_property_identifier) @font-lock-property-face)
-
- ((shorthand_property_identifier_pattern) @font-lock-property-face)))
+ '((escape_sequence) @font-lock-escape-face))
"Tree-sitter font-lock settings.")
(defun js--fontify-template-string (node override start end &rest _)
@@ -3647,95 +3640,54 @@ OVERRIDE is the override flag described in
(setq font-beg (max start font-beg))
(when (< font-beg end)
(treesit-fontify-with-override
- font-beg font-end 'font-lock-string-face override)))
+ font-beg font-end 'font-lock-string-face override start end)))
(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))
- ("Varieable" . ,(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
@@ -3840,6 +3792,7 @@ Currently there are `js-mode' and `js-ts-mode'."
\\<js-ts-mode-map>"
:group 'js
+ :syntax-table js-mode-syntax-table
(when (treesit-ready-p 'javascript)
;; Borrowed from `js-mode'.
(setq-local prettify-symbols-alist js--prettify-symbols-alist)
@@ -3847,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)
;; Electric-indent.
(setq-local electric-indent-chars
@@ -3868,24 +3813,30 @@ Currently there are `js-mode' and `js-ts-mode'."
;; Indent.
(setq-local treesit-simple-indent-rules js--treesit-indent-rules)
;; Navigation.
+ (setq-local treesit-defun-prefer-top-level t)
(setq-local treesit-defun-type-regexp
(rx (or "class_declaration"
"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 101e873cf6e..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>
@@ -9,19 +9,18 @@
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; 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.
-;; This program is distributed in the hope that it will be useful,
+;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;;
@@ -34,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")
@@ -46,9 +46,7 @@
(defvar json-ts-mode--syntax-table
(let ((table (make-syntax-table)))
- ;; Taken from the cc-langs version
(modify-syntax-entry ?_ "_" table)
- (modify-syntax-entry ?$ "_" table)
(modify-syntax-entry ?\\ "\\" table)
(modify-syntax-entry ?+ "." table)
(modify-syntax-entry ?- "." table)
@@ -58,8 +56,12 @@
(modify-syntax-entry ?> "." table)
(modify-syntax-entry ?& "." table)
(modify-syntax-entry ?| "." table)
- (modify-syntax-entry ?` "\"" table)
+ (modify-syntax-entry ?\' "\"" table)
(modify-syntax-entry ?\240 "." table)
+ (modify-syntax-entry ?/ ". 124b" table)
+ (modify-syntax-entry ?* ". 23" table)
+ (modify-syntax-entry ?\n "> b" table)
+ (modify-syntax-entry ?\^m "> b" table)
table)
"Syntax table for `json-ts-mode'.")
@@ -69,11 +71,15 @@
((node-is "}") parent-bol 0)
((node-is ")") parent-bol 0)
((node-is "]") parent-bol 0)
- ((parent-is "object") parent-bol json-ts-mode-indent-offset))))
+ ((parent-is "object") parent-bol json-ts-mode-indent-offset)
+ ((parent-is "array") parent-bol json-ts-mode-indent-offset))))
(defvar json-ts-mode--font-lock-settings
(treesit-font-lock-rules
:language 'json
+ :feature 'comment
+ '((comment) @font-lock-comment-face)
+ :language 'json
:feature 'bracket
'((["[" "]" "{" "}"]) @font-lock-bracket-face)
:language 'json
@@ -93,38 +99,25 @@
:override t
'((escape_sequence) @font-lock-escape-face)
:language 'json
+ :feature 'pair
+ :override t ; Needed for overriding string face on keys.
+ '((pair key: (_) @font-lock-variable-name-face))
+ :language 'json
:feature 'error
:override t
'((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"
@@ -152,17 +145,18 @@ 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)
(setq-local treesit-font-lock-feature-list
- '((constant number string)
+ '((comment constant number pair string)
(escape-sequence)
(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 58cb48f1829..0f3a477abe5 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
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 38d4fdad5fc..730998727ce 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -1,7 +1,7 @@
;;; project.el --- Operations on the current project -*- lexical-binding: t; -*-
-;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
-;; Version: 0.9.2
+;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
+;; Version: 0.9.3
;; Package-Requires: ((emacs "26.1") (xref "1.4.0"))
;; This is a GNU ELPA :core package. Avoid using functionality that
@@ -174,6 +174,7 @@
;;; Code:
(require 'cl-generic)
+(require 'cl-lib)
(require 'seq)
(eval-when-compile (require 'subr-x))
@@ -515,7 +516,8 @@ project backend implementation of `project-external-roots'.")
(marker-re
(mapconcat
(lambda (m) (format "\\(%s\\)" (wildcard-to-regexp m)))
- (append backend-markers project-vc-extra-root-markers)
+ (append backend-markers
+ (project--value-in-dir 'project-vc-extra-root-markers dir))
"\\|"))
(locate-dominating-stop-dir-regexp
(or vc-ignore-dir-regexp locate-dominating-stop-dir-regexp))
@@ -535,7 +537,7 @@ project backend implementation of `project-external-roots'.")
project)
(when (and
(eq backend 'Git)
- project-vc-merge-submodules
+ (project--vc-merge-submodules-p root)
(project--submodule-p root))
(let* ((parent (file-name-directory (directory-file-name root))))
(setq root (vc-call-backend 'Git 'root parent))))
@@ -582,7 +584,7 @@ project backend implementation of `project-external-roots'.")
(cl-defmethod project-files ((project (head vc)) &optional dirs)
(mapcan
(lambda (dir)
- (let ((ignores project-vc-ignores)
+ (let ((ignores (project--value-in-dir 'project-vc-ignores (nth 2 project)))
(backend (cadr project)))
(when backend
(require (intern (concat "vc-" (downcase (symbol-name backend))))))
@@ -608,13 +610,16 @@ project backend implementation of `project-external-roots'.")
(defvar vc-git-use-literal-pathspecs)
(pcase backend
(`Git
- (let ((default-directory (expand-file-name (file-name-as-directory dir)))
- (args '("-z"))
- (vc-git-use-literal-pathspecs nil)
- files)
+ (let* ((default-directory (expand-file-name (file-name-as-directory dir)))
+ (args '("-z"))
+ (vc-git-use-literal-pathspecs nil)
+ (include-untracked (project--value-in-dir
+ 'project-vc-include-untracked
+ dir))
+ files)
(setq args (append args
'("-c" "--exclude-standard")
- (and project-vc-include-untracked '("-o"))))
+ (and include-untracked '("-o"))))
(when extra-ignores
(setq args (append args
(cons "--"
@@ -647,7 +652,7 @@ project backend implementation of `project-external-roots'.")
(split-string
(apply #'vc-git--run-command-string nil "ls-files" args)
"\0" t)))
- (when project-vc-merge-submodules
+ (when (project--vc-merge-submodules-p default-directory)
;; Unfortunately, 'ls-files --recurse-submodules' conflicts with '-o'.
(let* ((submodules (project--git-submodules))
(sub-files
@@ -665,10 +670,13 @@ project backend implementation of `project-external-roots'.")
;; XXX: Better solutions welcome, but this seems cheap enough.
(delete-consecutive-dups files)))
(`Hg
- (let ((default-directory (expand-file-name (file-name-as-directory dir)))
- (args (list (concat "-mcard" (and project-vc-include-untracked "u"))
- "--no-status"
- "-0")))
+ (let* ((default-directory (expand-file-name (file-name-as-directory dir)))
+ (include-untracked (project--value-in-dir
+ 'project-vc-include-untracked
+ dir))
+ (args (list (concat "-mcard" (and include-untracked "u"))
+ "--no-status"
+ "-0")))
(when extra-ignores
(setq args (nconc args
(mapcan
@@ -681,6 +689,11 @@ project backend implementation of `project-external-roots'.")
(lambda (s) (concat default-directory s))
(split-string (buffer-string) "\0" t)))))))
+(defun project--vc-merge-submodules-p (dir)
+ (project--value-in-dir
+ 'project-vc-merge-submodules
+ dir))
+
(defun project--git-submodules ()
;; 'git submodule foreach' is much slower.
(condition-case nil
@@ -722,7 +735,7 @@ project backend implementation of `project-external-roots'.")
(condition-case nil
(vc-call-backend backend 'ignore-completion-table root)
(vc-not-supported () nil)))))
- project-vc-ignores
+ (project--value-in-dir 'project-vc-ignores root)
(mapcar
(lambda (dir)
(concat dir "/"))
@@ -753,9 +766,16 @@ DIRS must contain directory names."
;; Sidestep the issue of expanded/abbreviated file names here.
(cl-set-difference files dirs :test #'file-in-directory-p))
+(defun project--value-in-dir (var dir)
+ (with-temp-buffer
+ (setq default-directory dir)
+ (let ((enable-local-variables :all))
+ (hack-dir-local-variables-non-file-buffer))
+ (symbol-value var)))
+
(cl-defmethod project-buffers ((project (head vc)))
(let* ((root (expand-file-name (file-name-as-directory (project-root project))))
- (modules (unless (or project-vc-merge-submodules
+ (modules (unless (or (project--vc-merge-submodules-p root)
(project--submodule-p root))
(mapcar
(lambda (m) (format "%s%s/" root m))
@@ -1019,7 +1039,16 @@ by the user at will."
(_ (when included-cpd
(setq substrings (cons "./" substrings))))
(new-collection (project--file-completion-table substrings))
- (relname (let ((history-add-new-input nil))
+ (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)
+ (not (eq abbr-cpd-length (length s)))
+ (list (substring s abbr-cpd-length))))
+ (symbol-value hist))))
(project--completing-read-strict prompt
new-collection
predicate
@@ -1321,18 +1350,33 @@ By default, all project buffers are listed except those whose names
start with a space (which are for internal use). With prefix argument
ARG, show only buffers that are visiting files."
(interactive "P")
- (let ((pr (project-current t)))
+ (let* ((pr (project-current t))
+ (buffer-list-function
+ (lambda ()
+ (seq-filter
+ (lambda (buffer)
+ (let ((name (buffer-name buffer))
+ (file (buffer-file-name buffer)))
+ (and (or (not (string= (substring name 0 1) " "))
+ file)
+ (not (eq buffer (current-buffer)))
+ (or file (not Buffer-menu-files-only)))))
+ (project-buffers pr)))))
(display-buffer
(if (version< emacs-version "29.0.50")
- (let ((buf (list-buffers-noselect arg (project-buffers pr))))
+ (let ((buf (list-buffers-noselect
+ arg (with-current-buffer
+ (get-buffer-create "*Buffer List*")
+ (let ((Buffer-menu-files-only arg))
+ (funcall buffer-list-function))))))
(with-current-buffer buf
(setq-local revert-buffer-function
(lambda (&rest _ignored)
- (list-buffers--refresh (project-buffers pr))
+ (list-buffers--refresh
+ (funcall buffer-list-function))
(tabulated-list-print t))))
buf)
- (list-buffers-noselect
- arg nil (lambda (buf) (memq buf (project-buffers pr))))))))
+ (list-buffers-noselect arg buffer-list-function)))))
(defcustom project-kill-buffer-conditions
'(buffer-file-name ; All file-visiting buffers are included.
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 4fc5d24e2fb..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
@@ -993,7 +993,8 @@ It makes underscores and dots word constituent chars.")
(defvar python--treesit-operators
'("-" "-=" "!=" "*" "**" "**=" "*=" "/" "//" "//=" "/=" "&" "%" "%="
- "^" "+" "+=" "<" "<<" "<=" "<>" "=" "==" ">" ">=" ">>" "|" "~" "@" "@="))
+ "^" "+" "->" "+=" "<" "<<" "<=" "<>" "=" ":=" "==" ">" ">=" ">>" "|"
+ "~" "@" "@="))
(defvar python--treesit-special-attributes
'("__annotations__" "__closure__" "__code__"
@@ -1069,7 +1070,7 @@ fontified."
(when (eq (char-after string-beg) ?f)
(cl-incf string-beg))
(treesit-fontify-with-override
- (max start string-beg) (min end string-end) face override)))
+ string-beg string-end face override start end)))
(defvar python--treesit-settings
(treesit-font-lock-rules
@@ -1079,7 +1080,6 @@ fontified."
:feature 'string
:language 'python
- :override t
'((string) @python--treesit-fontify-string)
:feature 'string-interpolation
@@ -1094,6 +1094,12 @@ fontified."
(class_definition
name: (identifier) @font-lock-type-face))
+ :feature 'function
+ :language 'python
+ '((call function: (identifier) @font-lock-function-name-face)
+ (call function: (attribute
+ attribute: (identifier) @font-lock-function-name-face)))
+
:feature 'keyword
:language 'python
`([,@python--treesit-keywords] @font-lock-keyword-face
@@ -1121,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)
@@ -1153,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
@@ -1169,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
@@ -3708,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)
@@ -3744,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)))
@@ -3788,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)
@@ -4531,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)
@@ -5439,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.
@@ -5464,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)))))
@@ -6563,19 +6617,21 @@ implementations: `python-mode' and `python-ts-mode'."
(add-function :before-until (local 'eldoc-documentation-function)
#'python-eldoc-function))))
- (add-to-list
- 'hs-special-modes-alist
- `(python-mode
- ,python-nav-beginning-of-block-regexp
- ;; Use the empty string as end regexp so it doesn't default to
- ;; "\\s)". This way parens at end of defun are properly hidden.
- ""
- "#"
- python-hideshow-forward-sexp-function
- nil
- python-nav-beginning-of-block
- python-hideshow-find-next-block
- python-info-looking-at-beginning-of-block))
+ ;; TODO: Use tree-sitter to figure out the block in `python-ts-mode'.
+ (dolist (mode '(python-mode python-ts-mode))
+ (add-to-list
+ 'hs-special-modes-alist
+ `(,mode
+ ,python-nav-beginning-of-block-regexp
+ ;; Use the empty string as end regexp so it doesn't default to
+ ;; "\\s)". This way parens at end of defun are properly hidden.
+ ""
+ "#"
+ python-hideshow-forward-sexp-function
+ nil
+ python-nav-beginning-of-block
+ python-hideshow-find-next-block
+ python-info-looking-at-beginning-of-block)))
(setq-local outline-regexp (python-rx (* space) block-start))
(setq-local outline-level
@@ -6618,6 +6674,7 @@ implementations: `python-mode' and `python-ts-mode'."
"Major mode for editing Python files, using tree-sitter library.
\\{python-ts-mode-map}"
+ :syntax-table python-mode-syntax-table
(when (treesit-ready-p 'python)
(treesit-parser-create 'python)
(setq-local treesit-font-lock-feature-list
@@ -6625,16 +6682,18 @@ implementations: `python-mode' and `python-ts-mode'."
( keyword string type)
( assignment builtin constant decorator
escape-sequence number property string-interpolation )
- ( 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
- (python-indent-guess-indent-offset))))
+ (when python-indent-guess-indent-offset
+ (python-indent-guess-indent-offset))))
;;; Completion predicates for M-x
;; Commands that only make sense when editing Python code
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 17467b55549..14cdf0a1a26 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
@@ -134,6 +134,13 @@ This should only be called after matching against `ruby-here-doc-beg-re'."
(defconst ruby-symbol-re (concat "[" ruby-symbol-chars "]")
"Regexp to match symbols.")
+(defconst ruby-endless-method-head-re
+ (format " *\\(%s+\\.\\)?%s+[?!]? *\\(([^()]*)\\)? +="
+ ruby-symbol-re ruby-symbol-re)
+ "Regexp to match the beginning of an endless method definition.
+
+It should match the part after \"def\" and until \"=\".")
+
(defvar ruby-use-smie t)
(make-obsolete-variable 'ruby-use-smie nil "28.1")
@@ -205,7 +212,7 @@ This should only be called after matching against `ruby-here-doc-beg-re'."
: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)
@@ -261,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'.
@@ -351,7 +465,8 @@ This only affects the output of the command `ruby-toggle-block'."
(exp (exp1) (exp "," exp) (exp "=" exp)
(id " @ " exp))
(exp1 (exp2) (exp2 "?" exp1 ":" exp1))
- (exp2 (exp3) (exp3 "." exp3))
+ (exp2 (exp3) (exp3 "." exp3)
+ (exp3 "def=" exp3))
(exp3 ("def" insts "end")
("begin" insts-rescue-insts "end")
("do" insts "end")
@@ -391,6 +506,7 @@ This only affects the output of the command `ruby-toggle-block'."
'((right "=")
(right "+=" "-=" "*=" "/=" "%=" "**=" "&=" "|=" "^="
"<<=" ">>=" "&&=" "||=")
+ (right "?")
(nonassoc ".." "...")
(left "&&" "||")
(nonassoc "<=>")
@@ -468,7 +584,7 @@ This only affects the output of the command `ruby-toggle-block'."
"else" "elsif" "do" "end" "and")
'symbols))))
(memq (car (syntax-after pos)) '(7 15))
- (looking-at "[([]\\|[-+!~:]\\(?:\\sw\\|\\s_\\)")))))
+ (looking-at "[([]\\|[-+!~:@$]\\(?:\\sw\\|\\s_\\)")))))
(defun ruby-smie--before-method-name ()
;; Only need to be accurate when method has keyword name.
@@ -528,6 +644,9 @@ This only affects the output of the command `ruby-toggle-block'."
(ruby-smie--forward-token)) ;Fully redundant.
(t ";")))
((equal tok "&.") ".")
+ ((and (equal tok "def")
+ (looking-at ruby-endless-method-head-re))
+ "def=")
(t tok)))))))))
(defun ruby-smie--backward-token ()
@@ -575,12 +694,15 @@ This only affects the output of the command `ruby-toggle-block'."
(ruby-smie--backward-token)) ;Fully redundant.
(t ";")))
((equal tok "&.") ".")
+ ((and (equal tok "def")
+ (looking-at (concat "def" ruby-endless-method-head-re)))
+ "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)
@@ -611,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
@@ -629,6 +753,11 @@ This only affects the output of the command `ruby-toggle-block'."
(not (ruby-smie--bosp)))
(forward-char -1))
(smie-indent-virtual))
+ ((save-excursion
+ (and (smie-rule-parent-p " @ ")
+ (goto-char (nth 1 (smie-indent--parent)))
+ (smie-rule-prev-p "def=")
+ (cons 'column (- (current-column) 3)))))
(t (smie-rule-parent))))))
(`(:after . ,(or "(" "[" "{"))
;; FIXME: Shouldn't this be the default behavior of
@@ -641,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
@@ -657,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"))
@@ -669,10 +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))
- (`(:after . ,(or "?" ":")) 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 "?" ":"))
+ (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)
@@ -680,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
@@ -1375,9 +1531,10 @@ With ARG, move backward multiple defuns. Negative ARG means
move forward."
(interactive "p")
(let (case-fold-search)
- (and (re-search-backward (concat "^\\s *" ruby-defun-beg-re "\\_>")
- nil t (or arg 1))
- (beginning-of-line))))
+ (when (re-search-backward (concat "^\\s *" ruby-defun-beg-re "\\_>")
+ nil t (or arg 1))
+ (beginning-of-line)
+ t)))
(defun ruby-end-of-defun ()
"Move point to the end of the current defun.
@@ -1611,7 +1768,8 @@ For example:
See `add-log-current-defun-function'."
(condition-case nil
(save-excursion
- (let* ((indent 0) mname mlist
+ (let* ((indent (ruby--add-log-current-indent))
+ mname mlist
(start (point))
(make-definition-re
(lambda (re &optional method-name?)
@@ -1626,18 +1784,30 @@ See `add-log-current-defun-function'."
(definition-re (funcall make-definition-re ruby-defun-beg-re t))
(module-re (funcall make-definition-re "\\(class\\|module\\)")))
;; Get the current method definition (or class/module).
- (when (re-search-backward definition-re nil t)
+ (when (catch 'found
+ (while (and (re-search-backward definition-re nil t)
+ (if (if (string-equal "def" (match-string 1))
+ ;; We're inside a method.
+ (if (ruby-block-contains-point (1- start))
+ t
+ ;; Try to match a method only once.
+ (setq definition-re module-re)
+ nil)
+ ;; Class/module. For performance,
+ ;; comparing indentation.
+ (or (not (numberp indent))
+ (> indent (current-indentation))))
+ (throw 'found t)
+ t))))
(goto-char (match-beginning 1))
(if (not (string-equal "def" (match-string 1)))
(setq mlist (list (match-string 2)))
- ;; We're inside the method. For classes and modules,
- ;; this check is skipped for performance.
- (when (ruby-block-contains-point start)
- (setq mname (match-string 2))))
+ (setq mname (match-string 2)))
(setq indent (current-column))
(beginning-of-line))
;; Walk up the class/module nesting.
- (while (and (> indent 0)
+ (while (and indent
+ (> indent 0)
(re-search-backward module-re nil t))
(goto-char (match-beginning 1))
(when (< (current-column) indent)
@@ -1691,6 +1861,17 @@ See `add-log-current-defun-function'."
(ruby-forward-sexp))
(> (point) pt))))
+(defun ruby--add-log-current-indent ()
+ (save-excursion
+ (back-to-indentation)
+ (cond
+ ((looking-at "[[:graph:]]")
+ (current-indentation))
+ (ruby-use-smie
+ (smie-indent-calculate))
+ (t
+ (ruby-calculate-indent)))))
+
(defun ruby-brace-to-do-end (orig end)
(let (beg-marker end-marker)
(goto-char end)
@@ -1829,7 +2010,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)
diff --git a/lisp/progmodes/ruby-ts-mode.el b/lisp/progmodes/ruby-ts-mode.el
new file mode 100644
index 00000000000..96596cb5daf
--- /dev/null
+++ b/lisp/progmodes/ruby-ts-mode.el
@@ -0,0 +1,947 @@
+;;; 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))
+ (keyword (treesit-node-type pred-node))
+ (bol (ruby-smie--indent-to-stmt-p keyword)))
+ (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") (ruby-ts--bol ruby-ts--grand-parent-node) 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 (treesit-parent-until node (ruby-ts--type-pred ruby-ts--method-regex)))
+ (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 prog-mode "Ruby"
+ "Major mode for editing Ruby, powered by tree-sitter."
+ :group 'ruby
+ :syntax-table ruby-mode-syntax-table
+
+ (setq indent-tabs-mode ruby-indent-tabs-mode)
+
+ (setq-local paragraph-start (concat "$\\|" page-delimiter))
+ (setq-local paragraph-separate paragraph-start)
+ (setq-local paragraph-ignore-fill-prefix t)
+
+ (setq-local comment-start "# ")
+ (setq-local comment-end "")
+ (setq-local comment-start-skip "#+ *")
+
+ (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
new file mode 100644
index 00000000000..7536726165e
--- /dev/null
+++ b/lisp/progmodes/rust-ts-mode.el
@@ -0,0 +1,327 @@
+;;; rust-ts-mode.el --- tree-sitter support for Rust -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
+
+;; Author : Randy Taylor <dev@rjt.dev>
+;; Maintainer : Randy Taylor <dev@rjt.dev>
+;; Created : December 2022
+;; Keywords : rust 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:
+;;
+
+;;; Code:
+
+(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-child "treesit.c")
+(declare-function treesit-node-child-by-field-name "treesit.c")
+(declare-function treesit-node-start "treesit.c")
+(declare-function treesit-node-type "treesit.c")
+
+(defcustom rust-ts-mode-indent-offset 4
+ "Number of spaces for each indentation step in `rust-ts-mode'."
+ :version "29.1"
+ :type 'integer
+ :safe 'integerp
+ :group 'rust)
+
+(defvar rust-ts-mode--syntax-table
+ (let ((table (make-syntax-table)))
+ (modify-syntax-entry ?+ "." table)
+ (modify-syntax-entry ?- "." table)
+ (modify-syntax-entry ?= "." table)
+ (modify-syntax-entry ?% "." table)
+ (modify-syntax-entry ?& "." table)
+ (modify-syntax-entry ?| "." table)
+ (modify-syntax-entry ?^ "." table)
+ (modify-syntax-entry ?! "." table)
+ (modify-syntax-entry ?@ "." table)
+ (modify-syntax-entry ?~ "." table)
+ (modify-syntax-entry ?< "." table)
+ (modify-syntax-entry ?> "." table)
+ (modify-syntax-entry ?/ ". 124b" table)
+ (modify-syntax-entry ?* ". 23" table)
+ (modify-syntax-entry ?\n "> b" table)
+ (modify-syntax-entry ?\^m "> b" table)
+ table)
+ "Syntax table for `rust-ts-mode'.")
+
+(defvar rust-ts-mode--indent-rules
+ `((rust
+ ((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)
+ ((parent-is "binary_expression") parent-bol rust-ts-mode-indent-offset)
+ ((parent-is "block") parent-bol rust-ts-mode-indent-offset)
+ ((parent-is "declaration_list") parent-bol rust-ts-mode-indent-offset)
+ ((parent-is "enum_variant_list") parent-bol rust-ts-mode-indent-offset)
+ ((parent-is "field_declaration_list") parent-bol rust-ts-mode-indent-offset)
+ ((parent-is "field_expression") parent-bol rust-ts-mode-indent-offset)
+ ((parent-is "field_initializer_list") parent-bol rust-ts-mode-indent-offset)
+ ((parent-is "let_declaration") parent-bol rust-ts-mode-indent-offset)
+ ((parent-is "macro_definition") parent-bol rust-ts-mode-indent-offset)
+ ((parent-is "parameters") parent-bol rust-ts-mode-indent-offset)
+ ((parent-is "token_tree") parent-bol rust-ts-mode-indent-offset)
+ ((parent-is "use_list") parent-bol rust-ts-mode-indent-offset)))
+ "Tree-sitter indent rules for `rust-ts-mode'.")
+
+(defvar rust-ts-mode--builtin-macros
+ '("concat_bytes" "concat_idents" "const_format_args"
+ "format_args_nl" "log_syntax" "trace_macros" "assert" "assert_eq"
+ "assert_ne" "cfg" "column" "compile_error" "concat" "dbg"
+ "debug_assert" "debug_assert_eq" "debug_assert_ne" "env" "eprint"
+ "eprintln" "file" "format" "format_args" "include" "include_bytes"
+ "include_str" "is_x86_feature_detected" "line" "matches"
+ "module_path" "option_env" "panic" "print" "println" "stringify"
+ "thread_local" "todo" "try" "unimplemented" "unreachable" "vec"
+ "write" "writeln")
+ "Rust built-in macros for tree-sitter font-locking.")
+
+(defvar rust-ts-mode--keywords
+ '("as" "async" "await" "break" "const" "continue" "dyn" "else"
+ "enum" "extern" "fn" "for" "if" "impl" "in" "let" "loop" "match"
+ "mod" "move" "pub" "ref" "return" "static" "struct" "trait" "type"
+ "union" "unsafe" "use" "where" "while" (crate) (self) (super)
+ (mutable_specifier))
+ "Rust keywords for tree-sitter font-locking.")
+
+(defvar rust-ts-mode--operators
+ '("!" "!=" "%" "%=" "&" "&=" "&&" "*" "*=" "+" "+=" "," "-" "-="
+ "->" "." ".." "..=" "..." "/" "/=" ":" ";" "<<" "<<=" "<" "<="
+ "=" "==" "=>" ">" ">=" ">>" ">>=" "@" "^" "^=" "|" "|=" "||" "?")
+ "Rust operators for tree-sitter font-locking.")
+
+(defvar rust-ts-mode--font-lock-settings
+ (treesit-font-lock-rules
+ :language 'rust
+ :feature 'attribute
+ '((attribute_item) @font-lock-constant-face
+ (inner_attribute_item) @font-lock-constant-face)
+
+ :language 'rust
+ :feature 'bracket
+ '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face)
+
+ :language 'rust
+ :feature 'builtin
+ `((macro_invocation
+ macro: ((identifier) @font-lock-builtin-face
+ (:match ,(rx-to-string
+ `(seq bol
+ (or ,@rust-ts-mode--builtin-macros)
+ eol))
+ @font-lock-builtin-face)))
+ ((identifier) @font-lock-type-face
+ (:match "^\\(:?Err\\|Ok\\|None\\|Some\\)$" @font-lock-type-face)))
+
+ :language 'rust
+ :feature 'comment
+ '(([(block_comment) (line_comment)]) @font-lock-comment-face)
+
+ :language 'rust
+ :feature 'constant
+ `((boolean_literal) @font-lock-constant-face
+ ((identifier) @font-lock-constant-face
+ (:match "^[A-Z][A-Z\\d_]*$" @font-lock-constant-face)))
+
+ :language 'rust
+ :feature 'delimiter
+ '((["," "." ";" ":" "::"]) @font-lock-delimiter-face)
+
+ :language 'rust
+ :feature 'function
+ '((call_expression
+ function:
+ [(identifier) @font-lock-function-name-face
+ (field_expression
+ field: (field_identifier) @font-lock-function-name-face)
+ (scoped_identifier
+ name: (identifier) @font-lock-function-name-face)])
+ (function_item (identifier) @font-lock-function-name-face)
+ (generic_function
+ function: [(identifier) @font-lock-function-name-face
+ (field_expression
+ field: (field_identifier) @font-lock-function-name-face)
+ (scoped_identifier
+ name: (identifier) @font-lock-function-name-face)])
+ (macro_definition "macro_rules!" @font-lock-constant-face)
+ (macro_definition (identifier) @font-lock-preprocessor-face)
+ (macro_invocation macro: (identifier) @font-lock-preprocessor-face))
+
+ :language 'rust
+ :feature 'keyword
+ `([,@rust-ts-mode--keywords] @font-lock-keyword-face)
+
+ :language 'rust
+ :feature 'number
+ '([(float_literal) (integer_literal)] @font-lock-number-face)
+
+ :language 'rust
+ :feature 'operator
+ `([,@rust-ts-mode--operators] @font-lock-operator-face)
+
+ :language 'rust
+ :feature 'string
+ '([(char_literal)
+ (raw_string_literal)
+ (string_literal)] @font-lock-string-face)
+
+ :language 'rust
+ :feature 'type
+ `((call_expression
+ function: (scoped_identifier
+ path: (identifier) @font-lock-type-face))
+ (enum_variant name: (identifier) @font-lock-type-face)
+ (match_arm
+ pattern: (match_pattern (_ type: (identifier) @font-lock-type-face)))
+ (match_arm
+ pattern: (match_pattern
+ (_ type: (scoped_identifier
+ path: (identifier) @font-lock-type-face))))
+ (mod_item name: (identifier) @font-lock-constant-face)
+ (primitive_type) @font-lock-type-face
+ (type_identifier) @font-lock-type-face
+ (scoped_identifier name: (identifier) @font-lock-type-face)
+ (scoped_identifier path: (identifier) @font-lock-constant-face)
+ (scoped_identifier
+ (scoped_identifier
+ path: (identifier) @font-lock-constant-face))
+ ((scoped_identifier
+ path: [(identifier) @font-lock-type-face
+ (scoped_identifier
+ name: (identifier) @font-lock-type-face)])
+ (:match "^[A-Z]" @font-lock-type-face))
+ (scoped_type_identifier path: (identifier) @font-lock-constant-face)
+ (scoped_use_list
+ path: [(identifier) @font-lock-constant-face
+ (scoped_identifier (identifier) @font-lock-constant-face)])
+ (type_identifier) @font-lock-type-face
+ (use_as_clause alias: (identifier) @font-lock-type-face)
+ (use_list (identifier) @font-lock-type-face))
+
+ :language 'rust
+ :feature 'variable
+ '((identifier) @font-lock-variable-name-face
+ ;; Everything in a token_tree is an identifier.
+ (token_tree (identifier) @default))
+
+ :language 'rust
+ :feature 'escape-sequence
+ :override t
+ '((escape_sequence) @font-lock-escape-face)
+
+ :language 'rust
+ :feature 'property
+ :override t
+ '((field_identifier) @font-lock-property-face
+ (shorthand_field_initializer (identifier) @font-lock-property-face))
+
+ :language 'rust
+ :feature 'error
+ :override t
+ '((ERROR) @font-lock-warning-face))
+ "Tree-sitter font-lock settings for `rust-ts-mode'.")
+
+(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))
+
+;;;###autoload
+(define-derived-mode rust-ts-mode prog-mode "Rust"
+ "Major mode for editing Rust, powered by tree-sitter."
+ :group 'rust
+ :syntax-table rust-ts-mode--syntax-table
+
+ (when (treesit-ready-p 'rust)
+ (treesit-parser-create 'rust)
+
+ ;; Comments.
+ (c-ts-mode-comment-setup)
+
+ ;; Font-lock.
+ (setq-local treesit-font-lock-settings rust-ts-mode--font-lock-settings)
+ (setq-local treesit-font-lock-feature-list
+ '(( comment)
+ ( keyword string)
+ ( attribute builtin constant escape-sequence
+ function number property type variable)
+ ( bracket delimiter error operator)))
+
+ ;; Imenu.
+ (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
+ treesit-simple-indent-rules rust-ts-mode--indent-rules)
+
+ ;; Navigation.
+ (setq-local treesit-defun-type-regexp
+ (regexp-opt '("enum_item"
+ "function_item"
+ "impl_item"
+ "struct_item")))
+ (setq-local treesit-defun-name-function #'rust-ts-mode--defun-name)
+
+ (treesit-major-mode-setup)))
+
+(provide 'rust-ts-mode)
+
+;;; rust-ts-mode.el ends here
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 e170d18afeb..4c06efc8146 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")
@@ -1611,7 +1613,9 @@ with your script for an edit-interpret-debug cycle."
"Major mode for editing Bash shell scripts.
This mode automatically falls back to `sh-mode' if the buffer is
not written in Bash or sh."
+ :syntax-table sh-mode-syntax-table
(when (treesit-ready-p 'bash)
+ (treesit-parser-create 'bash)
(setq-local treesit-font-lock-feature-list
'(( comment function)
( command declaration-command keyword string)
@@ -1619,6 +1623,7 @@ not written in Bash or sh."
( bracket delimiter misc-punctuation operator)))
(setq-local treesit-font-lock-settings
sh-mode--treesit-settings)
+ (setq-local treesit-defun-type-regexp "function_definition")
(treesit-major-mode-setup)))
(advice-add 'bash-ts-mode :around #'sh--redirect-bash-ts-mode
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 e585799dc63..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>
@@ -4526,7 +4526,8 @@ optionally is saved to the user's init file."
"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
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 48ac1169fe8..e0583f4b05c 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>
@@ -9,19 +9,18 @@
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; 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.
-;; This program is distributed in the hope that it will be useful,
+;; 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;;
@@ -31,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")
@@ -45,7 +45,6 @@
(let ((table (make-syntax-table)))
;; Taken from the cc-langs version
(modify-syntax-entry ?_ "_" table)
- (modify-syntax-entry ?$ "_" table)
(modify-syntax-entry ?\\ "\\" table)
(modify-syntax-entry ?+ "." table)
(modify-syntax-entry ?- "." table)
@@ -55,8 +54,14 @@
(modify-syntax-entry ?> "." table)
(modify-syntax-entry ?& "." table)
(modify-syntax-entry ?| "." table)
- (modify-syntax-entry ?` "\"" table)
+ (modify-syntax-entry ?\' "\"" table)
(modify-syntax-entry ?\240 "." table)
+ (modify-syntax-entry ?/ ". 124b" table)
+ (modify-syntax-entry ?* ". 23" table)
+ (modify-syntax-entry ?\n "> b" table)
+ (modify-syntax-entry ?\^m "> b" table)
+ (modify-syntax-entry ?$ "_" table)
+ (modify-syntax-entry ?` "\"" table)
table)
"Syntax table for `typescript-ts-mode'.")
@@ -69,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)
@@ -85,15 +91,19 @@ Argument LANGUAGE is either `typescript' or `tsx'."
((parent-is "object") parent-bol typescript-ts-mode-indent-offset)
((parent-is "object_type") parent-bol typescript-ts-mode-indent-offset)
((parent-is "enum_body") parent-bol typescript-ts-mode-indent-offset)
+ ((parent-is "class_body") parent-bol typescript-ts-mode-indent-offset)
((parent-is "arrow_function") parent-bol typescript-ts-mode-indent-offset)
((parent-is "parenthesized_expression") parent-bol typescript-ts-mode-indent-offset)
+ ((parent-is "binary_expression") parent-bol typescript-ts-mode-indent-offset)
,@(when (eq language 'tsx)
- `(((parent-is "jsx_opening_element") parent typescript-ts-mode-indent-offset)
+ `(((node-is "jsx_fragment") parent typescript-ts-mode-indent-offset)
+ ((node-is "jsx_element") parent typescript-ts-mode-indent-offset)
+ ((node-is "jsx_expression") parent typescript-ts-mode-indent-offset)
+ ((node-is "jsx_self_closing_element") parent typescript-ts-mode-indent-offset)
((node-is "jsx_closing_element") parent 0)
- ((parent-is "jsx_element") parent typescript-ts-mode-indent-offset)
((node-is "/") parent 0)
- ((parent-is "jsx_self_closing_element") parent typescript-ts-mode-indent-offset)))
+ ((node-is ">") parent 0)))
(no-node parent-bol 0))))
(defvar typescript-ts-mode--keywords
@@ -157,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)
@@ -201,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)
@@ -213,7 +223,34 @@ Argument LANGUAGE is either `typescript' or `tsx'."
parameters:
[(_ (identifier) @font-lock-variable-name-face)
(_ (_ (identifier) @font-lock-variable-name-face))
- (_ (_ (_ (identifier) @font-lock-variable-name-face)))]))
+ (_ (_ (_ (identifier) @font-lock-variable-name-face)))])
+
+ (return_statement (identifier) @font-lock-variable-name-face)
+
+ (binary_expression left: (identifier) @font-lock-variable-name-face)
+ (binary_expression right: (identifier) @font-lock-variable-name-face)
+
+ (arguments (identifier) @font-lock-variable-name-face)
+
+ (parenthesized_expression (identifier) @font-lock-variable-name-face)
+ (parenthesized_expression (_ (identifier) @font-lock-variable-name-face)))
+
+ :language language
+ :override t
+ :feature 'property
+ `((property_signature
+ name: (property_identifier) @font-lock-property-face)
+ (public_field_definition
+ name: (property_identifier) @font-lock-property-face)
+
+ (pair key: (property_identifier) @font-lock-variable-name-face)
+
+ (pair value: (identifier) @font-lock-variable-name-face)
+
+ ((shorthand_property_identifier) @font-lock-property-face)
+
+ ((shorthand_property_identifier_pattern)
+ @font-lock-property-face))
:language language
:override t
@@ -222,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
@@ -277,17 +316,7 @@ Argument LANGUAGE is either `typescript' or `tsx'."
:language language
:feature 'escape-sequence
:override t
- '((escape_sequence) @font-lock-escape-face)
-
- :language language
- :override t
- :feature 'property
- `((pair value: (identifier) @font-lock-variable-name-face)
-
- ((shorthand_property_identifier) @font-lock-property-face)
-
- ((shorthand_property_identifier_pattern)
- @font-lock-property-face))))
+ '((escape_sequence) @font-lock-escape-face)))
;;;###autoload
(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-ts-mode))
@@ -302,13 +331,7 @@ 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)
;; Electric
(setq-local electric-indent-chars
@@ -320,11 +343,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"
@@ -344,9 +373,9 @@ Argument LANGUAGE is either `typescript' or `tsx'."
(typescript-ts-mode--font-lock-settings 'typescript))
(setq-local treesit-font-lock-feature-list
'((comment declaration)
- (keyword string)
+ (keyword string escape-sequence)
(constant expression identifier number pattern property)
- (bracket delimiter)))
+ (function bracket delimiter)))
(treesit-major-mode-setup)))
@@ -379,9 +408,9 @@ Argument LANGUAGE is either `typescript' or `tsx'."
(typescript-ts-mode--font-lock-settings 'tsx))
(setq-local treesit-font-lock-feature-list
'((comment declaration)
- (keyword string)
+ (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 e5458e6a07f..3134a09c44f 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 14b749296cb..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
@@ -51,9 +51,6 @@
;;; Code:
-;; So that we can use the edebug spec in `lisp-current-defun-name'.
-(require 'edebug)
-
;; Variables for customization
;; ---------------------------
;;
@@ -81,12 +78,22 @@ then Which Function mode is enabled in any major mode that supports it."
This means that Which Function mode won't really do anything
until you use Imenu, in these modes. Note that files
larger than `which-func-maxout' behave in this way too;
-Which Function mode doesn't do anything until you use Imenu."
+Which Function mode doesn't do anything until you use Imenu.
+
+If Which Function delays the initial display of buffers too much,
+e.g., when it is used with Eglot, and the language server takes a
+long time to send the information, you can use this option to delay
+activation of Which Function until Imenu is used for the first time."
:type '(repeat (symbol :tag "Major mode")))
(defcustom which-func-maxout 500000
"Don't automatically compute the Imenu menu if buffer is this big or bigger.
-Zero means compute the Imenu menu regardless of size."
+Zero means compute the Imenu menu regardless of size.
+
+If Which Function delays the initial display of buffers too much,
+e.g., when it is used with Eglot, and the language server takes a
+long time to send the information, you can use this option to delay
+activation of Which Function until Imenu is used for the first time."
:type 'integer)
(defvar which-func-keymap
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 1e4aa4eba52..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"))
@@ -994,7 +994,7 @@ point."
(setq-local add-log-current-defun-function
#'xref--add-log-current-defun)
(setq-local outline-minor-mode-cycle t
- outline-minor-mode-use-buttons t
+ outline-minor-mode-use-buttons 'insert
outline-search-function
(lambda (&optional bound move backward looking-at)
(outline-search-text-property
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 c7ae77d128b..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
@@ -1039,7 +1039,10 @@ They are deleted _before_ looking for the next match. Hence, a match
starting on the same line at which another match ended is ignored.
Return the number of deleted matching lines. When called interactively,
-also print the number."
+also print the number.
+
+If you want to not just delete the lines, but also add them to
+the kill ring, use the \\[kill-matching-lines] command instead."
(interactive
(progn
(barf-if-buffer-read-only)
@@ -1101,7 +1104,10 @@ Hence, a match starting on the same line at which another match
ended is ignored.
Return the number of killed matching lines. When called
-interactively, also print the number."
+interactively, also print the number.
+
+If you merely want to delete the lines, without adding them to
+the kill ring, the \\[delete-matching-lines] command is faster."
(interactive
(progn
(barf-if-buffer-read-only)
@@ -1686,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 1b027f88ce6..eaf24a770e4 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>
@@ -1495,7 +1495,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)
@@ -1780,29 +1780,43 @@ With ARG non-nil, silently save all file-visiting buffers, then kill.
If emacsclient was started with a list of filenames to edit, then
only these files will be asked to be saved."
- (if server-stop-automatically
- (server-stop-automatically--handle-delete-frame (selected-frame))
- (let ((proc (frame-parameter nil 'client)))
- (cond ((eq proc 'nowait)
- ;; Nowait frames have no client buffer list.
- (if (cdr (frame-list))
- (progn (save-some-buffers arg)
- (delete-frame))
- ;; If we're the last frame standing, kill Emacs.
- (save-buffers-kill-emacs arg)))
- ((processp proc)
- (let ((buffers (process-get proc 'buffers)))
- (save-some-buffers
- arg (if buffers
- ;; Only files from emacsclient file list.
- (lambda () (memq (current-buffer) buffers))
- ;; No emacsclient file list: don't override
- ;; `save-some-buffers-default-predicate' (unless
- ;; ARG is non-nil), since we're not killing
- ;; Emacs (unlike `save-buffers-kill-emacs').
- (and arg t)))
- (server-delete-client proc)))
- (t (error "Invalid client frame"))))))
+ (let ((proc (frame-parameter nil 'client)))
+ (cond ((eq proc 'nowait)
+ ;; Nowait frames have no client buffer list.
+ (if (length> (frame-list) (if server-stop-automatically 2 1))
+ ;; If there are any other frames, only delete this one.
+ ;; When `server-stop-automatically' is set, don't count
+ ;; the daemon frame.
+ (progn (save-some-buffers arg)
+ (delete-frame))
+ ;; If we're the last frame standing, kill Emacs.
+ (save-buffers-kill-emacs arg)))
+ ((processp proc)
+ (if (or (not server-stop-automatically)
+ (length> server-clients 1)
+ (seq-some
+ (lambda (frame)
+ (when-let ((p (frame-parameter frame 'client)))
+ (not (eq proc p))))
+ (frame-list)))
+ ;; If `server-stop-automatically' is not enabled, there
+ ;; are any other clients, or there are frames not owned
+ ;; by the current client (e.g. `nowait' frames), then
+ ;; we just want to delete this client.
+ (let ((buffers (process-get proc 'buffers)))
+ (save-some-buffers
+ arg (if buffers
+ ;; Only files from emacsclient file list.
+ (lambda () (memq (current-buffer) buffers))
+ ;; No emacsclient file list: don't override
+ ;; `save-some-buffers-default-predicate' (unless
+ ;; ARG is non-nil), since we're not killing
+ ;; Emacs (unlike `save-buffers-kill-emacs').
+ (and arg t)))
+ (server-delete-client proc))
+ ;; Otherwise, we want to kill Emacs.
+ (save-buffers-kill-emacs arg)))
+ (t (error "Invalid client frame")))))
(defun server-stop-automatically--handle-delete-frame (frame)
"Handle deletion of FRAME when `server-stop-automatically' is used."
@@ -1897,10 +1911,11 @@ Returns the result of the evaluation, or signals an error if it
cannot contact the specified server. For example:
(server-eval-at \"server\" \\='(emacs-pid))
returns the process ID of the Emacs instance running \"server\"."
- (let ((server-file (server--file-name))
- (coding-system-for-read 'binary)
- (coding-system-for-write 'binary)
- address port secret process)
+ (let* ((server-dir (if server-use-tcp server-auth-dir server-socket-dir))
+ (server-file (expand-file-name server server-dir))
+ (coding-system-for-read 'binary)
+ (coding-system-for-write 'binary)
+ address port secret process)
(unless (file-exists-p server-file)
(error "No such server: %s" server))
(with-temp-buffer
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 b396bc2b180..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
@@ -1162,6 +1160,7 @@ line output and parses it to form the new directory stack."
(dlsl nil)
(pos 0)
(ds nil))
+ (setq dls (string-trim-right dls "[ ]+"))
;; Split the dirlist into whitespace and non-whitespace chunks.
;; dlsl will be a reversed list of tokens.
(while (string-match "\\(\\S-+\\|\\s-+\\)" dls pos)
diff --git a/lisp/simple.el b/lisp/simple.el
index 893a43b03fc..63479e9ce0a 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
@@ -2929,11 +2929,12 @@ that was current when the minibuffer was activated."
(window-buffer (minibuffer-selected-window))))
(defun goto-history-element (nabs)
- "Puts element of the minibuffer history in the minibuffer.
-The argument NABS specifies the absolute history position in
-descending order, where 0 means the current element and a
-positive number N means the Nth previous element. NABS being a
-negative number -N means the Nth entry of \"future history.\""
+ "Insert into the minibuffer the element of minibuffer history specified by NABS.
+Interactively, NABS is the prefix numeric argument, and defaults to 1.
+It specifies the absolute history position in descending order,
+where 0 means the current element and a positive number N means
+the Nth previous element. NABS that is a negative number -N means
+the Nth entry of \"future history.\""
(interactive "p")
(when (and (not minibuffer-default-add-done)
(functionp minibuffer-default-add-function)
@@ -2989,17 +2990,17 @@ negative number -N means the Nth entry of \"future history.\""
(goto-char (or minibuffer-temporary-goal-position (point-max)))))
(defun next-history-element (n)
- "Puts next element of the minibuffer history in the minibuffer.
-With argument N, it uses the Nth following element. The position
-in the history can go beyond the current position and invoke \"future
-history.\""
+ "Insert into the minibuffer the Nth next element of minibuffer history.
+Interactively, N is the prefix numeric argument and defaults to 1.
+The value N can go beyond the current position in the minibuffer
+history, and invoke \"future history.\""
(interactive "p")
(or (zerop n)
(goto-history-element (- minibuffer-history-position n))))
(defun previous-history-element (n)
- "Puts previous element of the minibuffer history in the minibuffer.
-With argument N, it uses the Nth previous element."
+ "Insert into the minibuffer the Nth previous element of minibuffer history.
+Interactively, N is the prefix numeric argument and defaults to 1."
(interactive "p")
(or (zerop n)
(goto-history-element (+ minibuffer-history-position n))))
@@ -3589,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))
@@ -9578,8 +9579,6 @@ makes it easier to edit it."
(define-key map "\C-m" 'choose-completion)
(define-key map "\e\e\e" 'delete-completion-window)
(define-key map [remap keyboard-quit] #'delete-completion-window)
- (define-key map [up] 'previous-line-completion)
- (define-key map [down] 'next-line-completion)
(define-key map [left] 'previous-completion)
(define-key map [right] 'next-completion)
(define-key map [?\t] 'next-completion)
@@ -9639,8 +9638,7 @@ Go to the window from which completion was requested."
(defcustom completion-auto-wrap t
"Non-nil means to wrap around when selecting completion options.
-This affects the commands `next-completion', `previous-completion',
-`next-line-completion' and `previous-line-completion'.
+This affects the commands `next-completion' and `previous-completion'.
When `completion-auto-select' is t, it wraps through the minibuffer
for the commands bound to the TAB key."
:type 'boolean
@@ -9746,73 +9744,6 @@ Also see the `completion-auto-wrap' variable."
(when (/= 0 n)
(switch-to-minibuffer))))
-(defun previous-line-completion (&optional n)
- "Move to the item on the previous line in the completion list.
-With prefix argument N, move back N items line-wise (negative N
-means move forward).
-
-Also see the `completion-auto-wrap' variable."
- (interactive "p")
- (next-line-completion (- n)))
-
-(defun next-line-completion (&optional n)
- "Move to the item on the next line in the completion list.
-With prefix argument N, move N items line-wise (negative N
-means move backward).
-
-Also see the `completion-auto-wrap' variable."
- (interactive "p")
- (let ((column (current-column))
- pos)
- (catch 'bound
- (while (> n 0)
- (setq pos nil)
- (save-excursion
- (while (and (not pos) (not (eobp)))
- (forward-line 1)
- (when (and (not (eobp))
- (eq (move-to-column column) column)
- (get-text-property (point) 'mouse-face))
- (setq pos (point)))))
- (if pos (goto-char pos)
- (when completion-auto-wrap
- (save-excursion
- (goto-char (point-min))
- (when (and (eq (move-to-column column) column)
- (get-text-property (point) 'mouse-face))
- (setq pos (point)))
- (while (and (not pos) (not (eobp)))
- (forward-line 1)
- (when (and (eq (move-to-column column) column)
- (get-text-property (point) 'mouse-face))
- (setq pos (point)))))
- (if pos (goto-char pos))))
- (setq n (1- n)))
-
- (while (< n 0)
- (setq pos nil)
- (save-excursion
- (while (and (not pos) (not (bobp)))
- (forward-line -1)
- (when (and (not (bobp))
- (eq (move-to-column column) column)
- (get-text-property (point) 'mouse-face))
- (setq pos (point)))))
- (if pos (goto-char pos)
- (when completion-auto-wrap
- (save-excursion
- (goto-char (point-max))
- (when (and (eq (move-to-column column) column)
- (get-text-property (point) 'mouse-face))
- (setq pos (point)))
- (while (and (not pos) (not (bobp)))
- (forward-line -1)
- (when (and (eq (move-to-column column) column)
- (get-text-property (point) 'mouse-face))
- (setq pos (point)))))
- (if pos (goto-char pos))))
- (setq n (1+ n))))))
-
(defun choose-completion (&optional event no-exit no-quit)
"Choose the completion at point.
If EVENT, use EVENT's position to determine the starting position.
@@ -10122,6 +10053,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 661f5ee57a9..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>
@@ -986,7 +986,7 @@ See also `so-long-mode-line-info'."
;; Modes that go slowly and line lengths excessive
;; Font-lock performance becoming oppressive
;; All of my CPU tied up with strings
-;; These are a few of my least-favourite things
+;; These are a few of my least-favorite things
(defvar-local so-long-original-values nil
"Alist holding the buffer's original `major-mode' value, and other data.
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 2b431591441..115f0e4937f 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
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 21f43092d42..9087f9a4044 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
@@ -1576,16 +1576,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.
@@ -3855,7 +3857,7 @@ If MESSAGE is nil, instructions to type EXIT-CHAR are displayed there."
(let ((o1 (if (overlay-buffer o)
(make-overlay (overlay-start o) (overlay-end o)
;; FIXME: there's no easy way to find the
- ;; insertion-type of the two markers.
+ ;; insertion-type of overlay's start and end.
(overlay-buffer o))
(let ((o1 (make-overlay (point-min) (point-min))))
(delete-overlay o1)
@@ -6909,11 +6911,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.
@@ -7047,7 +7046,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 dcda67e9c5b..119a243d6b3 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
@@ -416,7 +416,7 @@ at the mouse-down event to the position at mouse-up event."
"S-<wheel-right>" #'tab-bar-move-tab)
(global-set-key [tab-bar]
- `(menu-item ,(purecopy "tab bar") ignore
+ `(menu-item ,(purecopy "tab bar") ,(make-sparse-keymap)
:filter tab-bar-make-keymap))
(defun tab-bar-make-keymap (&optional _ignore)
@@ -586,7 +586,7 @@ and `tab-bar-select-tab-modifiers'."
(defun tab-bar-separator ()
"Separator between tabs."
- (or tab-bar-separator (if window-system " " "|")))
+ (or tab-bar-separator (if (window-system) " " "|")))
(defcustom tab-bar-tab-name-function #'tab-bar-tab-name-current
@@ -844,8 +844,9 @@ Function gets one argument: a tab."
(defcustom tab-bar-tab-group-format-function #'tab-bar-tab-group-format-default
"Function to format a tab group name.
-Function gets two arguments, a tab with a group name and its number,
-and should return the formatted tab group name to display in the tab bar."
+Function gets three arguments, a tab with a group name, its number, and
+an optional value that is non-nil when the tab is from the current group.
+It should return the formatted tab group name to display in the tab bar."
:type 'function
:initialize 'custom-initialize-default
:set (lambda (sym val)
@@ -854,11 +855,11 @@ and should return the formatted tab group name to display in the tab bar."
:group 'tab-bar
:version "28.1")
-(defun tab-bar-tab-group-format-default (tab i)
+(defun tab-bar-tab-group-format-default (tab i &optional current-p)
(propertize
- (concat (if tab-bar-tab-hints (format "%d " i) "")
+ (concat (if (and tab-bar-tab-hints (not current-p)) (format "%d " i) "")
(funcall tab-bar-tab-group-function tab))
- 'face 'tab-bar-tab-group-inactive))
+ 'face (if current-p 'tab-bar-tab-group-current 'tab-bar-tab-group-inactive)))
(defcustom tab-bar-tab-group-face-function #'tab-bar-tab-group-face-default
"Function to define a tab group face.
@@ -882,8 +883,14 @@ when the tab is current. Return the result as a keymap."
`((,(intern (format "group-%i" i))
menu-item
,(if current-p
- (propertize (funcall tab-bar-tab-group-function tab)
- 'face 'tab-bar-tab-group-current)
+ (condition-case nil
+ (funcall tab-bar-tab-group-format-function tab i current-p)
+ ;; We used to define tab-bar-tab-group-format-function as
+ ;; taking two arguments but after adding the third argument
+ ;; we need to provide backwards-compatibility.
+ (wrong-number-of-arguments
+ (propertize (funcall tab-bar-tab-group-function tab)
+ 'face 'tab-bar-tab-group-current)))
(funcall tab-bar-tab-group-format-function tab i))
,(if current-p 'ignore
(or
@@ -939,7 +946,7 @@ when the tab is current. Return the result as a keymap."
(str (propertize " " 'display
;; The `right' spec doesn't work on TTY frames
;; when windows are split horizontally (bug#59620)
- (if window-system
+ (if (window-system)
`(space :align-to (- right (,hpos)))
`(space :align-to (,(- (frame-inner-width) hpos)))))))
`((align-right menu-item ,str ignore))))
@@ -1014,7 +1021,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")
@@ -1033,17 +1040,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
@@ -1060,18 +1067,18 @@ tab bar might wrap to the second line when it shouldn't.")
(string-pixel-width non-tabs))
(length tabs)))
(when tab-bar-auto-width-min
- (setq width (max width (if window-system
+ (setq width (max width (if (window-system)
(nth 0 tab-bar-auto-width-min)
(nth 1 tab-bar-auto-width-min)))))
(when tab-bar-auto-width-max
- (setq width (min width (if window-system
+ (setq width (min width (if (window-system)
(nth 0 tab-bar-auto-width-max)
(nth 1 tab-bar-auto-width-max)))))
(dolist (item tabs)
(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))
@@ -2619,18 +2626,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 99a785ee3e3..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
@@ -504,7 +504,7 @@ which the tab will represent."
(defun tab-line-format-template (tabs)
"Template of the format for displaying tab line for selected window.
This is used by `tab-line-format'."
- (let* ((separator (or tab-line-separator (if window-system " " "|")))
+ (let* ((separator (or tab-line-separator (if (window-system) " " "|")))
(hscroll (window-parameter nil 'tab-line-hscroll))
(strings
(mapcar
@@ -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 08e38c9a050..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
@@ -571,6 +571,8 @@ Return the pasted text as a string."
(8 62 [?\C-\M->])
(8 63 [(control meta ??)])
+ (3 32 [?\M-\s])
+
(2 9 [S-tab])
(2 13 [S-return])
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 b82886e3974..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
@@ -1822,30 +1801,32 @@ Use `\\[fill-paragraph]' to reformat CSS declaration blocks. It
can also be used to fill comments.
\\{css-mode-map}"
+ :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)))
- ;; Tree-sitter-css, for whatever reason, cannot reliably return
- ;; the captured nodes in a given range (it instead returns the
- ;; nodes preceding range). Before this is fixed in
- ;; tree-sitter-css, use this heuristic as a temporary fix.
- (setq-local treesit--font-lock-query-expand-range (cons 80 80))
- (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 ebb31da9cf4..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
@@ -226,7 +226,7 @@ untagged NEWS entry."
;; Do manual references.
(goto-char (point-min))
(search-forward "\f" nil t)
- (while (re-search-forward "\"\\(([a-z0-9]+)[ \n][^\"]\\{1,80\\}\\)\""
+ (while (re-search-forward "\"\\(([a-z0-9-]+)[ \n][^\"]\\{1,80\\}\\)\""
nil t)
(buttonize-region (match-beginning 1) (match-end 1)
(lambda (node) (info node))
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 f815419ea44..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
@@ -1004,10 +1004,13 @@ This enforces rescanning the buffer on next use."
reftex-section-levels))
;; Calculate the regular expressions
- (let* (
-; (wbol "\\(\\`\\|[\n\r]\\)[ \t]*")
- (wbol "\\(^\\)%?[ \t]*") ; Need to keep the empty group because
- ; match numbers are hard coded
+ (let* (;; (wbol "\\(\\`\\|[\n\r]\\)[ \t]*")
+ ;; Need to keep the empty group because match numbers are
+ ;; hard coded
+ (wbol (concat "\\(^\\)"
+ (when (string-suffix-p ".dtx" (buffer-file-name) t)
+ "%")
+ "[ \t]*"))
(label-re (concat "\\(?:"
(mapconcat #'identity reftex-label-regexps "\\|")
"\\)"))
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 98672f42b3f..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
@@ -347,6 +347,8 @@ Subexpression 1 is what goes into the corresponding `@end' statement.")
(defun texinfo-flymake (report-fn &rest _)
"Texinfo checking for Flymake.
+It uses either \"makeinfo\" or \"texi2any\", in that order.
+
REPORT-FN is the callback function."
(let ((executable (or (executable-find "makeinfo")
(executable-find "texi2any")))
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
new file mode 100644
index 00000000000..1b68632f58c
--- /dev/null
+++ b/lisp/textmodes/toml-ts-mode.el
@@ -0,0 +1,161 @@
+;;; toml-ts-mode.el --- tree-sitter support for TOML -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
+
+;; Author : Jostein Kjønigsen <jostein@kjonigsen.net>
+;; Maintainer : Jostein Kjønigsen <jostein@kjonigsen.net>
+;; Created : December 2022
+;; Keywords : toml 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:
+;;
+
+;;; Code:
+
+(require 'treesit)
+
+(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
+ "Number of spaces for each indentation step in `toml-ts-mode'."
+ :version "29.1"
+ :type 'integer
+ :safe 'integerp
+ :group 'toml)
+
+(defvar toml-ts-mode--syntax-table
+ (let ((table (make-syntax-table)))
+ (modify-syntax-entry ?_ "_" table)
+ (modify-syntax-entry ?\\ "\\" table)
+ (modify-syntax-entry ?= "." table)
+ (modify-syntax-entry ?\' "\"" table)
+ (modify-syntax-entry ?# "<" table)
+ (modify-syntax-entry ?\n "> b" table)
+ (modify-syntax-entry ?\^m "> b" table)
+ table)
+ "Syntax table for `toml-ts-mode'.")
+
+(defvar toml-ts-mode--indent-rules
+ `((toml
+ ((node-is "]") parent-bol 0)
+ ((parent-is "string") parent-bol toml-ts-mode-indent-offset)
+ ((parent-is "array") parent-bol toml-ts-mode-indent-offset))))
+
+(defvar toml-ts-mode--font-lock-settings
+ (treesit-font-lock-rules
+ :language 'toml
+ :feature 'comment
+ '((comment) @font-lock-comment-face)
+
+ :language 'toml
+ :feature 'constant
+ '((boolean) @font-lock-constant-face)
+
+ :language 'toml
+ :feature 'delimiter
+ '((["="]) @font-lock-delimiter-face)
+
+ :language 'toml
+ :feature 'number
+ '([(integer) (float) (local_date) (local_date_time) (local_time)]
+ @font-lock-number-face)
+
+ :language 'toml
+ :feature 'string
+ '((string) @font-lock-string-face)
+
+ :language 'toml
+ :feature 'escape-sequence
+ :override t
+ '((escape_sequence) @font-lock-escape-face)
+
+ :language 'toml
+ :feature 'pair
+ :override t ; Needed for overriding string face on keys.
+ '((bare_key) @font-lock-property-face
+ (quoted_key) @font-lock-property-face
+ (table ("[" @font-lock-bracket-face
+ (_) @font-lock-type-face
+ "]" @font-lock-bracket-face))
+ (table_array_element ("[[" @font-lock-bracket-face
+ (_) @font-lock-type-face
+ "]]" @font-lock-bracket-face))
+ (table (quoted_key) @font-lock-type-face)
+ (table (dotted_key (quoted_key)) @font-lock-type-face))
+
+ :language 'toml
+ :feature 'error
+ :override t
+ '((ERROR) @font-lock-warning-face))
+ "Font-lock settings for TOML.")
+
+(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))
+
+;;;###autoload
+(define-derived-mode toml-ts-mode text-mode "TOML"
+ "Major mode for editing TOML, powered by tree-sitter."
+ :group 'toml-mode
+ :syntax-table toml-ts-mode--syntax-table
+
+ (when (treesit-ready-p 'toml)
+ (treesit-parser-create 'toml)
+
+ ;; Comments
+ (setq-local comment-start "# ")
+ (setq-local comment-end "")
+
+ ;; Indent.
+ (setq-local treesit-simple-indent-rules toml-ts-mode--indent-rules)
+
+ ;; 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)
+ (setq-local treesit-font-lock-feature-list
+ '((comment)
+ (constant number pair string)
+ (escape-sequence)
+ (delimiter error)))
+
+ ;; Imenu.
+ (setq-local treesit-simple-imenu-settings
+ '(("Header" "\\`table\\'" nil nil)
+ ("Array" "\\`table_array_element\\'" nil nil)))
+
+ (treesit-major-mode-setup)))
+
+(provide 'toml-ts-mode)
+
+;;; toml-ts-mode.el ends here
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
new file mode 100644
index 00000000000..8c61ee062cf
--- /dev/null
+++ b/lisp/textmodes/yaml-ts-mode.el
@@ -0,0 +1,151 @@
+;;; yaml-ts-mode.el --- tree-sitter support for YAML -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
+
+;; Author : Randy Taylor <dev@rjt.dev>
+;; Maintainer : Randy Taylor <dev@rjt.dev>
+;; Created : December 2022
+;; Keywords : yaml 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:
+;;
+
+;;; Code:
+
+(require 'treesit)
+
+(declare-function treesit-parser-create "treesit.c")
+
+(defvar yaml-ts-mode--syntax-table
+ (let ((table (make-syntax-table)))
+ (modify-syntax-entry ?# "<" table)
+ (modify-syntax-entry ?\n ">" table)
+ (modify-syntax-entry ?& "." table)
+ (modify-syntax-entry ?* "." table)
+ (modify-syntax-entry ?\( "." table)
+ (modify-syntax-entry ?\) "." table)
+ (modify-syntax-entry ?\' "\"" table)
+ table)
+ "Syntax table for `yaml-ts-mode'.")
+
+(defvar yaml-ts-mode--font-lock-settings
+ (treesit-font-lock-rules
+ :language 'yaml
+ :feature 'bracket
+ '((["[" "]" "{" "}"]) @font-lock-bracket-face)
+
+ :language 'yaml
+ :feature 'comment
+ '((comment) @font-lock-comment-face)
+
+ :language 'yaml
+ :feature 'constant
+ '([(boolean_scalar)
+ (null_scalar)
+ (reserved_directive)
+ (tag_directive)
+ (yaml_directive)] @font-lock-constant-face)
+
+ :language 'yaml
+ :feature 'delimiter
+ '((["," ":" "-" ">" "?" "|"]) @font-lock-delimiter-face)
+
+ :language 'yaml
+ :feature 'misc-punctuation
+ '((["---" "..." "&" "*"]) @font-lock-misc-punctuation-face)
+
+ :language 'yaml
+ :feature 'number
+ '([(float_scalar) (integer_scalar)] @font-lock-number-face)
+
+ :language 'yaml
+ :feature 'type
+ '([(alias_name) (anchor_name) (tag)] @font-lock-type-face)
+
+ :language 'yaml
+ :feature 'string
+ :override t
+ '([(block_scalar)
+ (double_quote_scalar)
+ (single_quote_scalar)
+ (string_scalar)] @font-lock-string-face)
+
+ :language 'yaml
+ :feature 'escape-sequence
+ :override t
+ '((escape_sequence) @font-lock-escape-face)
+
+ :language 'yaml
+ :feature 'property
+ :override t
+ '((block_mapping_pair
+ key: (flow_node (plain_scalar (string_scalar) @font-lock-property-face)))
+ (block_mapping_pair
+ key: (flow_node
+ [(double_quote_scalar) (single_quote_scalar)] @font-lock-property-face))
+ (flow_mapping
+ (_ key: (flow_node (plain_scalar (string_scalar) @font-lock-property-face))))
+ (flow_mapping
+ (_ key:
+ (flow_node
+ [(double_quote_scalar) (single_quote_scalar)] @font-lock-property-face)))
+ (flow_sequence
+ (_ key: (flow_node (plain_scalar (string_scalar) @font-lock-property-face))))
+ (flow_sequence
+ (_ key:
+ (flow_node
+ [(double_quote_scalar) (single_quote_scalar)] @font-lock-property-face))))
+
+ :language 'yaml
+ :feature 'error
+ :override t
+ '((ERROR) @font-lock-warning-face))
+ "Tree-sitter font-lock settings for `yaml-ts-mode'.")
+
+;;;###autoload
+(add-to-list 'auto-mode-alist '("\\.ya?ml\\'" . yaml-ts-mode))
+
+;;;###autoload
+(define-derived-mode yaml-ts-mode text-mode "YAML"
+ "Major mode for editing YAML, powered by tree-sitter."
+ :group 'yaml
+ :syntax-table yaml-ts-mode--syntax-table
+
+ (when (treesit-ready-p 'yaml)
+ (treesit-parser-create 'yaml)
+
+ ;; Comments.
+ (setq-local comment-start "# ")
+ (setq-local comment-end "")
+
+ ;; Indentation.
+ (setq-local indent-tabs-mode nil)
+
+ ;; Font-lock.
+ (setq-local treesit-font-lock-settings yaml-ts-mode--font-lock-settings)
+ (setq-local treesit-font-lock-feature-list
+ '((comment)
+ (string type)
+ (constant escape-sequence number property)
+ (bracket delimiter error misc-punctuation)))
+
+ (treesit-major-mode-setup)))
+
+(provide 'yaml-ts-mode)
+
+;;; yaml-ts-mode.el ends here
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 0919c2c3ef0..eb3c4ab6bca 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 f3c03daf7e0..1ca72af5c2d 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."
@@ -545,12 +565,7 @@ This should be a cons cell (START . END). When fontifying a
buffer, Emacs will move the start of the query range backward by
START amount, and the end of the query range by END amount. Both
START and END should be positive integers or 0. This doesn't
-affect the fontified range.
-
-Sometimes, querying on some parser with a restricted range
-returns nodes not in that range but before it, which breaks
-fontification. Major modes can adjust this variable as a
-temporarily fix.")
+affect the fontified range.")
(defvar-local treesit-font-lock-feature-list nil
"A list of lists of feature symbols.
@@ -774,25 +789,35 @@ signals the `treesit-font-lock-error' error if that happens."
((memq feature remove-list) nil)
(t current-value))))))
-(defun treesit-fontify-with-override (start end face override)
+(defun treesit-fontify-with-override
+ (start end face override &optional bound-start bound-end)
"Apply FACE to the region between START and END.
OVERRIDE can be nil, t, `append', `prepend', or `keep'.
-See `treesit-font-lock-rules' for their semantic."
- (pcase override
- ('nil (unless (text-property-not-all
- start end 'face nil)
- (put-text-property start end 'face face)))
- ('t (put-text-property start end 'face face))
- ('append (font-lock-append-text-property
+See `treesit-font-lock-rules' for their semantic.
+
+If BOUND-START and BOUND-END are non-nil, only fontify the region
+in between them."
+ (when (or (null bound-start) (null bound-end)
+ (and bound-start bound-end
+ (<= bound-start end)
+ (>= bound-end start)))
+ (when (and bound-start bound-end)
+ (setq start (max bound-start start)
+ end (min bound-end end)))
+ (pcase override
+ ('nil (unless (text-property-not-all start end 'face nil)
+ (put-text-property start end 'face face)))
+ ('t (put-text-property start end 'face face))
+ ('append (font-lock-append-text-property
+ start end 'face face))
+ ('prepend (font-lock-prepend-text-property
+ start end 'face face))
+ ('keep (font-lock-fillin-text-property
start end 'face face))
- ('prepend (font-lock-prepend-text-property
- start end 'face face))
- ('keep (font-lock-fillin-text-property
- start end 'face face))
- (_ (signal 'treesit-font-lock-error
- (list
- "Unrecognized value of :override option"
- override)))))
+ (_ (signal 'treesit-font-lock-error
+ (list
+ "Unrecognized value of :override option"
+ override))))))
(defun treesit--set-nonsticky (start end sym &optional remove)
"Set `rear-nonsticky' property between START and END.
@@ -828,26 +853,33 @@ The range is between START and END."
(nreverse result))
(list node)))
-(defun treesit--children-covering-range-recurse (node start end threshold)
+(defun treesit--children-covering-range-recurse
+ (node start end threshold &optional limit)
"Return a list of children of NODE covering a range.
+
Recursively go down the parse tree and collect children, until
all nodes in the returned list are smaller than THRESHOLD. The
-range is between START and END."
+range is between START and END.
+
+LIMIT is the recursion limit, which defaults to 100."
(let* ((child (treesit-node-first-child-for-pos node start))
+ (limit (or limit 100))
result)
- (while (and child (<= (treesit-node-start child) end))
+ ;; If LIMIT is exceeded, we are probably seeing the erroneously
+ ;; tall tree, in that case, just give up.
+ (while (and (> limit 0) child (<= (treesit-node-start child) end))
;; If child still too large, recurse down. Otherwise collect
;; child.
(if (> (- (treesit-node-end child)
(treesit-node-start child))
threshold)
(dolist (r (treesit--children-covering-range-recurse
- child start end threshold))
+ child start end threshold (1- limit)))
(push r result))
(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."
@@ -883,6 +915,12 @@ detail.")
;; top-level nodes and query them. This ensures that querying is fast
;; everywhere else, except for the problematic region.
;;
+;; Some other time the source file has a top-level node that contains
+;; a huge number of children (say, 10k children), querying that node
+;; is also very slow, so instead of getting the top-level node, we
+;; recursively go down the tree to find nodes that cover the region
+;; but are reasonably small.
+;;
;; 3. It is possible to capture a node that's completely outside the
;; region between START and END: as long as the whole pattern
;; intersects the region, all the captured nodes in that pattern are
@@ -912,8 +950,8 @@ If LOUDLY is non-nil, display some debugging information."
;; If we run into problematic files, use the "fast mode" to
;; try to recover. See comment #2 above for more explanation.
(when treesit--font-lock-fast-mode
- (setq nodes (treesit--children-covering-range
- (car nodes) start end)))
+ (setq nodes (treesit--children-covering-range-recurse
+ (car nodes) start end (* 4 jit-lock-chunk-size))))
;; Query each node.
(dolist (sub-node nodes)
@@ -1029,7 +1067,6 @@ See `treesit-simple-indent-presets'.")
(or (null node-index-max)
(<= (treesit-node-index node)
node-index-max))))))
- ;; TODO: Document if genuinely useful.
(cons 'n-p-gp
(lambda (node-t parent-t grand-parent-t)
(lambda (node parent &rest _)
@@ -1090,12 +1127,22 @@ See `treesit-simple-indent-presets'.")
(re-search-forward comment-start-skip)
(skip-syntax-backward "-")
(point))))
- (cons 'comment-start-skip
+ (cons 'prev-adaptive-prefix
(lambda (_n parent &rest _)
(save-excursion
- (goto-char (treesit-node-start parent))
- (re-search-forward comment-start-skip)
- (point))))
+ (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 _)
@@ -1130,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 _)
@@ -1170,6 +1216,10 @@ no-node
Checks that NODE's type matches regexp TYPE.
+\(n-p-gp NODE-TYPE PARENT-TYPE GRANDPARENT-TYPE)
+
+ Checks for NODE's, its parent's, and its grandparent's type.
+
\(query QUERY)
Queries PARENT with QUERY, and checks if NODE is
@@ -1212,14 +1262,16 @@ point-min
comment-start
- Returns the position after a match for `treesit-comment-start'.
- Assumes PARENT is a comment node.
+ Goes to the position that `comment-start-skip' would return,
+ skips whitespace backwards, and returns the resulting
+ position. Assumes PARENT is a comment node.
-comment-start-skip
+prev-adaptive-prefix
- Goes to the position that comment-start would return, skips
- whitespace after that, and returns the resulting position.
- Assumes PARENT is a comment node.")
+ 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.
@@ -1545,81 +1597,506 @@ BACKWARD and ALL are the same as in `treesit-search-forward'."
(goto-char current-pos)))
node))
-;;; Navigation
+;;; 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.
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 . 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-defun-prefer-top-level nil
- "When non-nil, Emacs prefers top-level defun.
-
-In some languages, a defun could be nested in another one.
-Normally Emacs stops at the first defun it encounters. If this
-variable's value is t, Emacs tries to find the top-level defun,
-and ignores nested ones.
-
-This variable can also be a list of cons cells of the
-form (FROM . TO), where FROM and TO are tree-sitter node type
-regexps. When Emacs finds a defun node whose type matches any of
-the FROM regexps in the list, it then tries to find a
-higher-level node matching the corresponding TO regexp.")
-
-(defun treesit--defun-maybe-top-level (node)
- "Maybe return the top-level equivalent of NODE.
-For the detailed semantic see `treesit-defun-prefer-top-level'."
- (pcase treesit-defun-prefer-top-level
- ('nil node)
- ('t (or (treesit-node-top-level
- node treesit-defun-type-regexp)
- node))
- ((pred consp)
- (cl-loop
- for con in treesit-defun-prefer-top-level
- for from = (car con)
- for to = (cdr con)
- if (string-match-p from (treesit-node-type node))
- return (or (treesit-node-top-level node to)
- node)
- finally return node))))
+(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
+defuns, if the value is `nested', Emacs recognizes nested defuns.")
+
+(defvar-local treesit-defun-skipper #'treesit-default-defun-skipper
+ "A function called after tree-sitter navigation moved a step.
+
+It is called with no arguments. By default, this function tries
+to move to the beginning of a line, either by moving to the empty
+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)
- "Tree-sitter `beginning-of-defun' function.
-ARG is the same as in `beginning-of-defun'."
- (let ((arg (or arg 1))
- (node (treesit-node-at (point))))
- (if (> arg 0)
- ;; Go backward.
- (while (and (> arg 0)
- (setq node (treesit-search-forward-goto
- node treesit-defun-type-regexp t t)))
- (setq node (treesit--defun-maybe-top-level node))
- (setq arg (1- arg)))
- ;; Go forward.
- (while (and (< arg 0)
- (setq node (treesit-search-forward-goto
- node treesit-defun-type-regexp)))
- (setq node (treesit--defun-maybe-top-level node))
- (setq arg (1+ arg))))
- (when node
- (goto-char (treesit-node-start node))
- t)))
-
-(defun treesit-end-of-defun ()
- "Tree-sitter `end-of-defun' function."
- ;; Why not simply get the largest node at point: when point is at
- ;; (point-min), that gives us the root node.
- (let* ((node (treesit-search-forward
- (treesit-node-at (point)) treesit-defun-type-regexp t t))
- (top (treesit--defun-maybe-top-level node)))
- ;; Technically `end-of-defun' should only call this function when
- ;; point is at the beginning of a defun, so TOP should always be
- ;; non-nil, but things happen, and we want to be safe, so check
- ;; for TOP anyway.
- (when top
- (goto-char (treesit-node-end top)))))
+ "Move backward to the beginning of a defun.
+
+With argument ARG, do it that many times. Negative ARG means
+move forward to the ARGth following beginning of defun.
+
+If search is successful, return t, otherwise return nil.
+
+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 (treesit-beginning-of-thing treesit-defun-type-regexp arg)
+ (when treesit-defun-skipper
+ (funcall treesit-defun-skipper))
+ t))
+
+(defun treesit-end-of-defun (&optional arg _)
+ "Move forward to next end of defun.
+
+With argument ARG, do it that many times.
+Negative argument -N means move back to Nth preceding end of defun.
+
+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 (treesit-end-of-thing treesit-defun-type-regexp arg)
+ (when treesit-defun-skipper
+ (funcall treesit-defun-skipper))))
+
+(defun treesit-default-defun-skipper ()
+ "Skips spaces after navigating a defun.
+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."
+ ;; 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
+;; 2. highest such node
+;;
+;; next-sibling:
+;; 1. beg-of-node after pos
+;; 2. highest such node
+;;
+;; parent:
+;; 1. node covers pos
+;; 2. smallest such node
+(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 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-thing-at-point'."
+ (let* ((node (treesit-node-at pos))
+ (result (list nil nil nil)))
+ ;; 1. Find previous and next sibling defuns.
+ (cl-loop
+ for idx from 0 to 1
+ 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)))
+ ;; 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.
+ (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-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
+;; exist, we move to parents's beg/end, rinse and repeat. We never
+;; move into a defun, only outwards.
+;;
+;; Let me describe roughly what does this function do: there are four
+;; possible operations: prev-beg, next-end, prev-end, next-beg, and
+;; each of (prev-sibling next-sibling and parent) could exist or not
+;; exist. So there are 4 times 8 = 32 situations.
+;;
+;; I'll only describe the situation when we go backward (prev-beg &
+;; prev-end), and consider only prev-sibling & parent. Deriving the
+;; reverse situations is left as an exercise for the reader.
+;;
+;; prev-beg (easy case):
+;; 1. prev-sibling or parent exists
+;; -> go the prev-sibling/parent's beg
+;;
+;; prev-end (tricky):
+;; 1. prev-sibling exists
+;; -> If you think about it, we are already at prev-sibling's end!
+;; So we need to go one step further, either to
+;; prev-prev-sibling's end, or parent's prev-sibling's end, etc.
+;; 2. prev-sibling is nil but parent exists
+;; -> 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-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
+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 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))
+ ;; Move POS to the beg/end of NODE. If NODE is nil, terminate.
+ ;; Return the position we moved to.
+ (advance (lambda (node)
+ (let ((dest (pcase side
+ ('beg (treesit-node-start node))
+ ('end (treesit-node-end node)))))
+ (if (null dest)
+ (throw 'term nil)
+ dest)))))
+ (catch 'term
+ (while (> counter 0)
+ (pcase-let
+ ((`(,prev ,next ,parent)
+ (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-thing
+ parent regexp pred)
+ prev nil
+ next nil))
+ ;; Move...
+ (if (> arg 0)
+ ;; ...forward.
+ (if (and (eq side 'beg)
+ ;; Should we skip the defun (recurse)?
+ (cond (next (not recursing)) ; [1] (see below)
+ (parent t) ; [2]
+ (t nil)))
+ ;; Special case: go to next beg-of-defun. Set POS
+ ;; to the end of next-sib/parent defun, and run one
+ ;; more step. If there is a next-sib defun, we only
+ ;; need to recurse once, so we don't need to recurse
+ ;; if we are already recursing [1]. If there is no
+ ;; next-sib but a parent, keep stepping out
+ ;; (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-thing
+ (treesit-node-end (or next parent))
+ 1 'beg regexp pred t)
+ (throw 'term nil)))
+ ;; Normal case.
+ (setq pos (funcall advance (or next parent))))
+ ;; ...backward.
+ (if (and (eq side 'end)
+ (cond (prev (not recursing))
+ (parent t)
+ (t nil)))
+ ;; Special case: go to prev end-of-defun.
+ (setq pos (or (treesit--navigate-thing
+ (treesit-node-start (or prev parent))
+ -1 'end regexp pred t)
+ (throw 'term nil)))
+ ;; Normal case.
+ (setq pos (funcall advance (or prev parent)))))
+ ;; A successful step! Decrement counter.
+ (cl-decf counter))))
+ ;; 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
@@ -1651,7 +2128,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))
@@ -1678,6 +2155,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.
@@ -1702,8 +2184,27 @@ before calling this function."
(setq-local indent-region-function #'treesit-indent-region))
;; Navigation.
(when treesit-defun-type-regexp
+ (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)
+ ;; `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)))
+ (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))
+ ;; Imenu.
+ (when treesit-simple-imenu-settings
+ (setq-local imenu-create-index-function
+ #'treesit-simple-imenu)))
;;; Debugging
@@ -1727,9 +2228,9 @@ in `treesit-parser-list'."
collect node))
(largest-node (car (last node-list)))
(parent (treesit-node-parent largest-node))
- ;; node-list-acending contains all the node bottom-up, then
+ ;; node-list-ascending contains all the node bottom-up, then
;; the parent.
- (node-list-acending
+ (node-list-ascending
(if (null largest-node)
;; If there are no nodes that start at point, just show
;; the node at point and its parent.
@@ -1740,7 +2241,7 @@ in `treesit-parser-list'."
(name ""))
;; We draw nodes like (parent field-name: (node)) recursively,
;; so it could be (node1 field-name: (node2 field-name: (node3))).
- (dolist (node node-list-acending)
+ (dolist (node node-list-ascending)
(setq
name
(concat
@@ -1771,7 +2272,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,
@@ -1817,10 +2318,23 @@ to the offending pattern and highlight the pattern."
(goto-char (point-min))
(insert (format "%s: %d\n" message start))
(forward-char start)))
- (pop-to-buffer buf))))))
+ (pop-to-buffer buf)
+ (view-mode))))))
;;; Explorer
+(defface treesit-explorer-anonymous-node
+ (let ((display t)
+ (atts '(:inherit shadow)))
+ `((,display . ,atts)))
+ "Face for anonymous nodes in tree-sitter explorer.")
+
+(defface treesit-explorer-field-name
+ (let ((display t)
+ (atts nil))
+ `((,display . ,atts)))
+ "Face for field names in tree-sitter explorer.")
+
(defvar-local treesit--explorer-buffer nil
"Buffer used to display the syntax tree.")
@@ -1999,7 +2513,8 @@ leaves point at the end of the last line of NODE."
;; draw everything in one line, other wise draw field name and the
;; rest of the node in two lines.
(when field-name
- (insert field-name ": ")
+ (insert (propertize (concat field-name ": ")
+ 'face 'treesit-explorer-field-name))
(when (and children (not all-children-inline))
(insert "\n")
(indent-to-column (1+ before-field-column))))
@@ -2058,7 +2573,7 @@ leaves point at the end of the last line of NODE."
(overlay-put ov 'treesit-node node)
(overlay-put ov 'evaporate t)
(when (not named)
- (overlay-put ov 'face 'shadow)))))
+ (overlay-put ov 'face 'treesit-explorer-anonymous-node)))))
(define-derived-mode treesit--explorer-tree-mode special-mode
"TS Explorer"
@@ -2077,7 +2592,7 @@ window."
(unless (buffer-live-p treesit--explorer-buffer)
(setq-local treesit--explorer-buffer
(get-buffer-create
- (format "*tree-sitter playground for %s*"
+ (format "*tree-sitter explorer for %s*"
(buffer-name))))
(setq-local treesit--explorer-language
(intern (completing-read
@@ -2096,6 +2611,174 @@ 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 build a 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): "))))))
+
+(defun treesit-install-language-grammar (lang)
+ "Build and install the tree-sitter language grammar library for LANG.
+
+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 56787f7c5ec..fc852ed7c0b 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
new file mode 100644
index 00000000000..0ab72eafce2
--- /dev/null
+++ b/lisp/use-package/bind-key.el
@@ -0,0 +1,564 @@
+;;; bind-key.el --- A simple way to manage personal keybindings -*- lexical-binding: t; -*-
+
+;; Copyright (c) 2012-2023 Free Software Foundation, Inc.
+
+;; Author: John Wiegley <johnw@newartisans.com>
+;; Maintainer: John Wiegley <johnw@newartisans.com>
+;; Created: 16 Jun 2012
+;; Version: 2.4.1
+;; Package-Requires: ((emacs "24.3"))
+;; Keywords: keys keybinding config dotemacs extensions
+;; URL: https://github.com/jwiegley/use-package
+
+;; 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:
+
+;; If you have lots of keybindings set in your init file, it can be
+;; hard to know which ones you haven't set yet, and which may now be
+;; overriding some new default in a new Emacs version. This module
+;; aims to solve that problem.
+;;
+;; Bind keys as follows in your init file:
+;;
+;; (bind-key "C-c x" 'my-ctrl-c-x-command)
+;;
+;; If the keybinding argument is a vector, it is passed straight to
+;; `define-key', so remapping a key with `[remap COMMAND]' works as
+;; expected:
+;;
+;; (bind-key [remap original-ctrl-c-x-command] 'my-ctrl-c-x-command)
+;;
+;; If you want the keybinding to override all minor modes that may also bind
+;; the same key, use the `bind-key*' form:
+;;
+;; (bind-key* "<C-return>" 'other-window)
+;;
+;; If you want to rebind a key only in a particular keymap, use:
+;;
+;; (bind-key "C-c x" 'my-ctrl-c-x-command some-other-mode-map)
+;;
+;; To unbind a key within a keymap (for example, to stop your favorite major
+;; mode from changing a binding that you don't want to override everywhere),
+;; use `unbind-key':
+;;
+;; (unbind-key "C-c x" some-other-mode-map)
+;;
+;; To bind multiple keys at once, or set up a prefix map, a `bind-keys' macro
+;; is provided. It accepts keyword arguments, please see its documentation
+;; for a detailed description.
+;;
+;; To add keys into a specific map, use :map argument
+;;
+;; (bind-keys :map dired-mode-map
+;; ("o" . dired-omit-mode)
+;; ("a" . some-custom-dired-function))
+;;
+;; To set up a prefix map, use `:prefix-map' and `:prefix' arguments (both are
+;; required)
+;;
+;; (bind-keys :prefix-map my-customize-prefix-map
+;; :prefix "C-c c"
+;; ("f" . customize-face)
+;; ("v" . customize-variable))
+;;
+;; You can combine all the keywords together. Additionally,
+;; `:prefix-docstring' can be specified to set documentation of created
+;; `:prefix-map' variable.
+;;
+;; To bind multiple keys in a `bind-key*' way (to be sure that your bindings
+;; will not be overridden by other modes), you may use `bind-keys*' macro:
+;;
+;; (bind-keys*
+;; ("C-o" . other-window)
+;; ("C-M-n" . forward-page)
+;; ("C-M-p" . backward-page))
+;;
+;; After Emacs loads, you can see a summary of all your personal keybindings
+;; currently in effect with this command:
+;;
+;; M-x describe-personal-keybindings
+;;
+;; This display will tell you if you've overridden a default keybinding, and
+;; what the default was. Also, it will tell you if the key was rebound after
+;; your binding it with `bind-key', and what it was rebound it to.
+;;
+;; See the `use-package' info manual for more information.
+
+;;; Code:
+
+(require 'cl-lib)
+(require 'easy-mmode)
+
+(defgroup bind-key nil
+ "A simple way to manage personal keybindings."
+ :group 'keyboard
+ :group 'convenience
+ :link '(emacs-commentary-link :tag "Commentary" "bind-key.el")
+ :version "29.1")
+
+(defcustom bind-key-column-widths '(18 . 40)
+ "Width of columns in `describe-personal-keybindings'."
+ :type '(cons integer integer)
+ :group 'bind-key)
+
+(defcustom bind-key-segregation-regexp
+ "\\`\\(\\(C-[chx] \\|M-[gso] \\)\\([CM]-\\)?\\|.+-\\)"
+ "Regexp used by \\[describe-personal-keybindings] to divide key sets."
+ :type 'regexp
+ :group 'bind-key)
+
+(defcustom bind-key-describe-special-forms nil
+ "If non-nil, extract docstrings from lambdas, closures and keymaps if possible."
+ :type 'boolean
+ :group 'bind-key)
+
+;; Create override-global-mode to force key remappings
+
+(defvar override-global-map (make-keymap)
+ "Keymap for `override-global-mode'.")
+
+(define-minor-mode override-global-mode
+ "A minor mode for allowing keybindings to override other modes.
+The main purpose of this mode is to simplify bindings keys in
+such a way that they take precedence over other modes.
+
+To achieve this, the keymap `override-global-map' is added to
+`emulation-mode-map-alists', which makes it take precedence over
+keymaps in `minor-mode-map-alist'. Thereby, key bindings get an
+even higher precedence than global key bindings defined with
+`keymap-global-set' (or, in Emacs 28 or older, `global-set-key').
+
+The macro `bind-key*' (which see) provides a convenient way to
+add keys to that keymap."
+ :init-value t
+ :lighter "")
+
+;; the keymaps in `emulation-mode-map-alists' take precedence over
+;; `minor-mode-map-alist'
+(add-to-list 'emulation-mode-map-alists
+ `((override-global-mode . ,override-global-map)))
+
+(defvar personal-keybindings nil
+ "List of bindings performed by `bind-key'.
+
+Elements have the form ((KEY . [MAP]) CMD ORIGINAL-CMD)")
+
+;;;###autoload
+(defmacro bind-key (key-name command &optional keymap predicate)
+ "Bind KEY-NAME to COMMAND in KEYMAP (`global-map' if not passed).
+
+KEY-NAME may be a vector, in which case it is passed straight to
+`define-key'. Or it may be a string to be interpreted as
+spelled-out keystrokes, e.g., \"C-c C-z\". See the documentation
+of `edmacro-mode' for details.
+
+COMMAND must be an interactive function or lambda form.
+
+KEYMAP, if present, should be a keymap variable or symbol.
+For example:
+
+ (bind-key \"M-h\" #\\='some-interactive-function my-mode-map)
+
+ (bind-key \"M-h\" #\\='some-interactive-function \\='my-mode-map)
+
+If PREDICATE is non-nil, it is a form evaluated to determine when
+a key should be bound. It must return non-nil in such cases.
+Emacs can evaluate this form at any time that it does redisplay
+or operates on menu data structures, so you should write it so it
+can safely be called at any time."
+ (let ((namevar (make-symbol "name"))
+ (keyvar (make-symbol "key"))
+ (kmapvar (make-symbol "kmap"))
+ (kdescvar (make-symbol "kdesc"))
+ (bindingvar (make-symbol "binding")))
+ `(let* ((,namevar ,key-name)
+ (,keyvar ,(if (stringp key-name) (read-kbd-macro key-name)
+ `(if (vectorp ,namevar) ,namevar
+ (read-kbd-macro ,namevar))))
+ (,kmapvar (or (if (and ,keymap (symbolp ,keymap))
+ (symbol-value ,keymap) ,keymap)
+ global-map))
+ (,kdescvar (cons (if (stringp ,namevar) ,namevar
+ (key-description ,namevar))
+ (if (symbolp ,keymap) ,keymap (quote ,keymap))))
+ (,bindingvar (lookup-key ,kmapvar ,keyvar)))
+ (let ((entry (assoc ,kdescvar personal-keybindings))
+ (details (list ,command
+ (unless (numberp ,bindingvar)
+ ,bindingvar))))
+ (if entry
+ (setcdr entry details)
+ (add-to-list 'personal-keybindings (cons ,kdescvar details))))
+ ,(if predicate
+ `(define-key ,kmapvar ,keyvar
+ '(menu-item "" nil :filter (lambda (&optional _)
+ (when ,predicate
+ ,command))))
+ `(define-key ,kmapvar ,keyvar ,command)))))
+
+;;;###autoload
+(defmacro unbind-key (key-name &optional keymap)
+ "Unbind the given KEY-NAME, within the KEYMAP (if specified).
+See `bind-key' for more details."
+ (let ((namevar (make-symbol "name"))
+ (kdescvar (make-symbol "kdesc")))
+ `(let* ((,namevar ,key-name)
+ (,kdescvar (cons (if (stringp ,namevar) ,namevar
+ (key-description ,namevar))
+ (if (symbolp ,keymap) ,keymap (quote ,keymap)))))
+ (bind-key--remove (if (vectorp ,namevar) ,namevar
+ (read-kbd-macro ,namevar))
+ (or (if (and ,keymap (symbolp ,keymap))
+ (symbol-value ,keymap) ,keymap)
+ global-map))
+ (setq personal-keybindings
+ (cl-delete-if (lambda (k) (equal (car k) ,kdescvar))
+ personal-keybindings))
+ nil)))
+
+(defun bind-key--remove (key keymap)
+ "Remove KEY from KEYMAP.
+
+In contrast to `define-key', this function removes the binding from the keymap."
+ (define-key keymap key nil)
+ ;; Split M-key in ESC key
+ (setq key (cl-mapcan (lambda (k)
+ (if (and (integerp k) (/= (logand k ?\M-\0) 0))
+ (list ?\e (logxor k ?\M-\0))
+ (list k)))
+ key))
+ ;; Delete single keys directly
+ (if (= (length key) 1)
+ (delete key keymap)
+ ;; Lookup submap and delete key from there
+ (let* ((prefix (vconcat (butlast key)))
+ (submap (lookup-key keymap prefix)))
+ (unless (keymapp submap)
+ (error "Not a keymap for %s" key))
+ (when (symbolp submap)
+ (setq submap (symbol-function submap)))
+ (delete (last key) submap)
+ ;; Delete submap if it is empty
+ (when (= 1 (length submap))
+ (bind-key--remove prefix keymap)))))
+
+;;;###autoload
+(defmacro bind-key* (key-name command &optional predicate)
+ "Similar to `bind-key', but overrides any mode-specific bindings."
+ `(bind-key ,key-name ,command override-global-map ,predicate))
+
+(defun bind-keys-form (args keymap)
+ "Bind multiple keys at once.
+
+Accepts keyword arguments:
+:map MAP - a keymap into which the keybindings should be
+ added
+:prefix KEY - prefix key for these bindings
+:prefix-map MAP - name of the prefix map that should be created
+ for these bindings
+:prefix-docstring STR - docstring for the prefix-map variable
+:menu-name NAME - optional menu string for prefix map
+:repeat-docstring STR - docstring for the repeat-map variable
+:repeat-map MAP - name of the repeat map that should be created
+ for these bindings. If specified, the
+ `repeat-map' property of each command bound
+ (within the scope of the `:repeat-map' keyword)
+ is set to this map.
+:exit BINDINGS - Within the scope of `:repeat-map' will bind the
+ key in the repeat map, but will not set the
+ `repeat-map' property of the bound command.
+:continue BINDINGS - Within the scope of `:repeat-map' forces the
+ same behavior as if no special keyword had
+ been used (that is, the command is bound, and
+ it's `repeat-map' property set)
+:filter FORM - optional form to determine when bindings apply
+
+The rest of the arguments are conses of keybinding string and a
+function symbol (unquoted)."
+ (let (map
+ prefix-doc
+ prefix-map
+ prefix
+ repeat-map
+ repeat-doc
+ repeat-type ;; Only used internally
+ filter
+ menu-name
+ pkg)
+
+ ;; Process any initial keyword arguments
+ (let ((cont t)
+ (arg-change-func 'cddr))
+ (while (and cont args)
+ (if (cond ((and (eq :map (car args))
+ (not prefix-map))
+ (setq map (cadr args)))
+ ((eq :prefix-docstring (car args))
+ (setq prefix-doc (cadr args)))
+ ((and (eq :prefix-map (car args))
+ (not (memq map '(global-map
+ override-global-map))))
+ (setq prefix-map (cadr args)))
+ ((eq :repeat-docstring (car args))
+ (setq repeat-doc (cadr args)))
+ ((and (eq :repeat-map (car args))
+ (not (memq map '(global-map
+ override-global-map))))
+ (setq repeat-map (cadr args))
+ (setq map repeat-map))
+ ((eq :continue (car args))
+ (setq repeat-type :continue
+ arg-change-func 'cdr))
+ ((eq :exit (car args))
+ (setq repeat-type :exit
+ arg-change-func 'cdr))
+ ((eq :prefix (car args))
+ (setq prefix (cadr args)))
+ ((eq :filter (car args))
+ (setq filter (cadr args)) t)
+ ((eq :menu-name (car args))
+ (setq menu-name (cadr args)))
+ ((eq :package (car args))
+ (setq pkg (cadr args))))
+ (setq args (funcall arg-change-func args))
+ (setq cont nil))))
+
+ (when (or (and prefix-map (not prefix))
+ (and prefix (not prefix-map)))
+ (error "Both :prefix-map and :prefix must be supplied"))
+
+ (when repeat-type
+ (unless repeat-map
+ (error ":continue and :exit require specifying :repeat-map")))
+
+ (when (and menu-name (not prefix))
+ (error "If :menu-name is supplied, :prefix must be too"))
+
+ (unless map (setq map keymap))
+
+ ;; Process key binding arguments
+ (let (first next)
+ (while args
+ (if (keywordp (car args))
+ (progn
+ (setq next args)
+ (setq args nil))
+ (if first
+ (nconc first (list (car args)))
+ (setq first (list (car args))))
+ (setq args (cdr args))))
+
+ (cl-flet
+ ((wrap (map bindings)
+ (if (and map pkg (not (memq map '(global-map
+ override-global-map))))
+ `((if (boundp ',map)
+ ,(macroexp-progn bindings)
+ (eval-after-load
+ ,(if (symbolp pkg) `',pkg pkg)
+ ',(macroexp-progn bindings))))
+ bindings)))
+
+ (append
+ (when prefix-map
+ `((defvar ,prefix-map)
+ ,@(when prefix-doc `((put ',prefix-map 'variable-documentation ,prefix-doc)))
+ ,@(if menu-name
+ `((define-prefix-command ',prefix-map nil ,menu-name))
+ `((define-prefix-command ',prefix-map)))
+ ,@(if (and map (not (eq map 'global-map)))
+ (wrap map `((bind-key ,prefix ',prefix-map ,map ,filter)))
+ `((bind-key ,prefix ',prefix-map nil ,filter)))))
+ (when repeat-map
+ `((defvar ,repeat-map (make-sparse-keymap)
+ ,@(when repeat-doc `(,repeat-doc)))))
+ (wrap map
+ (cl-mapcan
+ (lambda (form)
+ (let ((fun (and (cdr form) (list 'function (cdr form)))))
+ (if prefix-map
+ `((bind-key ,(car form) ,fun ,prefix-map ,filter))
+ (if (and map (not (eq map 'global-map)))
+ ;; Only needed in this branch, since when
+ ;; repeat-map is non-nil, map is always
+ ;; non-nil
+ `(,@(when (and repeat-map (not (eq repeat-type :exit)))
+ `((put ,fun 'repeat-map ',repeat-map)))
+ (bind-key ,(car form) ,fun ,map ,filter))
+ `((bind-key ,(car form) ,fun nil ,filter))))))
+ first))
+ (when next
+ (bind-keys-form `(,@(when repeat-map `(:repeat-map ,repeat-map))
+ ,@(if pkg
+ (cons :package (cons pkg next))
+ next)) map)))))))
+
+;;;###autoload
+(defmacro bind-keys (&rest args)
+ "Bind multiple keys at once.
+
+Accepts keyword arguments:
+:map MAP - a keymap into which the keybindings should be
+ added
+:prefix KEY - prefix key for these bindings
+:prefix-map MAP - name of the prefix map that should be created
+ for these bindings
+:prefix-docstring STR - docstring for the prefix-map variable
+:menu-name NAME - optional menu string for prefix map
+:repeat-docstring STR - docstring for the repeat-map variable
+:repeat-map MAP - name of the repeat map that should be created
+ for these bindings. If specified, the
+ `repeat-map' property of each command bound
+ (within the scope of the `:repeat-map' keyword)
+ is set to this map.
+:exit BINDINGS - Within the scope of `:repeat-map' will bind the
+ key in the repeat map, but will not set the
+ `repeat-map' property of the bound command.
+:continue BINDINGS - Within the scope of `:repeat-map' forces the
+ same behavior as if no special keyword had
+ been used (that is, the command is bound, and
+ it's `repeat-map' property set)
+:filter FORM - optional form to determine when bindings apply
+
+The rest of the arguments are conses of keybinding string and a
+function symbol (unquoted)."
+ (macroexp-progn (bind-keys-form args nil)))
+
+;;;###autoload
+(defmacro bind-keys* (&rest args)
+ "Bind multiple keys at once, in `override-global-map'.
+Accepts the same keyword arguments as `bind-keys' (which see).
+
+This binds keys in such a way that bindings are not overridden by
+other modes. See `override-global-mode'."
+ (macroexp-progn (bind-keys-form args 'override-global-map)))
+
+(defun get-binding-description (elem)
+ (cond
+ ((listp elem)
+ (cond
+ ((memq (car elem) '(lambda function))
+ (if (and bind-key-describe-special-forms
+ (stringp (nth 2 elem)))
+ (nth 2 elem)
+ "#<lambda>"))
+ ((eq 'closure (car elem))
+ (if (and bind-key-describe-special-forms
+ (stringp (nth 3 elem)))
+ (nth 3 elem)
+ "#<closure>"))
+ ((eq 'keymap (car elem))
+ "#<keymap>")
+ (t
+ elem)))
+ ;; must be a symbol, non-symbol keymap case covered above
+ ((and bind-key-describe-special-forms (keymapp elem))
+ (let ((doc (get elem 'variable-documentation)))
+ (if (stringp doc) doc elem)))
+ ((symbolp elem)
+ elem)
+ (t
+ "#<byte-compiled lambda>")))
+
+(defun compare-keybindings (l r)
+ (let* ((regex bind-key-segregation-regexp)
+ (lgroup (and (string-match regex (caar l))
+ (match-string 0 (caar l))))
+ (rgroup (and (string-match regex (caar r))
+ (match-string 0 (caar r))))
+ (lkeymap (cdar l))
+ (rkeymap (cdar r)))
+ (cond
+ ((and (null lkeymap) rkeymap)
+ (cons t t))
+ ((and lkeymap (null rkeymap))
+ (cons nil t))
+ ((and lkeymap rkeymap
+ (not (string= (symbol-name lkeymap) (symbol-name rkeymap))))
+ (cons (string< (symbol-name lkeymap) (symbol-name rkeymap)) t))
+ ((and (null lgroup) rgroup)
+ (cons t t))
+ ((and lgroup (null rgroup))
+ (cons nil t))
+ ((and lgroup rgroup)
+ (if (string= lgroup rgroup)
+ (cons (string< (caar l) (caar r)) nil)
+ (cons (string< lgroup rgroup) t)))
+ (t
+ (cons (string< (caar l) (caar r)) nil)))))
+
+;;;###autoload
+(defun describe-personal-keybindings ()
+ "Display all the personal keybindings defined by `bind-key'."
+ (interactive)
+ (with-output-to-temp-buffer "*Personal Keybindings*"
+ (princ (format (concat "Key name%s Command%s Comments\n%s %s "
+ "---------------------\n")
+ (make-string (- (car bind-key-column-widths) 9) ? )
+ (make-string (- (cdr bind-key-column-widths) 8) ? )
+ (make-string (1- (car bind-key-column-widths)) ?-)
+ (make-string (1- (cdr bind-key-column-widths)) ?-)))
+ (let (last-binding)
+ (dolist (binding
+ (setq personal-keybindings
+ (sort personal-keybindings
+ (lambda (l r)
+ (car (compare-keybindings l r))))))
+
+ (if (not (eq (cdar last-binding) (cdar binding)))
+ (princ (format "\n\n%s: %s\n%s\n\n"
+ (cdar binding) (caar binding)
+ (make-string (+ 21 (car bind-key-column-widths)
+ (cdr bind-key-column-widths)) ?-)))
+ (if (and last-binding
+ (cdr (compare-keybindings last-binding binding)))
+ (princ "\n")))
+
+ (let* ((key-name (caar binding))
+ (at-present (lookup-key (or (symbol-value (cdar binding))
+ (current-global-map))
+ (read-kbd-macro key-name)))
+ (command (nth 1 binding))
+ (was-command (nth 2 binding))
+ (command-desc (get-binding-description command))
+ (was-command-desc (and was-command
+ (get-binding-description was-command)))
+ (at-present-desc (get-binding-description at-present)))
+ (let ((line
+ (format
+ (format "%%-%ds%%-%ds%%s\n" (car bind-key-column-widths)
+ (cdr bind-key-column-widths))
+ key-name (format "`%s'" command-desc)
+ (if (string= command-desc at-present-desc)
+ (if (or (null was-command)
+ (string= command-desc was-command-desc))
+ ""
+ (format "was `%s'" was-command-desc))
+ (format "[now: `%s']" at-present)))))
+ (princ (if (string-match "[ \t]+\n" line)
+ (replace-match "\n" t t line)
+ line))))
+
+ (setq last-binding binding)))))
+
+(provide 'bind-key)
+
+;; Local Variables:
+;; outline-regexp: ";;;\\(;* [^\s\t\n]\\|###autoload\\)\\|("
+;; End:
+
+;;; bind-key.el ends here
diff --git a/lisp/use-package/use-package-bind-key.el b/lisp/use-package/use-package-bind-key.el
new file mode 100644
index 00000000000..47eb066eba0
--- /dev/null
+++ b/lisp/use-package/use-package-bind-key.el
@@ -0,0 +1,176 @@
+;;; use-package-bind-key.el --- Support for the :bind/:bind-keymap keywords -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
+
+;; Author: John Wiegley <johnw@newartisans.com>
+;; Maintainer: John Wiegley <johnw@newartisans.com>
+
+;; 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:
+
+;; Provides support for the :bind, :bind*, :bind-keymap and :bind-keymap*
+;; keywords. Note that these are currently still baked into
+;; `use-package-keywords' and `use-package-deferring-keywords', although this
+;; is harmless if they are never used.
+;;
+;; These keywords are made available by default by requiring `use-package'.
+;;
+;; See the `use-package' info manual for more information.
+
+;;; Code:
+
+(require 'use-package-core)
+(require 'bind-key)
+
+;;;###autoload
+(defun use-package-autoload-keymap (keymap-symbol package override)
+ "Load PACKAGE and bind key sequence invoking this function to KEYMAP-SYMBOL.
+Then simulate pressing the same key sequence a again, so that the
+next key pressed is routed to the newly loaded keymap.
+
+This function supports use-package's :bind-keymap keyword. It
+works by binding the given key sequence to an invocation of this
+function for a particular keymap. The keymap is expected to be
+defined by the package. In this way, loading the package is
+deferred until the prefix key sequence is pressed."
+ (if (not (require package nil t))
+ (use-package-error (format "Cannot load package.el: %s" package))
+ (if (and (boundp keymap-symbol)
+ (keymapp (symbol-value keymap-symbol)))
+ (let* ((kv (this-command-keys-vector))
+ (key (key-description kv))
+ (keymap (symbol-value keymap-symbol)))
+ (if override
+ (bind-key* key keymap)
+ (bind-key key keymap))
+ (setq unread-command-events
+ (mapcar (lambda (ev) (cons t ev))
+ (listify-key-sequence kv))))
+ (use-package-error
+ (format "package.el %s failed to define keymap %s"
+ package keymap-symbol)))))
+
+;;;###autoload
+(defun use-package-normalize-binder (name keyword args)
+ (let ((arg args)
+ args*)
+ (while arg
+ (let ((x (car arg)))
+ (cond
+ ;; (KEY . COMMAND)
+ ((and (consp x)
+ (or (stringp (car x))
+ (vectorp (car x)))
+ (or (use-package-recognize-function (cdr x) t #'stringp)))
+ (setq args* (nconc args* (list x)))
+ (setq arg (cdr arg)))
+ ;; KEYWORD
+ ;; :map KEYMAP
+ ;; :prefix-docstring STRING
+ ;; :prefix-map SYMBOL
+ ;; :prefix STRING
+ ;; :repeat-docstring STRING
+ ;; :repeat-map SYMBOL
+ ;; :filter SEXP
+ ;; :menu-name STRING
+ ;; :package SYMBOL
+ ;; :continue and :exit are used within :repeat-map
+ ((or (and (eq x :map) (symbolp (cadr arg)))
+ (and (eq x :prefix) (stringp (cadr arg)))
+ (and (eq x :prefix-map) (symbolp (cadr arg)))
+ (and (eq x :prefix-docstring) (stringp (cadr arg)))
+ (and (eq x :repeat-map) (symbolp (cadr arg)))
+ (eq x :continue)
+ (eq x :exit)
+ (and (eq x :repeat-docstring) (stringp (cadr arg)))
+ (eq x :filter)
+ (and (eq x :menu-name) (stringp (cadr arg)))
+ (and (eq x :package) (symbolp (cadr arg))))
+ (setq args* (nconc args* (list x (cadr arg))))
+ (setq arg (cddr arg)))
+ ((listp x)
+ (setq args*
+ (nconc args* (use-package-normalize-binder name keyword x)))
+ (setq arg (cdr arg)))
+ (t
+ ;; Error!
+ (use-package-error
+ (concat (symbol-name name)
+ " wants arguments acceptable to the `bind-keys' macro,"
+ " or a list of such values"))))))
+ args*))
+
+;;;; :bind, :bind*
+
+;;;###autoload
+(defalias 'use-package-normalize/:bind 'use-package-normalize-binder)
+;;;###autoload
+(defalias 'use-package-normalize/:bind* 'use-package-normalize-binder)
+
+;; jww (2017-12-07): This is too simplistic. It will fail to determine
+;; autoloads in this situation:
+;; (use-package foo
+;; :bind (:map foo-map (("C-a" . func))))
+;;;###autoload
+(defalias 'use-package-autoloads/:bind 'use-package-autoloads-mode)
+;;;###autoload
+(defalias 'use-package-autoloads/:bind* 'use-package-autoloads-mode)
+
+;;;###autoload
+(defun use-package-handler/:bind
+ (name _keyword args rest state &optional bind-macro)
+ (use-package-concat
+ (use-package-process-keywords name rest state)
+ `(,@(mapcar
+ #'(lambda (xs)
+ `(,(if bind-macro bind-macro 'bind-keys)
+ :package ,name ,@(use-package-normalize-commands xs)))
+ (use-package-split-list-at-keys :break args)))))
+
+(defun use-package-handler/:bind* (name keyword arg rest state)
+ (use-package-handler/:bind name keyword arg rest state 'bind-keys*))
+
+;;;; :bind-keymap, :bind-keymap*
+
+;;;###autoload
+(defalias 'use-package-normalize/:bind-keymap 'use-package-normalize-binder)
+;;;###autoload
+(defalias 'use-package-normalize/:bind-keymap* 'use-package-normalize-binder)
+
+;;;###autoload
+(defun use-package-handler/:bind-keymap
+ (name _keyword args rest state &optional override)
+ (use-package-concat
+ (use-package-process-keywords name rest state)
+ (mapcar
+ #'(lambda (binding)
+ `(,(if override 'bind-key* 'bind-key)
+ ,(car binding)
+ #'(lambda ()
+ (interactive)
+ (use-package-autoload-keymap
+ ',(cdr binding) ',(use-package-as-symbol name)
+ ,override))))
+ args)))
+
+;;;###autoload
+(defun use-package-handler/:bind-keymap* (name keyword arg rest state)
+ (use-package-handler/:bind-keymap name keyword arg rest state t))
+
+(provide 'use-package-bind-key)
+
+;;; use-package-bind-key.el ends here
diff --git a/lisp/use-package/use-package-core.el b/lisp/use-package/use-package-core.el
new file mode 100644
index 00000000000..379e119b60f
--- /dev/null
+++ b/lisp/use-package/use-package-core.el
@@ -0,0 +1,1691 @@
+;;; use-package-core.el --- A configuration macro for simplifying your .emacs -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
+
+;; Author: John Wiegley <johnw@newartisans.com>
+;; Maintainer: John Wiegley <johnw@newartisans.com>
+
+;; 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 contains the core implementation of the `use-package'
+;; macro.
+;;
+;; See the `use-package' info manual for more information.
+
+;;; Code:
+
+(require 'bytecomp)
+(require 'cl-lib)
+(require 'tabulated-list)
+
+(eval-and-compile
+ ;; Declare a synthetic theme for :custom variables.
+ ;; Necessary in order to avoid having those variables saved by custom.el.
+ (deftheme use-package))
+
+(enable-theme 'use-package)
+;; Remove the synthetic use-package theme from the enabled themes, so
+;; iterating over them to "disable all themes" won't disable it.
+(setq custom-enabled-themes (remq 'use-package custom-enabled-themes))
+
+(eval-when-compile
+ (if (and (eq emacs-major-version 24) (eq emacs-minor-version 3))
+ (progn
+ (defsubst hash-table-keys (hash-table)
+ "Return a list of keys in HASH-TABLE."
+ (cl-loop for k being the hash-keys of hash-table collect k))
+ (defsubst string-suffix-p (suffix string &optional ignore-case)
+ (let ((start-pos (- (length string) (length suffix))))
+ (and (>= start-pos 0)
+ (eq t (compare-strings suffix nil nil
+ string start-pos nil ignore-case))))))
+ (require 'subr-x)))
+
+(eval-when-compile
+ (require 'regexp-opt))
+
+(defgroup use-package nil
+ "A `use-package' declaration for simplifying your `.emacs'."
+ :group 'initialization
+ :link '(custom-manual "(use-package) Top")
+ :version "29.1")
+
+(defconst use-package-version "2.4.4"
+ "This version of `use-package'.")
+
+(defcustom use-package-keywords
+ '(:disabled
+ :load-path
+ :requires
+ :defines
+ :functions
+ :preface
+ :if :when :unless
+ :no-require
+ :catch
+ :after
+ :custom
+ :custom-face
+ :bind
+ :bind*
+ :bind-keymap
+ :bind-keymap*
+ :interpreter
+ :mode
+ :magic
+ :magic-fallback
+ :hook
+ ;; Any other keyword that also declares commands to be autoloaded (such as
+ ;; :bind) must appear before this keyword.
+ :commands
+ :autoload
+ :init
+ :defer
+ :demand
+ :load
+ ;; This must occur almost last; the only forms which should appear after
+ ;; are those that must happen directly after the config forms.
+ :config)
+ "The set of valid keywords, in the order they are processed in.
+The order of this list is *very important*, so it is only
+advisable to insert new keywords, never to delete or reorder
+them. Further, attention should be paid to the NEWS.md if the
+default order ever changes, as they may have subtle effects on
+the semantics of `use-package' declarations and may necessitate
+changing where you had inserted a new keyword earlier.
+
+Note that `:disabled' is special in this list, as it causes
+nothing at all to happen, even if the rest of the `use-package'
+declaration is incorrect."
+ :type '(repeat symbol)
+ :group 'use-package)
+
+(defcustom use-package-deferring-keywords
+ '(:bind-keymap
+ :bind-keymap*
+ :commands
+ :autoload)
+ "Unless `:demand' is used, keywords in this list imply deferred loading.
+The reason keywords like `:hook' are not in this list is that
+they only imply deferred loading if they reference actual
+function symbols that can be autoloaded from the module; whereas
+the default keywords provided here always defer loading unless
+otherwise requested."
+ :type '(repeat symbol)
+ :group 'use-package)
+
+(defcustom use-package-ignore-unknown-keywords nil
+ "If non-nil, warn instead of signaling error for unknown keywords.
+The unknown keyword and its associated arguments will be ignored
+in the `use-package' expansion."
+ :type 'boolean
+ :group 'use-package)
+
+(defcustom use-package-use-theme t
+ "If non-nil, use a custom theme to avoid saving :custom
+variables twice (once in the Custom file, once in the use-package
+call)."
+ :type 'boolean
+ :group 'use-package)
+
+(defcustom use-package-verbose nil
+ "Whether to report about loading and configuration details.
+If you customize this, then you should require the `use-package'
+feature in files that use `use-package', even if these files only
+contain compiled expansions of the macros. If you don't do so,
+then the expanded macros do their job silently."
+ :type '(choice (const :tag "Quiet, without catching errors" errors)
+ (const :tag "Quiet" nil)
+ (const :tag "Verbose" t)
+ (const :tag "Debug" debug))
+ :group 'use-package)
+
+(defcustom use-package-check-before-init nil
+ "If non-nil, check that package exists before executing its `:init' block.
+This check is performed by calling `locate-library'."
+ :type 'boolean
+ :group 'use-package)
+
+(defcustom use-package-always-defer nil
+ "If non-nil, assume `:defer t' unless `:demand' is used.
+See also `use-package-defaults', which uses this value."
+ :type 'boolean
+ :group 'use-package)
+
+(defcustom use-package-always-demand nil
+ "If non-nil, assume `:demand t' unless `:defer' is used.
+See also `use-package-defaults', which uses this value."
+ :type 'boolean
+ :group 'use-package)
+
+(defcustom use-package-defaults
+ '(;; this '(t) has special meaning; see `use-package-handler/:config'
+ (:config '(t) t)
+ (:init nil t)
+ (:catch t (lambda (name args)
+ (not use-package-expand-minimally)))
+ (:defer use-package-always-defer
+ (lambda (name args)
+ (and use-package-always-defer
+ (not (plist-member args :defer))
+ (not (plist-member args :demand)))))
+ (:demand use-package-always-demand
+ (lambda (name args)
+ (and use-package-always-demand
+ (not (plist-member args :defer))
+ (not (plist-member args :demand))))))
+ "Default values for specified `use-package' keywords.
+Each entry in the alist is a list of three elements:
+The first element is the `use-package' keyword.
+
+The second is a form that can be evaluated to get the default
+value. It can also be a function that will receive the name of
+the `use-package' declaration and the keyword plist given to
+`use-package', in normalized form. The value it returns should
+also be in normalized form (which is sometimes *not* what one
+would normally write in a `use-package' declaration, so use
+caution).
+
+The third element is a form that can be evaluated to determine
+whether or not to assign a default value; if it evaluates to nil,
+then the default value is not assigned even if the keyword is not
+present in the `use-package' form. This third element may also be
+a function, in which case it receives the name of the package (as
+a symbol) and a list of keywords (in normalized form). It should
+return nil or non-nil depending on whether defaulting should be
+attempted."
+ :type `(repeat
+ (list (symbol :tag "Keyword")
+ (choice :tag "Default value" sexp function)
+ (choice :tag "Enable if non-nil" sexp function)))
+ :group 'use-package)
+
+(defcustom use-package-merge-key-alist
+ '((:if . (lambda (new old) `(and ,new ,old)))
+ (:after . (lambda (new old) `(:all ,new ,old)))
+ (:defer . (lambda (new old) old))
+ (:bind . (lambda (new old) (append new (list :break) old))))
+ "Alist of keys and the functions used to merge multiple values.
+For example, if the following form is provided:
+
+ (use-package foo :if pred1 :if pred2)
+
+Then based on the above defaults, the merged result will be:
+
+ (use-package foo :if (and pred1 pred2))
+
+This is done so that, at the stage of invoking handlers, each
+handler is called only once."
+ :type `(repeat
+ (cons (choice :tag "Keyword"
+ ,@(mapcar #'(lambda (k) (list 'const k))
+ use-package-keywords)
+ (const :tag "Any" t))
+ function))
+ :group 'use-package)
+
+(defcustom use-package-hook-name-suffix "-hook"
+ "Text append to the name of hooks mentioned by :hook.
+Set to nil if you don't want this to happen; it's only a
+convenience."
+ :type '(choice string (const :tag "No suffix" nil))
+ :group 'use-package)
+
+(defcustom use-package-minimum-reported-time 0.1
+ "Minimal load time that will be reported.
+Note that `use-package-verbose' has to be set to a non-nil value
+for anything to be reported at all."
+ :type 'number
+ :group 'use-package)
+
+(defcustom use-package-inject-hooks nil
+ "If non-nil, add hooks to the `:init' and `:config' sections.
+In particular, for a given package `foo', the following hooks
+become available:
+
+ `use-package--foo--pre-init-hook'
+ `use-package--foo--post-init-hook'
+ `use-package--foo--pre-config-hook'
+ `use-package--foo--post-config-hook'
+
+This way, you can add to these hooks before evaluation of a
+`use-package` declaration, and exercise some control over what
+happens.
+
+NOTE: These hooks are run even if the user does not specify an
+`:init' or `:config' block, and they will happen at the regular
+time when initialization and configuration would have been
+performed.
+
+NOTE: If the `pre-init' hook return a nil value, that block's
+user-supplied configuration is not evaluated, so be certain to
+return t if you only wish to add behavior to what the user had
+specified."
+ :type 'boolean
+ :group 'use-package)
+
+(defcustom use-package-expand-minimally nil
+ "If non-nil, make the expanded code as minimal as possible.
+This disables:
+
+ - Printing to the *Messages* buffer of slowly-evaluating forms
+ - Capturing of load errors (normally redisplayed as warnings)
+ - Conditional loading of packages (load failures become errors)
+
+The main advantage to this variable is that, if you know your
+configuration works, it will make the byte-compiled file as
+minimal as possible. It can also help with reading macro-expanded
+definitions, to understand the main intent of what's happening."
+ :type 'boolean
+ :group 'use-package)
+
+(defcustom use-package-form-regexp-eval
+ `(concat ,(eval-when-compile
+ (concat "^\\s-*("
+ (regexp-opt '("use-package" "require") t)
+ "\\s-+\\("))
+ (or (bound-and-true-p lisp-mode-symbol-regexp)
+ "\\(?:\\sw\\|\\s_\\|\\\\.\\)+") "\\)")
+ "Sexp providing regexp for finding `use-package' forms in user files.
+This is used by `use-package-jump-to-package-form' and
+`use-package-enable-imenu-support'."
+ :type 'sexp
+ :group 'use-package)
+
+(defcustom use-package-enable-imenu-support nil
+ "If non-nil, cause imenu to see `use-package' declarations.
+This is done by adjusting `lisp-imenu-generic-expression' to
+include support for finding `use-package' and `require' forms.
+
+Must be set before loading `use-package'."
+ :type 'boolean
+ :set
+ #'(lambda (sym value)
+ (eval-after-load 'lisp-mode
+ (if value
+ `(add-to-list 'lisp-imenu-generic-expression
+ (list "Packages" ,use-package-form-regexp-eval 2))
+ `(setq lisp-imenu-generic-expression
+ (remove (list "Packages" ,use-package-form-regexp-eval 2)
+ lisp-imenu-generic-expression))))
+ (set-default sym value))
+ :group 'use-package)
+
+(defconst use-package-font-lock-keywords
+ '(("(\\(use-package\\)\\_>[ \t']*\\(\\(?:\\sw\\|\\s_\\)+\\)?"
+ (1 font-lock-keyword-face)
+ (2 font-lock-constant-face nil t))))
+
+(font-lock-add-keywords 'emacs-lisp-mode use-package-font-lock-keywords)
+
+(defcustom use-package-compute-statistics nil
+ "If non-nil, compute statistics concerned `use-package' declarations.
+View the statistical report using `use-package-report'. Note that
+if this option is enabled, you must require `use-package' in your
+user init file at loadup time, or you will see errors concerning
+undefined variables."
+ :type 'boolean
+ :group 'use-package)
+
+(defvar use-package-statistics (make-hash-table))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Utility functions
+;;
+
+(defsubst use-package-error (msg)
+ "Report MSG as an error, so the user knows it came from this package."
+ (error "use-package: %s" msg))
+
+(defsubst use-package-concat (&rest elems)
+ "Delete all empty lists from ELEMS (nil or (list nil)), and append them."
+ (apply #'append (delete nil (delete (list nil) elems))))
+
+(defsubst use-package-non-nil-symbolp (sym)
+ (and sym (symbolp sym)))
+
+(defsubst use-package-as-symbol (string-or-symbol)
+ "If STRING-OR-SYMBOL is already a symbol, return it.
+Otherwise convert it to a symbol and return that."
+ (if (symbolp string-or-symbol) string-or-symbol
+ (intern string-or-symbol)))
+
+(defsubst use-package-as-string (string-or-symbol)
+ "If STRING-OR-SYMBOL is already a string, return it.
+Otherwise convert it to a string and return that."
+ (if (stringp string-or-symbol) string-or-symbol
+ (symbol-name string-or-symbol)))
+
+(defsubst use-package-regex-p (re)
+ "Return t if RE is some regexp-like thing."
+ (or (and (listp re) (eq (car re) 'rx))
+ (stringp re)))
+
+(defun use-package-normalize-regex (re)
+ "Given some regexp-like thing in RE, resolve to a regular expression."
+ (cond
+ ((and (listp re) (eq (car re) 'rx)) (eval re))
+ ((stringp re) re)
+ (t (error "Not recognized as regular expression: %s" re))))
+
+(defsubst use-package-is-pair (x car-pred cdr-pred)
+ "Return non-nil if X is a cons satisfying the given predicates.
+CAR-PRED and CDR-PRED are applied to X's `car' and `cdr',
+respectively."
+ (and (consp x)
+ (funcall car-pred (car x))
+ (funcall cdr-pred (cdr x))))
+
+(defun use-package-as-mode (string-or-symbol)
+ "If STRING-OR-SYMBOL ends in `-mode' (or its name does), return
+it as a symbol. Otherwise, return it as a symbol with `-mode'
+appended."
+ (let ((string (use-package-as-string string-or-symbol)))
+ (intern (if (string-match "-mode\\'" string)
+ string
+ (concat string "-mode")))))
+
+(defsubst use-package-load-name (name &optional noerror)
+ "Return a form which will load or require NAME.
+It does the right thing no matter if NAME is a string or symbol.
+Argument NOERROR means to indicate load failures as a warning."
+ (if (stringp name)
+ `(load ,name ,noerror)
+ `(require ',name nil ,noerror)))
+
+(defun use-package-hook-injector (name-string keyword body)
+ "Wrap pre/post hook injections around the given BODY for KEYWORD.
+The BODY is a list of forms, so `((foo))' if only `foo' is being called."
+ (if (not use-package-inject-hooks)
+ body
+ (let ((keyword-name (substring (format "%s" keyword) 1)))
+ `((when (run-hook-with-args-until-failure
+ ',(intern (concat "use-package--" name-string
+ "--pre-" keyword-name "-hook")))
+ ,@body
+ (run-hooks
+ ',(intern (concat "use-package--" name-string
+ "--post-" keyword-name "-hook"))))))))
+
+(defun use-package-with-elapsed-timer (text body)
+ "BODY is a list of forms, so `((foo))' if only `foo' is being called."
+ (declare (indent 1))
+ (if use-package-expand-minimally
+ body
+ (let ((nowvar (make-symbol "now")))
+ (if (bound-and-true-p use-package-verbose)
+ `((let ((,nowvar (current-time)))
+ (message "%s..." ,text)
+ (prog1
+ ,(macroexp-progn body)
+ (let ((elapsed
+ (float-time (time-subtract (current-time) ,nowvar))))
+ (if (> elapsed ,use-package-minimum-reported-time)
+ (message "%s...done (%.3fs)" ,text elapsed)
+ (message "%s...done" ,text))))))
+ body))))
+
+(put 'use-package-with-elapsed-timer 'lisp-indent-function 1)
+
+(defun use-package-require (name &optional no-require body)
+ (if use-package-expand-minimally
+ (use-package-concat
+ (unless no-require
+ (list (use-package-load-name name)))
+ body)
+ (if no-require
+ body
+ (use-package-with-elapsed-timer
+ (format "Loading package %s" name)
+ `((if (not ,(use-package-load-name name t))
+ (display-warning 'use-package
+ (format "Cannot load %s" ',name)
+ :error)
+ ,@body))))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Property lists
+;;
+
+(defun use-package-plist-delete (plist property)
+ "Delete PROPERTY from PLIST.
+This is in contrast to merely setting it to 0."
+ (let (p)
+ (while plist
+ (if (not (eq property (car plist)))
+ (setq p (plist-put p (car plist) (nth 1 plist))))
+ (setq plist (cddr plist)))
+ p))
+
+(defun use-package-plist-delete-first (plist property)
+ "Delete PROPERTY from PLIST.
+This is in contrast to merely setting it to 0."
+ (let (p)
+ (while plist
+ (if (eq property (car plist))
+ (setq p (nconc p (cddr plist))
+ plist nil)
+ (setq p (nconc p (list (car plist) (cadr plist)))
+ plist (cddr plist))))
+ p))
+
+(defsubst use-package-plist-maybe-put (plist property value)
+ "Add a VALUE for PROPERTY to PLIST, if it does not already exist."
+ (if (plist-member plist property)
+ plist
+ (plist-put plist property value)))
+
+(defsubst use-package-plist-cons (plist property value)
+ "Cons VALUE onto the head of the list at PROPERTY in PLIST."
+ (plist-put plist property (cons value (plist-get plist property))))
+
+(defsubst use-package-plist-append (plist property value)
+ "Append VALUE onto the front of the list at PROPERTY in PLIST."
+ (plist-put plist property (append value (plist-get plist property))))
+
+(defun use-package-split-list (pred xs)
+ (let ((ys (list nil)) (zs (list nil)) flip)
+ (cl-dolist (x xs)
+ (if flip
+ (nconc zs (list x))
+ (if (funcall pred x)
+ (progn
+ (setq flip t)
+ (nconc zs (list x)))
+ (nconc ys (list x)))))
+ (cons (cdr ys) (cdr zs))))
+
+(defun use-package-split-list-at-keys (key lst)
+ (and lst
+ (let ((xs (use-package-split-list (apply-partially #'eq key) lst)))
+ (cons (car xs) (use-package-split-list-at-keys key (cddr xs))))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Keywords
+;;
+
+(defun use-package-keyword-index (keyword)
+ (cl-loop named outer
+ with index = 0
+ for k in use-package-keywords do
+ (if (eq k keyword)
+ (cl-return-from outer index))
+ (cl-incf index)))
+
+(defun use-package-normalize-plist (name input &optional plist merge-function)
+ "Given a pseudo-plist, normalize it to a regular plist.
+The normalized key/value pairs from input are added to PLIST,
+extending any keys already present."
+ (if (null input)
+ plist
+ (let* ((keyword (car input))
+ (xs (use-package-split-list #'keywordp (cdr input)))
+ (args (car xs))
+ (tail (cdr xs))
+ (normalizer
+ (intern-soft (concat "use-package-normalize/"
+ (symbol-name keyword))))
+ (arg (and (functionp normalizer)
+ (funcall normalizer name keyword args)))
+ (error-string (format "Unrecognized keyword: %s" keyword)))
+ (if (memq keyword use-package-keywords)
+ (progn
+ (setq plist (use-package-normalize-plist
+ name tail plist merge-function))
+ (plist-put plist keyword
+ (if (plist-member plist keyword)
+ (funcall merge-function keyword arg
+ (plist-get plist keyword))
+ arg)))
+ (if use-package-ignore-unknown-keywords
+ (progn
+ (display-warning 'use-package error-string)
+ (use-package-normalize-plist
+ name tail plist merge-function))
+ (use-package-error error-string))))))
+
+(defun use-package-unalias-keywords (_name args)
+ (setq args (cl-nsubstitute :if :when args))
+ (let (temp)
+ (while (setq temp (plist-get args :unless))
+ (setq args (use-package-plist-delete-first args :unless)
+ args (append args `(:if (not ,temp))))))
+ args)
+
+(defun use-package-merge-keys (key new old)
+ (let ((merger (assq key use-package-merge-key-alist)))
+ (if merger
+ (funcall (cdr merger) new old)
+ (append new old))))
+
+(defun use-package-sort-keywords (plist)
+ (let (plist-grouped)
+ (while plist
+ (push (cons (car plist) (cadr plist))
+ plist-grouped)
+ (setq plist (cddr plist)))
+ (let (result)
+ (cl-dolist
+ (x
+ (nreverse
+ (sort plist-grouped
+ #'(lambda (l r) (< (use-package-keyword-index (car l))
+ (use-package-keyword-index (car r)))))))
+ (setq result (cons (car x) (cons (cdr x) result))))
+ result)))
+
+(defun use-package-normalize-keywords (name args)
+ (let* ((name-symbol (if (stringp name) (intern name) name))
+ (name-string (symbol-name name-symbol)))
+
+ ;; The function `elisp--local-variables' inserts this unbound variable into
+ ;; macro forms to determine the locally bound variables for
+ ;; `elisp-completion-at-point'. It ends up throwing a lot of errors since it
+ ;; can occupy the position of a keyword (or look like a second argument to a
+ ;; keyword that takes one). Deleting it when it's at the top level should be
+ ;; harmless since there should be no locally bound variables to discover
+ ;; here anyway.
+ (setq args (delq 'elisp--witness--lisp args))
+
+ ;; Reduce the set of keywords down to its most fundamental expression.
+ (setq args (use-package-unalias-keywords name-symbol args))
+
+ ;; Normalize keyword values, coalescing multiple occurrences.
+ (setq args (use-package-normalize-plist name-symbol args nil
+ #'use-package-merge-keys))
+
+ ;; Add default values for keywords not specified, when applicable.
+ (cl-dolist (spec use-package-defaults)
+ (when (let ((func (nth 2 spec)))
+ (if (and func (functionp func))
+ (funcall func name args)
+ (eval func)))
+ (setq args (use-package-plist-maybe-put
+ args (nth 0 spec)
+ (let ((func (nth 1 spec)))
+ (if (and func (functionp func))
+ (funcall func name args)
+ (eval func)))))))
+
+ ;; Determine any autoloads implied by the keywords used.
+ (let ((iargs args)
+ commands)
+ (while iargs
+ (when (keywordp (car iargs))
+ (let ((autoloads
+ (intern-soft (concat "use-package-autoloads/"
+ (symbol-name (car iargs))))))
+ (when (functionp autoloads)
+ (setq commands
+ ;; jww (2017-12-07): Right now we just ignored the type of
+ ;; the autoload being requested, and assume they are all
+ ;; `command'.
+ (append (mapcar
+ #'car
+ (funcall autoloads name-symbol (car iargs)
+ (cadr iargs)))
+ commands)))))
+ (setq iargs (cddr iargs)))
+ (when commands
+ (setq args
+ ;; Like `use-package-plist-append', but removing duplicates.
+ (plist-put args :commands
+ (delete-dups
+ (append commands (plist-get args :commands)))))))
+
+ ;; If byte-compiling, pre-load the package so all its symbols are in
+ ;; scope. This is done by prepending statements to the :preface.
+ (when (bound-and-true-p byte-compile-current-file)
+ (setq args
+ (use-package-plist-append
+ args :preface
+ (use-package-concat
+ (mapcar #'(lambda (var) `(defvar ,var))
+ (plist-get args :defines))
+ (mapcar #'(lambda (fn) `(declare-function ,fn ,name-string))
+ (plist-get args :functions))
+ `((eval-when-compile
+ (with-demoted-errors
+ ,(format "Cannot load %s: %%S" name-string)
+ ,(when (eq use-package-verbose 'debug)
+ `(message ,(format "Compiling package %s" name-string)))
+ ,(unless (plist-get args :no-require)
+ `(unless (featurep ',name-symbol)
+ (load ,name-string nil t))))))))))
+
+ ;; Certain keywords imply :defer, if :demand was not specified.
+ (when (and (not (plist-member args :demand))
+ (not (plist-member args :defer))
+ (not (or (equal '(t) (plist-get args :load))
+ (equal (list (use-package-as-string name))
+ (mapcar #'use-package-as-string
+ (plist-get args :load)))))
+ (cl-some #'identity
+ (mapcar (apply-partially #'plist-member args)
+ use-package-deferring-keywords)))
+ (setq args (append args '(:defer t))))
+
+ ;; The :load keyword overrides :no-require
+ (when (and (plist-member args :load)
+ (plist-member args :no-require))
+ (setq args (use-package-plist-delete args :no-require)))
+
+ ;; If at this point no :load, :defer or :no-require has been seen, then
+ ;; :load the package itself.
+ (when (and (not (plist-member args :load))
+ (not (plist-member args :defer))
+ (not (plist-member args :no-require)))
+ (setq args (append args `(:load (,name)))))
+
+ ;; Sort the list of keywords based on the order of `use-package-keywords'.
+ (use-package-sort-keywords args)))
+
+(defun use-package-process-keywords (name plist &optional state)
+ "Process the next keyword in the free-form property list PLIST.
+The values in the PLIST have each been normalized by the function
+use-package-normalize/KEYWORD (minus the colon).
+
+STATE is a property list that the function may modify and/or
+query. This is useful if a package defines multiple keywords and
+wishes them to have some kind of stateful interaction.
+
+Unless the KEYWORD being processed intends to ignore remaining
+keywords, it must call this function recursively, passing in the
+plist with its keyword and argument removed, and passing in the
+next value for the STATE."
+ (declare (indent 1))
+ (unless (null plist)
+ (let* ((keyword (car plist))
+ (arg (cadr plist))
+ (rest (cddr plist)))
+ (unless (keywordp keyword)
+ (use-package-error (format "%s is not a keyword" keyword)))
+ (let* ((handler (concat "use-package-handler/" (symbol-name keyword)))
+ (handler-sym (intern handler)))
+ (if (functionp handler-sym)
+ (funcall handler-sym name keyword arg rest state)
+ (use-package-error
+ (format "Keyword handler not defined: %s" handler)))))))
+
+(put 'use-package-process-keywords 'lisp-indent-function 'defun)
+
+(defun use-package-list-insert (elem xs &optional anchor after test)
+ "Insert ELEM into the list XS.
+If ANCHOR is also a keyword, place the new KEYWORD before that
+one.
+If AFTER is non-nil, insert KEYWORD either at the end of the
+keywords list, or after the ANCHOR if one has been provided.
+If TEST is non-nil, it is the test used to compare ELEM to list
+elements. The default is `eq'.
+The modified list is returned. The original list is not modified."
+ (let (result)
+ (dolist (k xs)
+ (if (funcall (or test #'eq) k anchor)
+ (if after
+ (setq result (cons k result)
+ result (cons elem result))
+ (setq result (cons elem result)
+ result (cons k result)))
+ (setq result (cons k result))))
+ (if anchor
+ (nreverse result)
+ (if after
+ (nreverse (cons elem result))
+ (cons elem (nreverse result))))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Argument Processing
+;;
+
+(defun use-package-only-one (label args f)
+ "Call F on the first member of ARGS if it has exactly one element."
+ (declare (indent 1))
+ (cond
+ ((and (listp args) (listp (cdr args))
+ (= (length args) 1))
+ (funcall f label (car args)))
+ (t
+ (use-package-error
+ (concat label " wants exactly one argument")))))
+
+(put 'use-package-only-one 'lisp-indent-function 'defun)
+
+(defun use-package-as-one (label args f &optional allow-empty)
+ "Call F on the first element of ARGS if it has one element, or all of ARGS.
+If ALLOW-EMPTY is non-nil, it's OK for ARGS to be an empty list."
+ (declare (indent 1))
+ (if (if args
+ (and (listp args) (listp (cdr args)))
+ allow-empty)
+ (if (= (length args) 1)
+ (funcall f label (car args))
+ (funcall f label args))
+ (use-package-error
+ (concat label " wants a non-empty list"))))
+
+(put 'use-package-as-one 'lisp-indent-function 'defun)
+
+(defun use-package-memoize (f arg)
+ "Ensure the macro-expansion of F applied to ARG evaluates ARG
+no more than once."
+ (let ((loaded (cl-gentemp "use-package--loaded"))
+ (result (cl-gentemp "use-package--result"))
+ (next (cl-gentemp "use-package--next")))
+ `((defvar ,loaded nil)
+ (defvar ,result nil)
+ (defvar ,next #'(lambda () (if ,loaded ,result
+ (setq ,loaded t ,result ,arg))))
+ ,@(funcall f `((funcall ,next))))))
+
+(defsubst use-package-normalize-value (_label arg)
+ "Normalize the Lisp value given by ARG.
+The argument LABEL is ignored."
+ (cond ((null arg) nil)
+ ((eq t arg) t)
+ ((use-package-non-nil-symbolp arg)
+ `(symbol-value ',arg))
+ ((functionp arg)
+ `(funcall #',arg))
+ (t arg)))
+
+(defun use-package-normalize-symbols (label arg &optional recursed)
+ "Normalize a list of symbols."
+ (cond
+ ((use-package-non-nil-symbolp arg)
+ (list arg))
+ ((and (not recursed) (listp arg) (listp (cdr arg)))
+ (mapcar #'(lambda (x) (car (use-package-normalize-symbols label x t))) arg))
+ (t
+ (use-package-error
+ (concat label " wants a symbol, or list of symbols")))))
+
+(defun use-package-normalize-symlist (_name keyword args)
+ (use-package-as-one (symbol-name keyword) args
+ #'use-package-normalize-symbols))
+
+(defun use-package-normalize-recursive-symbols (label arg)
+ "Normalize a list of symbols."
+ (cond
+ ((use-package-non-nil-symbolp arg)
+ arg)
+ ((and (listp arg) (listp (cdr arg)))
+ (mapcar #'(lambda (x) (use-package-normalize-recursive-symbols label x))
+ arg))
+ (t
+ (use-package-error
+ (concat label " wants a symbol, or nested list of symbols")))))
+
+(defun use-package-normalize-recursive-symlist (_name keyword args)
+ (use-package-as-one (symbol-name keyword) args
+ #'use-package-normalize-recursive-symbols))
+
+(defun use-package-normalize-paths (label arg &optional recursed)
+ "Normalize a list of filesystem paths."
+ (cond
+ ((and arg (or (use-package-non-nil-symbolp arg) (functionp arg)))
+ (let ((value (use-package-normalize-value label arg)))
+ (use-package-normalize-paths label (eval value))))
+ ((stringp arg)
+ (let ((path (if (file-name-absolute-p arg)
+ arg
+ (expand-file-name arg user-emacs-directory))))
+ (list path)))
+ ((and (not recursed) (listp arg) (listp (cdr arg)))
+ (mapcar #'(lambda (x)
+ (car (use-package-normalize-paths label x t))) arg))
+ (t
+ (use-package-error
+ (concat label " wants a directory path, or list of paths")))))
+
+(defun use-package-normalize-predicate (_name keyword args)
+ (if (null args)
+ t
+ (use-package-only-one (symbol-name keyword) args
+ #'use-package-normalize-value)))
+
+(defun use-package-normalize-form (label args)
+ "Given a list of forms, return it wrapped in `progn'."
+ (unless (listp (car args))
+ (use-package-error (concat label " wants a sexp or list of sexps")))
+ (mapcar #'(lambda (form)
+ (if (and (consp form)
+ (memq (car form)
+ '(use-package bind-key bind-key*
+ unbind-key bind-keys bind-keys*)))
+ (macroexpand form)
+ form)) args))
+
+(defun use-package-normalize-forms (_name keyword args)
+ (use-package-normalize-form (symbol-name keyword) args))
+
+(defun use-package-normalize-pairs
+ (key-pred val-pred name label arg &optional recursed)
+ "Normalize a list of pairs.
+KEY-PRED and VAL-PRED are predicates recognizing valid keys and
+values, respectively.
+If RECURSED is non-nil, recurse into sublists."
+ (cond
+ ((funcall key-pred arg)
+ (list (cons arg (use-package-as-symbol name))))
+ ((use-package-is-pair arg key-pred val-pred)
+ (list arg))
+ ((and (not recursed) (listp arg) (listp (cdr arg)))
+ (let (last-item)
+ (mapcar
+ #'(lambda (x)
+ (prog1
+ (let ((ret (use-package-normalize-pairs
+ key-pred val-pred name label x t)))
+ (if (and (listp ret)
+ (not (keywordp last-item)))
+ (car ret)
+ ret))
+ (setq last-item x))) arg)))
+ (t arg)))
+
+(defun use-package-recognize-function (v &optional binding additional-pred)
+ "A predicate that recognizes functional constructions:
+ nil
+ sym
+ \\='sym
+ (quote sym)
+ #\\='sym
+ (function sym)
+ (lambda () ...)
+ \\='(lambda () ...)
+ (quote (lambda () ...))
+ #\\='(lambda () ...)
+ (function (lambda () ...))"
+ (or (if binding
+ (symbolp v)
+ (use-package-non-nil-symbolp v))
+ (and (listp v)
+ (memq (car v) '(quote function))
+ (use-package-non-nil-symbolp (cadr v)))
+ (if binding (commandp v) (functionp v))
+ (and additional-pred
+ (funcall additional-pred v))))
+
+(defun use-package-normalize-function (v)
+ "Reduce functional constructions to one of two normal forms:
+ sym
+ #\\='(lambda () ...)"
+ (cond ((symbolp v) v)
+ ((and (listp v)
+ (memq (car v) '(quote function))
+ (use-package-non-nil-symbolp (cadr v)))
+ (cadr v))
+ ((and (consp v)
+ (eq 'lambda (car v)))
+ v)
+ ((and (listp v)
+ (memq (car v) '(quote function))
+ (eq 'lambda (car (cadr v))))
+ (cadr v))
+ (t v)))
+
+(defun use-package-normalize-commands (args)
+ "Map over ARGS of the form ((_ . F) ...), normalizing functional F's."
+ (mapcar #'(lambda (x)
+ (if (consp x)
+ (cons (car x) (use-package-normalize-function (cdr x)))
+ x))
+ args))
+
+(defun use-package-normalize-mode (name keyword args)
+ "Normalize arguments for keywords which add regexp/mode pairs to an alist."
+ (use-package-as-one (symbol-name keyword) args
+ (apply-partially #'use-package-normalize-pairs
+ #'use-package-regex-p
+ #'use-package-recognize-function
+ name)))
+
+(defun use-package-autoloads-mode (_name _keyword args)
+ (mapcar
+ #'(lambda (x) (cons (cdr x) 'command))
+ (cl-remove-if-not #'(lambda (x)
+ (and (consp x)
+ (use-package-non-nil-symbolp (cdr x))))
+ args)))
+
+(defun use-package-handle-mode (name alist args rest state)
+ "Handle keywords which add regexp/mode pairs to an alist."
+ (use-package-concat
+ (use-package-process-keywords name rest state)
+ (mapcar
+ #'(lambda (thing)
+ `(add-to-list
+ ',alist
+ ',(cons (use-package-normalize-regex (car thing))
+ (cdr thing))))
+ (use-package-normalize-commands args))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Statistics
+;;
+
+(defun use-package-reset-statistics ()
+ "Reset statistics for `use-package'.
+See also `use-package-statistics'."
+ (interactive)
+ (setq use-package-statistics (make-hash-table)))
+
+(defun use-package-statistics-status (package)
+ "Return loading configuration status of PACKAGE statistics."
+ (cond ((gethash :config package) "Configured")
+ ((gethash :init package) "Initialized")
+ ((gethash :preface package) "Prefaced")
+ ((gethash :use-package package) "Declared")))
+
+(defun use-package-statistics-last-event (package)
+ "Return the date when PACKAGE's status last changed.
+The date is returned as a string."
+ (or (gethash :config package)
+ (gethash :init package)
+ (gethash :preface package)
+ (gethash :use-package package)))
+
+(defun use-package-statistics-time (package)
+ "Return the time is took for PACKAGE to load."
+ (+ (float-time (gethash :config-secs package '(0 0 0 0)))
+ (float-time (gethash :init-secs package '(0 0 0 0)))
+ (float-time (gethash :preface-secs package '(0 0 0 0)))
+ (float-time (gethash :use-package-secs package '(0 0 0 0)))))
+
+(defun use-package-statistics-convert (package)
+ "Return information about PACKAGE.
+
+The information is formatted in a way suitable for
+`use-package-statistics-mode'."
+ (let ((statistics (gethash package use-package-statistics)))
+ (list
+ package
+ (vector
+ (symbol-name package)
+ (use-package-statistics-status statistics)
+ (format-time-string
+ "%H:%M:%S.%6N"
+ (use-package-statistics-last-event statistics))
+ (format "%.2f" (use-package-statistics-time statistics))))))
+
+(defun use-package-report ()
+ "Show current statistics gathered about `use-package' declarations.
+In the table that's generated, the status field has the following
+meaning:
+ Configured :config has been processed (the package is loaded!)
+ Initialized :init has been processed (load status unknown)
+ Prefaced :preface has been processed
+ Declared the use-package declaration was seen"
+ (interactive)
+ (with-current-buffer (get-buffer-create "*use-package statistics*")
+ (setq tabulated-list-entries
+ (mapcar #'use-package-statistics-convert
+ (hash-table-keys use-package-statistics)))
+ (use-package-statistics-mode)
+ (tabulated-list-print)
+ (display-buffer (current-buffer))))
+
+(defvar use-package-statistics-status-order
+ '(("Declared" . 0)
+ ("Prefaced" . 1)
+ ("Initialized" . 2)
+ ("Configured" . 3)))
+
+(define-derived-mode use-package-statistics-mode tabulated-list-mode
+ "use-package statistics"
+ "Show current statistics gathered about `use-package' declarations."
+ (setq tabulated-list-format
+ ;; The sum of column width is 80 characters:
+ [("Package" 25 t)
+ ("Status" 13
+ (lambda (a b)
+ (< (assoc-default
+ (use-package-statistics-status
+ (gethash (car a) use-package-statistics))
+ use-package-statistics-status-order)
+ (assoc-default
+ (use-package-statistics-status
+ (gethash (car b) use-package-statistics))
+ use-package-statistics-status-order))))
+ ("Last Event" 23
+ (lambda (a b)
+ (< (float-time
+ (use-package-statistics-last-event
+ (gethash (car a) use-package-statistics)))
+ (float-time
+ (use-package-statistics-last-event
+ (gethash (car b) use-package-statistics))))))
+ ("Time" 10
+ (lambda (a b)
+ (< (use-package-statistics-time
+ (gethash (car a) use-package-statistics))
+ (use-package-statistics-time
+ (gethash (car b) use-package-statistics)))))])
+ (setq tabulated-list-sort-key '("Time" . t))
+ (tabulated-list-init-header))
+
+(defun use-package-statistics-gather (keyword name after)
+ (let* ((hash (gethash name use-package-statistics
+ (make-hash-table)))
+ (before (and after (gethash keyword hash (current-time)))))
+ (puthash keyword (current-time) hash)
+ (when after
+ (puthash (intern (concat (symbol-name keyword) "-secs"))
+ (time-subtract (current-time) before) hash))
+ (puthash name hash use-package-statistics)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Handlers
+;;
+
+;;;; :disabled
+
+;; Don't alias this to `ignore', as that will cause the resulting
+;; function to be interactive.
+(defun use-package-normalize/:disabled (_name _keyword _arg)
+ "Do nothing, return nil.")
+
+(defun use-package-handler/:disabled (name _keyword _arg rest state)
+ (use-package-process-keywords name rest state))
+
+;;;; :if, :when and :unless
+
+(defun use-package-normalize-test (_name keyword args)
+ (use-package-only-one (symbol-name keyword) args
+ #'use-package-normalize-value))
+
+(defalias 'use-package-normalize/:if 'use-package-normalize-test)
+
+(defun use-package-handler/:if (name _keyword pred rest state)
+ (let ((body (use-package-process-keywords name rest state)))
+ `((when ,pred ,@body))))
+
+(defalias 'use-package-normalize/:when 'use-package-normalize-test)
+
+(defalias 'use-package-handler/:when 'use-package-handler/:if)
+
+(defalias 'use-package-normalize/:unless 'use-package-normalize-test)
+
+(defun use-package-handler/:unless (name _keyword pred rest state)
+ (let ((body (use-package-process-keywords name rest state)))
+ `((unless ,pred ,@body))))
+
+;;;; :requires
+
+(defalias 'use-package-normalize/:requires 'use-package-normalize-symlist)
+
+(defun use-package-handler/:requires (name _keyword requires rest state)
+ (let ((body (use-package-process-keywords name rest state)))
+ (if (null requires)
+ body
+ `((when ,(if (> (length requires) 1)
+ `(not (member nil (mapcar #'featurep ',requires)))
+ `(featurep ',(car requires)))
+ ,@body)))))
+
+;;;; :load-path
+
+(defun use-package-normalize/:load-path (_name keyword args)
+ (use-package-as-one (symbol-name keyword) args
+ #'use-package-normalize-paths))
+
+(defun use-package-handler/:load-path (name _keyword arg rest state)
+ (let ((body (use-package-process-keywords name rest state)))
+ (use-package-concat
+ (mapcar #'(lambda (path)
+ `(eval-and-compile (add-to-list 'load-path ,path)))
+ arg)
+ body)))
+
+;;;; :no-require
+
+(defalias 'use-package-normalize/:no-require 'use-package-normalize-predicate)
+
+(defun use-package-handler/:no-require (name _keyword _arg rest state)
+ (use-package-process-keywords name rest state))
+
+;;;; :defines
+
+(defalias 'use-package-normalize/:defines 'use-package-normalize-symlist)
+
+(defun use-package-handler/:defines (name _keyword _arg rest state)
+ (use-package-process-keywords name rest state))
+
+;;;; :functions
+
+(defalias 'use-package-normalize/:functions 'use-package-normalize-symlist)
+
+(defun use-package-handler/:functions (name _keyword _arg rest state)
+ (use-package-process-keywords name rest state))
+
+;;;; :preface
+
+(defalias 'use-package-normalize/:preface 'use-package-normalize-forms)
+
+(defun use-package-handler/:preface (name _keyword arg rest state)
+ (let ((body (use-package-process-keywords name rest state)))
+ (use-package-concat
+ (when use-package-compute-statistics
+ `((use-package-statistics-gather :preface ',name nil)))
+ (when arg
+ `((eval-and-compile ,@arg)))
+ body
+ (when use-package-compute-statistics
+ `((use-package-statistics-gather :preface ',name t))))))
+
+;;;; :catch
+
+(defvar use-package--form)
+(defvar use-package--hush-function #'(lambda (_keyword body) body))
+
+(defsubst use-package-hush (context keyword body)
+ `((condition-case-unless-debug err
+ ,(macroexp-progn body)
+ (error (funcall ,context ,keyword err)))))
+
+(defun use-package-normalize/:catch (_name keyword args)
+ (if (null args)
+ t
+ (use-package-only-one (symbol-name keyword) args
+ use-package--hush-function)))
+
+(defun use-package-handler/:catch (name keyword arg rest state)
+ (let* ((context (cl-gentemp "use-package--warning")))
+ (cond
+ ((not arg)
+ (use-package-process-keywords name rest state))
+ ((eq arg t)
+ `((defvar ,context
+ #'(lambda (keyword err)
+ (let ((msg (format "%s/%s: %s" ',name keyword
+ (error-message-string err))))
+ ,@(when (eq use-package-verbose 'debug)
+ `((with-current-buffer
+ (get-buffer-create "*use-package*")
+ (goto-char (point-max))
+ (insert "-----\n" msg ,use-package--form)
+ (emacs-lisp-mode))
+ (setq msg
+ (concat msg
+ " (see the *use-package* buffer)"))))
+ (display-warning 'use-package msg :error))))
+ ,@(let ((use-package--hush-function
+ (apply-partially #'use-package-hush context)))
+ (funcall use-package--hush-function keyword
+ (use-package-process-keywords name rest state)))))
+ ((functionp arg)
+ `((defvar ,context ,arg)
+ ,@(let ((use-package--hush-function
+ (apply-partially #'use-package-hush context)))
+ (funcall use-package--hush-function keyword
+ (use-package-process-keywords name rest state)))))
+ (t
+ (use-package-error "The :catch keyword expects 't' or a function")))))
+
+;;;; :interpreter
+
+(defalias 'use-package-normalize/:interpreter 'use-package-normalize-mode)
+(defalias 'use-package-autoloads/:interpreter 'use-package-autoloads-mode)
+
+(defun use-package-handler/:interpreter (name _keyword arg rest state)
+ (use-package-handle-mode name 'interpreter-mode-alist arg rest state))
+
+;;;; :mode
+
+(defalias 'use-package-normalize/:mode 'use-package-normalize-mode)
+(defalias 'use-package-autoloads/:mode 'use-package-autoloads-mode)
+
+(defun use-package-handler/:mode (name _keyword arg rest state)
+ (use-package-handle-mode name 'auto-mode-alist arg rest state))
+
+;;;; :magic
+
+(defalias 'use-package-normalize/:magic 'use-package-normalize-mode)
+(defalias 'use-package-autoloads/:magic 'use-package-autoloads-mode)
+
+(defun use-package-handler/:magic (name _keyword arg rest state)
+ (use-package-handle-mode name 'magic-mode-alist arg rest state))
+
+;;;; :magic-fallback
+
+(defalias 'use-package-normalize/:magic-fallback 'use-package-normalize-mode)
+(defalias 'use-package-autoloads/:magic-fallback 'use-package-autoloads-mode)
+
+(defun use-package-handler/:magic-fallback (name _keyword arg rest state)
+ (use-package-handle-mode name 'magic-fallback-mode-alist arg rest state))
+
+;;;; :hook
+
+(defun use-package-normalize/:hook (name keyword args)
+ (use-package-as-one (symbol-name keyword) args
+ #'(lambda (label arg)
+ (unless (or (use-package-non-nil-symbolp arg) (consp arg))
+ (use-package-error
+ (concat label " a <symbol> or (<symbol or list of symbols> . <symbol or function>)"
+ " or list of these")))
+ (use-package-normalize-pairs
+ #'(lambda (k)
+ (or (use-package-non-nil-symbolp k)
+ (and k (let ((every t))
+ (while (and every k)
+ (if (and (consp k)
+ (use-package-non-nil-symbolp (car k)))
+ (setq k (cdr k))
+ (setq every nil)))
+ every))))
+ #'use-package-recognize-function
+ (if (string-suffix-p "-mode" (symbol-name name))
+ name
+ (intern (concat (symbol-name name) "-mode")))
+ label arg))))
+
+(defalias 'use-package-autoloads/:hook 'use-package-autoloads-mode)
+
+(defun use-package-handler/:hook (name _keyword args rest state)
+ "Generate use-package custom keyword code."
+ (use-package-concat
+ (use-package-process-keywords name rest state)
+ (cl-mapcan
+ #'(lambda (def)
+ (let ((syms (car def))
+ (fun (cdr def)))
+ (when fun
+ (mapcar
+ #'(lambda (sym)
+ `(add-hook
+ (quote ,(intern
+ (concat (symbol-name sym)
+ use-package-hook-name-suffix)))
+ (function ,fun)))
+ (use-package-hook-handler-normalize-mode-symbols syms)))))
+ (use-package-normalize-commands args))))
+
+(defun use-package-hook-handler-normalize-mode-symbols (syms)
+ "Ensure that `SYMS' turns into a list of modes."
+ (if (use-package-non-nil-symbolp syms) (list syms) syms))
+
+;;;; :commands
+
+(defalias 'use-package-normalize/:commands 'use-package-normalize-symlist)
+
+(defun use-package-handler/:commands (name _keyword arg rest state)
+ (use-package-concat
+ ;; Since we deferring load, establish any necessary autoloads, and also
+ ;; keep the byte-compiler happy.
+ (let ((name-string (use-package-as-string name)))
+ (cl-mapcan
+ #'(lambda (command)
+ (when (symbolp command)
+ (append
+ (unless (plist-get state :demand)
+ `((unless (fboundp ',command)
+ (autoload #',command ,name-string nil t))))
+ (when (bound-and-true-p byte-compile-current-file)
+ `((eval-when-compile
+ (declare-function ,command ,name-string)))))))
+ (delete-dups arg)))
+ (use-package-process-keywords name rest state)))
+
+;;;; :autoload
+
+(defalias 'use-package-normalize/:autoload 'use-package-normalize/:commands)
+
+(defun use-package-handler/:autoload (name _keyword arg rest state)
+ (use-package-concat
+ ;; Since we deferring load, establish any necessary autoloads, and also
+ ;; keep the byte-compiler happy.
+ (let ((name-string (use-package-as-string name)))
+ (cl-mapcan
+ #'(lambda (command)
+ (when (symbolp command)
+ (append
+ (unless (plist-get state :demand)
+ `((unless (fboundp ',command)
+ (autoload #',command ,name-string))))
+ (when (bound-and-true-p byte-compile-current-file)
+ `((eval-when-compile
+ (declare-function ,command ,name-string)))))))
+ (delete-dups arg)))
+ (use-package-process-keywords name rest state)))
+
+;;;; :defer
+
+(defalias 'use-package-normalize/:defer 'use-package-normalize-predicate)
+
+(defun use-package-handler/:defer (name _keyword arg rest state)
+ (let ((body (use-package-process-keywords name rest state)))
+ (use-package-concat
+ ;; Load the package after a set amount of idle time, if the argument to
+ ;; `:defer' was a number.
+ (when (numberp arg)
+ `((run-with-idle-timer ,arg nil #'require
+ ',(use-package-as-symbol name) nil t)))
+ (if (or (not arg) (null body))
+ body
+ `((eval-after-load ',name ',(macroexp-progn body)))))))
+
+;;;; :after
+
+(defun use-package-normalize/:after (name keyword args)
+ (setq args (use-package-normalize-recursive-symlist name keyword args))
+ (if (consp args)
+ args
+ (list args)))
+
+(defun use-package-after-count-uses (features*)
+ "Count the number of time the body would appear in the result."
+ (cond ((use-package-non-nil-symbolp features*)
+ 1)
+ ((and (consp features*)
+ (memq (car features*) '(:or :any)))
+ (let ((num 0))
+ (cl-dolist (next (cdr features*))
+ (setq num (+ num (use-package-after-count-uses next))))
+ num))
+ ((and (consp features*)
+ (memq (car features*) '(:and :all)))
+ (apply #'max (mapcar #'use-package-after-count-uses
+ (cdr features*))))
+ ((listp features*)
+ (use-package-after-count-uses (cons :all features*)))))
+
+(defun use-package-require-after-load (features* body)
+ "Generate `eval-after-load' statements to represents FEATURES*.
+FEATURES* is a list containing keywords `:and' and `:all', where
+no keyword implies `:all'."
+ (cond
+ ((use-package-non-nil-symbolp features*)
+ `((eval-after-load ',features* ',(macroexp-progn body))))
+ ((and (consp features*)
+ (memq (car features*) '(:or :any)))
+ (cl-mapcan #'(lambda (x) (use-package-require-after-load x body))
+ (cdr features*)))
+ ((and (consp features*)
+ (memq (car features*) '(:and :all)))
+ (cl-dolist (next (cdr features*))
+ (setq body (use-package-require-after-load next body)))
+ body)
+ ((listp features*)
+ (use-package-require-after-load (cons :all features*) body))))
+
+(defun use-package-handler/:after (name _keyword arg rest state)
+ (let ((body (use-package-process-keywords name rest state))
+ (uses (use-package-after-count-uses arg)))
+ (if (or (null uses) (null body))
+ body
+ (if (<= uses 1)
+ (use-package-require-after-load arg body)
+ (use-package-memoize
+ (apply-partially #'use-package-require-after-load arg)
+ (macroexp-progn body))))))
+
+;;;; :demand
+
+(defalias 'use-package-normalize/:demand 'use-package-normalize-predicate)
+
+(defun use-package-handler/:demand (name _keyword _arg rest state)
+ (use-package-process-keywords name rest state))
+
+;;;; :custom
+
+(defun use-package-normalize/:custom (_name keyword args)
+ "Normalize use-package custom keyword."
+ (use-package-as-one (symbol-name keyword) args
+ #'(lambda (label arg)
+ (unless (listp arg)
+ (use-package-error
+ (concat label " a (<symbol> <value> [comment])"
+ " or list of these")))
+ (if (use-package-non-nil-symbolp (car arg))
+ (list arg)
+ arg))))
+
+(defun use-package-handler/:custom (name _keyword args rest state)
+ "Generate use-package custom keyword code."
+ (use-package-concat
+ (if (bound-and-true-p use-package-use-theme)
+ `((let ((custom--inhibit-theme-enable nil))
+ ;; Declare the theme here so use-package can be required inside
+ ;; eval-and-compile without warnings about unknown theme.
+ (unless (memq 'use-package custom-known-themes)
+ (deftheme use-package)
+ (enable-theme 'use-package)
+ (setq custom-enabled-themes (remq 'use-package custom-enabled-themes)))
+ (custom-theme-set-variables
+ 'use-package
+ ,@(mapcar
+ #'(lambda (def)
+ (let ((variable (nth 0 def))
+ (value (nth 1 def))
+ (comment (nth 2 def)))
+ (unless (and comment (stringp comment))
+ (setq comment (format "Customized with use-package %s" name)))
+ `'(,variable ,value nil () ,comment)))
+ args))))
+ (mapcar
+ #'(lambda (def)
+ (let ((variable (nth 0 def))
+ (value (nth 1 def))
+ (comment (nth 2 def)))
+ (unless (and comment (stringp comment))
+ (setq comment (format "Customized with use-package %s" name)))
+ `(customize-set-variable (quote ,variable) ,value ,comment)))
+ args))
+ (use-package-process-keywords name rest state)))
+
+;;;; :custom-face
+
+(defun use-package-normalize/:custom-face (name-symbol _keyword arg)
+ "Normalize use-package custom-face keyword."
+ (let ((error-msg
+ (format "%s wants a (<symbol> <face-spec> [spec-type]) or list of these"
+ name-symbol)))
+ (unless (listp arg)
+ (use-package-error error-msg))
+ (cl-dolist (def arg arg)
+ (unless (listp def)
+ (use-package-error error-msg))
+ (let ((face (nth 0 def))
+ (spec (nth 1 def)))
+ (when (or (not face)
+ (not spec)
+ (> (length def) 3))
+ (use-package-error error-msg))))))
+
+(defun use-package-handler/:custom-face (name _keyword args rest state)
+ "Generate use-package custom-face keyword code."
+ (use-package-concat
+ (mapcar #'(lambda (def) `(apply #'face-spec-set (backquote ,def))) args)
+ (use-package-process-keywords name rest state)))
+
+;;;; :init
+
+(defalias 'use-package-normalize/:init 'use-package-normalize-forms)
+
+(defun use-package-handler/:init (name _keyword arg rest state)
+ (use-package-concat
+ (when use-package-compute-statistics
+ `((use-package-statistics-gather :init ',name nil)))
+ (let ((init-body
+ (use-package-hook-injector (use-package-as-string name)
+ :init arg)))
+ (when init-body
+ (funcall use-package--hush-function :init
+ (if use-package-check-before-init
+ `((when (locate-library ,(use-package-as-string name))
+ ,@init-body))
+ init-body))))
+ (use-package-process-keywords name rest state)
+ (when use-package-compute-statistics
+ `((use-package-statistics-gather :init ',name t)))))
+
+;;;; :load
+
+(defun use-package-normalize/:load (name keyword args)
+ (setq args (use-package-normalize-recursive-symlist name keyword args))
+ (if (consp args)
+ args
+ (list args)))
+
+(defun use-package-handler/:load (name _keyword arg rest state)
+ (let ((body (use-package-process-keywords name rest state)))
+ (cl-dolist (pkg arg)
+ (setq body (use-package-require (if (eq t pkg) name pkg) nil body)))
+ body))
+
+;;;; :config
+
+(defalias 'use-package-normalize/:config 'use-package-normalize-forms)
+
+(defun use-package-handler/:config (name _keyword arg rest state)
+ (let* ((body (use-package-process-keywords name rest state))
+ (name-symbol (use-package-as-symbol name)))
+ (use-package-concat
+ (when use-package-compute-statistics
+ `((use-package-statistics-gather :config ',name nil)))
+ (if (and (or (null arg) (equal arg '(t))) (not use-package-inject-hooks))
+ body
+ (use-package-with-elapsed-timer
+ (format "Configuring package %s" name-symbol)
+ (funcall use-package--hush-function :config
+ (use-package-concat
+ (use-package-hook-injector
+ (symbol-name name-symbol) :config arg)
+ body
+ (list t)))))
+ (when use-package-compute-statistics
+ `((use-package-statistics-gather :config ',name t))))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; The main macro
+;;
+
+(defmacro use-package-core (name args)
+ `(let* ((args* (use-package-normalize-keywords ,name ,args))
+ (use-package--form
+ (if (eq use-package-verbose 'debug)
+ (concat "\n\n"
+ (pp-to-string `(use-package ,name ,@,args))
+ "\n -->\n\n"
+ (pp-to-string `(use-package ,name ,@args*))
+ "\n ==>\n\n"
+ (pp-to-string
+ (macroexp-progn
+ (let ((use-package-verbose 'errors)
+ (use-package-expand-minimally t))
+ (use-package-process-keywords name args*
+ (and (plist-get args* :demand)
+ (list :demand t)))))))
+ "")))
+ (use-package-process-keywords name args*
+ (and (plist-get args* :demand)
+ (list :demand t)))))
+
+;;;###autoload
+(defmacro use-package (name &rest args)
+ "Declare an Emacs package by specifying a group of configuration options.
+
+For the full documentation, see Info node `(use-package) top'.
+Usage:
+
+ (use-package package-name
+ [:keyword [option]]...)
+
+:init Code to run before PACKAGE-NAME has been loaded.
+:config Code to run after PACKAGE-NAME has been loaded. Note that
+ if loading is deferred for any reason, this code does not
+ execute until the lazy load has occurred.
+:preface Code to be run before everything except `:disabled'; this
+ can be used to define functions for use in `:if', or that
+ should be seen by the byte-compiler.
+
+:mode Form to be added to `auto-mode-alist'.
+:magic Form to be added to `magic-mode-alist'.
+:magic-fallback Form to be added to `magic-fallback-mode-alist'.
+:interpreter Form to be added to `interpreter-mode-alist'.
+
+:commands Define autoloads for commands that will be defined by the
+ package. This is useful if the package is being lazily
+ loaded, and you wish to conditionally call functions in your
+ `:init' block that are defined in the package.
+:autoload Similar to :commands, but it for no-interactive one.
+:hook Specify hook(s) to attach this package to.
+
+:bind Bind keys, and define autoloads for the bound commands.
+:bind* Bind keys, and define autoloads for the bound commands,
+ *overriding all minor mode bindings*.
+:bind-keymap Bind a key prefix to an auto-loaded keymap defined in the
+ package. This is like `:bind', but for keymaps.
+:bind-keymap* Like `:bind-keymap', but overrides all minor mode bindings
+
+:defer Defer loading of a package -- this is implied when using
+ `:commands', `:bind', `:bind*', `:mode', `:magic', `:hook',
+ `:magic-fallback', or `:interpreter'. This can be an integer,
+ to force loading after N seconds of idle time, if the package
+ has not already been loaded.
+:demand Prevent the automatic deferred loading introduced by constructs
+ such as `:bind' (see `:defer' for the complete list).
+
+:after Delay the effect of the use-package declaration
+ until after the named libraries have loaded.
+ Before they have been loaded, no other keyword
+ has any effect at all, and once they have been
+ loaded it is as if `:after' was not specified.
+
+:if EXPR Initialize and load only if EXPR evaluates to a non-nil value.
+:disabled The package is ignored completely if this keyword is present.
+:defines Declare certain variables to silence the byte-compiler.
+:functions Declare certain functions to silence the byte-compiler.
+:load-path Add to the `load-path' before attempting to load the package.
+:diminish Support for diminish.el (if installed).
+:delight Support for delight.el (if installed).
+:custom Call `Custom-set' or `set-default' with each variable
+ definition without modifying the Emacs `custom-file'.
+ (compare with `custom-set-variables').
+:custom-face Call `custom-set-faces' with each face definition.
+:ensure Loads the package using package.el if necessary.
+:pin Pin the package to an archive."
+ (declare (indent defun))
+ (unless (memq :disabled args)
+ (macroexp-progn
+ (use-package-concat
+ (when use-package-compute-statistics
+ `((use-package-statistics-gather :use-package ',name nil)))
+ (if (eq use-package-verbose 'errors)
+ (use-package-core name args)
+ (condition-case-unless-debug err
+ (use-package-core name args)
+ (error
+ (ignore
+ (display-warning
+ 'use-package
+ (format "Failed to parse package %s: %s"
+ name (error-message-string err)) :error)))))
+ (when use-package-compute-statistics
+ `((use-package-statistics-gather :use-package ',name t)))))))
+
+(provide 'use-package-core)
+
+;;; use-package-core.el ends here
diff --git a/lisp/use-package/use-package-delight.el b/lisp/use-package/use-package-delight.el
new file mode 100644
index 00000000000..4f571cd3990
--- /dev/null
+++ b/lisp/use-package/use-package-delight.el
@@ -0,0 +1,88 @@
+;;; use-package-delight.el --- Support for the :delight keyword -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
+
+;; Author: John Wiegley <johnw@newartisans.com>
+;; Maintainer: John Wiegley <johnw@newartisans.com>
+
+;; 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:
+
+;; Provides support for the :delight keyword, which is made available
+;; by default by requiring `use-package'. Using it requires the
+;; `delight' package to be installed (available on GNU ELPA).
+;;
+;; See the `use-package' info manual for more information.
+
+;;; Code:
+
+(require 'use-package-core)
+
+(defun use-package-normalize-delight (name args)
+ "Normalize ARGS for a single call to `delight'."
+ (when (eq :eval (car args))
+ ;; Handle likely common mistake.
+ (use-package-error ":delight mode line constructs must be quoted"))
+ (cond ((and (= (length args) 1)
+ (use-package-non-nil-symbolp (car args)))
+ `(,(nth 0 args) nil ,name))
+ ((= (length args) 2)
+ `(,(nth 0 args) ,(nth 1 args) ,name))
+ ((= (length args) 3)
+ args)
+ (t
+ (use-package-error
+ ":delight expects `delight' arguments or a list of them"))))
+
+;;;###autoload
+(defun use-package-normalize/:delight (name _keyword args)
+ "Normalize arguments to delight."
+ (cond ((null args)
+ `((,(use-package-as-mode name) nil ,name)))
+ ((and (= (length args) 1)
+ (use-package-non-nil-symbolp (car args)))
+ `((,(car args) nil ,name)))
+ ((and (= (length args) 1)
+ (stringp (car args)))
+ `((,(use-package-as-mode name) ,(car args) ,name)))
+ ((and (= (length args) 1)
+ (listp (car args))
+ (eq 'quote (caar args)))
+ `((,(use-package-as-mode name) ,@(cdar args) ,name)))
+ ((and (= (length args) 2)
+ (listp (nth 1 args))
+ (eq 'quote (car (nth 1 args))))
+ `((,(car args) ,@(cdr (nth 1 args)) ,name)))
+ (t (mapcar
+ (apply-partially #'use-package-normalize-delight name)
+ (if (use-package-non-nil-symbolp (car args))
+ (list args)
+ args)))))
+
+;;;###autoload
+(defun use-package-handler/:delight (name _keyword args rest state)
+ (let ((body (use-package-process-keywords name rest state)))
+ (use-package-concat
+ body
+ `((if (fboundp 'delight)
+ (delight '(,@args)))))))
+
+(add-to-list 'use-package-keywords :delight t)
+
+(provide 'use-package-delight)
+
+;;; use-package-delight.el ends here
diff --git a/lisp/use-package/use-package-diminish.el b/lisp/use-package/use-package-diminish.el
new file mode 100644
index 00000000000..f683694dbd8
--- /dev/null
+++ b/lisp/use-package/use-package-diminish.el
@@ -0,0 +1,77 @@
+;;; use-package-diminish.el --- Support for the :diminish keyword -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
+
+;; Author: John Wiegley <johnw@newartisans.com>
+;; Maintainer: John Wiegley <johnw@newartisans.com>
+
+;; 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:
+
+;; Provides support for the :diminish keyword, which is made available
+;; by default by requiring `use-package'. Using it requires the
+;; `diminish' package to be installed (available on GNU ELPA).
+;;
+;; See the `use-package' info manual for more information.
+
+;;; Code:
+
+(require 'use-package-core)
+
+(defun use-package-normalize-diminish (name label arg &optional recursed)
+ "Normalize the arguments to diminish down to a list of one of two forms:
+ SYMBOL
+ (SYMBOL . STRING)"
+ (cond
+ ((not arg)
+ (list (use-package-as-mode name)))
+ ((use-package-non-nil-symbolp arg)
+ (list arg))
+ ((stringp arg)
+ (list (cons (use-package-as-mode name) arg)))
+ ((and (consp arg) (stringp (cdr arg)))
+ (list arg))
+ ((and (not recursed) (listp arg) (listp (cdr arg)))
+ (mapcar #'(lambda (x) (car (use-package-normalize-diminish
+ name label x t))) arg))
+ (t
+ (use-package-error
+ (concat label " wants a string, symbol, "
+ "(symbol . string) or list of these")))))
+
+;;;###autoload
+(defun use-package-normalize/:diminish (name keyword args)
+ (use-package-as-one (symbol-name keyword) args
+ (apply-partially #'use-package-normalize-diminish name) t))
+
+;;;###autoload
+(defun use-package-handler/:diminish (name _keyword arg rest state)
+ (let ((body (use-package-process-keywords name rest state)))
+ (use-package-concat
+ (mapcar #'(lambda (var)
+ `(if (fboundp 'diminish)
+ ,(if (consp var)
+ `(diminish ',(car var) ,(cdr var))
+ `(diminish ',var))))
+ arg)
+ body)))
+
+(add-to-list 'use-package-keywords :diminish t)
+
+(provide 'use-package-diminish)
+
+;;; use-package-diminish.el ends here
diff --git a/lisp/use-package/use-package-ensure-system-package.el b/lisp/use-package/use-package-ensure-system-package.el
new file mode 100644
index 00000000000..ef4afac1a0b
--- /dev/null
+++ b/lisp/use-package/use-package-ensure-system-package.el
@@ -0,0 +1,106 @@
+;;; use-package-ensure-system-package.el --- auto install system packages -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
+
+;; Author: Justin Talbott <justin@waymondo.com>
+;; Keywords: convenience, tools, extensions
+;; URL: https://github.com/waymondo/use-package-ensure-system-package
+;; Version: 0.2
+;; Package-Requires: ((use-package "2.1") (system-packages "1.0.4"))
+;; Filename: use-package-ensure-system-package.el
+
+;; 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 `:ensure-system-package` keyword allows you to ensure system
+;; binaries exist alongside your `use-package` declarations. Using it
+;; requires the `system-packages' package to be installed (available
+;; on GNU ELPA).
+;;
+;; See the `use-package' info manual for more information.
+
+;;; Code:
+
+(require 'use-package)
+(require 'system-packages nil t)
+
+(eval-when-compile
+ (declare-function system-packages-get-command "system-packages"))
+
+(defvar use-package-ensure-system-package--custom-packages '()
+ "List of commands used to install custom packages.")
+
+(defun use-package-ensure-system-package-consify (arg)
+ "Turn ARG into a cons of the form (PACKAGE-NAME . INSTALL-COMMAND')."
+ (cond
+ ((stringp arg)
+ (cons arg `(system-packages-install ,arg)))
+ ((symbolp arg)
+ (cons arg `(system-packages-install ,(symbol-name arg))))
+ ((consp arg)
+ (cond
+ ((not (cdr arg))
+ (use-package-ensure-system-package-consify (car arg)))
+ ((stringp (cdr arg))
+ (progn
+ (push (cdr arg) use-package-ensure-system-package--custom-packages)
+ (cons (car arg) `(async-shell-command ,(cdr arg)))))
+ (t
+ (cons (car arg)
+ `(system-packages-install ,(symbol-name (cdr arg)))))))))
+
+(defun use-package-ensure-system-package-update-custom-packages ()
+ "Update custom packages (not installed by system package manager).
+Run the same commands used for installing them."
+ (interactive)
+ (dolist (cmd use-package-ensure-system-package--custom-packages)
+ (async-shell-command cmd)))
+
+;;;###autoload
+(defun use-package-normalize/:ensure-system-package (_name-symbol keyword args)
+ "Turn ARGS into a list of conses of the form (PACKAGE-NAME . INSTALL-COMMAND)."
+ (use-package-as-one (symbol-name keyword) args
+ (lambda (_label arg)
+ (cond
+ ((and (listp arg) (listp (cdr arg)))
+ (mapcar #'use-package-ensure-system-package-consify arg))
+ (t
+ (list (use-package-ensure-system-package-consify arg)))))))
+
+(defun use-package-ensure-system-package-exists? (file-or-exe)
+ "If FILE-OR-EXE is a string, ensure the file path exists.
+If it is a symbol, ensure the binary exist."
+ (if (stringp file-or-exe)
+ (file-exists-p file-or-exe)
+ (executable-find (symbol-name file-or-exe))))
+
+
+;;;###autoload
+(defun use-package-handler/:ensure-system-package (name _keyword arg rest state)
+ "Execute the handler for `:ensure-system-package' keyword in `use-package'."
+ (let ((body (use-package-process-keywords name rest state)))
+ (use-package-concat
+ (mapcar #'(lambda (cons)
+ `(unless (use-package-ensure-system-package-exists? ',(car cons))
+ ,(cdr cons))) arg)
+ body)))
+
+(add-to-list 'use-package-keywords :ensure-system-package t)
+
+(provide 'use-package-ensure-system-package)
+
+;;; use-package-ensure-system-package.el ends here
diff --git a/lisp/use-package/use-package-ensure.el b/lisp/use-package/use-package-ensure.el
new file mode 100644
index 00000000000..e0ea982594e
--- /dev/null
+++ b/lisp/use-package/use-package-ensure.el
@@ -0,0 +1,212 @@
+;;; use-package-ensure.el --- Support for the :ensure and :pin keywords -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
+
+;; Author: John Wiegley <johnw@newartisans.com>
+;; Maintainer: John Wiegley <johnw@newartisans.com>
+
+;; 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:
+
+;; Provides support for the :ensure and :pin keywords, which are made
+;; available by default by requiring `use-package'.
+;;
+;; See the `use-package' info manual for more information.
+
+;;; Code:
+
+(require 'cl-lib)
+(require 'use-package-core)
+
+(defgroup use-package-ensure nil
+ "Support for :ensure and :pin keywords in `use-package' declarations."
+ :group 'use-package
+ :link '(custom-manual "(use-package) Installing packages")
+ :version "29.1")
+
+(eval-when-compile
+ (declare-function package-installed-p "package")
+ (declare-function package-read-all-archive-contents "package" ()))
+
+(defcustom use-package-always-ensure nil
+ "Treat every package as though it had specified using `:ensure SEXP'.
+See also `use-package-defaults', which uses this value."
+ :type 'sexp
+ :group 'use-package-ensure)
+
+(defcustom use-package-always-pin nil
+ "Treat every package as though it had specified using `:pin SYM'.
+See also `use-package-defaults', which uses this value."
+ :type 'symbol
+ :group 'use-package-ensure)
+
+(defcustom use-package-ensure-function 'use-package-ensure-elpa
+ "Function that ensures a package is installed.
+This function is called with three arguments: the name of the
+package declared in the `use-package' form; the arguments passed
+to all `:ensure' keywords (always a list, even if only one); and
+the current `state' plist created by previous handlers.
+
+Note that this function is called whenever `:ensure' is provided,
+even if it is nil. It is up to the function to decide on the
+semantics of the various values for `:ensure'.
+
+This function should return non-nil if the package is installed.
+
+The default value uses package.el to install the package."
+ :type '(choice (const :tag "package.el" use-package-ensure-elpa)
+ (function :tag "Custom"))
+ :group 'use-package-ensure)
+
+;;;; :pin
+
+(defun use-package-normalize/:pin (_name keyword args)
+ (use-package-only-one (symbol-name keyword) args
+ #'(lambda (_label arg)
+ (cond
+ ((stringp arg) arg)
+ ((use-package-non-nil-symbolp arg) (symbol-name arg))
+ (t
+ (use-package-error
+ ":pin wants an archive name (a string)"))))))
+
+(eval-when-compile
+ (defvar package-pinned-packages)
+ (defvar package-archives))
+
+(defun use-package-archive-exists-p (archive)
+ "Check if a given ARCHIVE is enabled.
+
+ARCHIVE can be a string or a symbol or `manual' to indicate a
+manually updated package."
+ (if (member archive '(manual "manual"))
+ 't
+ (let ((valid nil))
+ (dolist (pa package-archives)
+ (when (member archive (list (car pa) (intern (car pa))))
+ (setq valid 't)))
+ valid)))
+
+(defun use-package-pin-package (package archive)
+ "Pin PACKAGE to ARCHIVE."
+ (unless (boundp 'package-pinned-packages)
+ (setq package-pinned-packages ()))
+ (let ((archive-symbol (if (symbolp archive) archive (intern archive)))
+ (archive-name (if (stringp archive) archive (symbol-name archive))))
+ (if (use-package-archive-exists-p archive-symbol)
+ (add-to-list 'package-pinned-packages (cons package archive-name))
+ (error "Archive '%s' requested for package '%s' is not available"
+ archive-name package))
+ (unless (bound-and-true-p package--initialized)
+ (package-initialize t))))
+
+(defun use-package-handler/:pin (name _keyword archive-name rest state)
+ (let ((body (use-package-process-keywords name rest state))
+ (pin-form (if archive-name
+ `(use-package-pin-package ',(use-package-as-symbol name)
+ ,archive-name))))
+ ;; Pinning should occur just before ensuring
+ ;; See `use-package-handler/:ensure'.
+ (if (bound-and-true-p byte-compile-current-file)
+ (eval pin-form) ; Eval when byte-compiling,
+ (push pin-form body)) ; or else wait until runtime.
+ body))
+
+;;;; :ensure
+
+(defvar package-archive-contents)
+
+;;;###autoload
+(defun use-package-normalize/:ensure (_name keyword args)
+ (if (null args)
+ (list t)
+ (use-package-only-one (symbol-name keyword) args
+ #'(lambda (_label arg)
+ (cond
+ ((symbolp arg)
+ (list arg))
+ ((and (listp arg) (= 3 (length arg))
+ (symbolp (nth 0 arg))
+ (eq :pin (nth 1 arg))
+ (or (stringp (nth 2 arg))
+ (symbolp (nth 2 arg))))
+ (list (cons (nth 0 arg) (nth 2 arg))))
+ (t
+ (use-package-error
+ (concat ":ensure wants an optional package name "
+ "(an unquoted symbol name), or (<symbol> :pin <string>)"))))))))
+
+(defun use-package-ensure-elpa (name args _state &optional _no-refresh)
+ (dolist (ensure args)
+ (let ((package
+ (or (and (eq ensure t) (use-package-as-symbol name))
+ ensure)))
+ (when package
+ (require 'package)
+ (when (consp package)
+ (use-package-pin-package (car package) (cdr package))
+ (setq package (car package)))
+ (unless (package-installed-p package)
+ (condition-case-unless-debug err
+ (progn
+ (when (assoc package (bound-and-true-p
+ package-pinned-packages))
+ (package-read-all-archive-contents))
+ (if (assoc package package-archive-contents)
+ (package-install package)
+ (package-refresh-contents)
+ (when (assoc package (bound-and-true-p
+ package-pinned-packages))
+ (package-read-all-archive-contents))
+ (package-install package))
+ t)
+ (error
+ (display-warning 'use-package
+ (format "Failed to install %s: %s"
+ name (error-message-string err))
+ :error))))))))
+
+;;;###autoload
+(defun use-package-handler/:ensure (name _keyword ensure rest state)
+ (let* ((body (use-package-process-keywords name rest state)))
+ ;; We want to avoid installing packages when the `use-package' macro is
+ ;; being macro-expanded by elisp completion (see `lisp--local-variables'),
+ ;; but still install packages when byte-compiling, to avoid requiring
+ ;; `package' at runtime.
+ (if (bound-and-true-p byte-compile-current-file)
+ ;; Eval when byte-compiling,
+ (funcall use-package-ensure-function name ensure state)
+ ;; or else wait until runtime.
+ (push `(,use-package-ensure-function ',name ',ensure ',state)
+ body))
+ body))
+
+(add-to-list 'use-package-defaults
+ '(:ensure (list use-package-always-ensure)
+ (lambda (name args)
+ (and use-package-always-ensure
+ (not (plist-member args :load-path))))) t)
+
+(add-to-list 'use-package-defaults
+ '(:pin use-package-always-pin use-package-always-pin) t)
+
+(add-to-list 'use-package-keywords :ensure)
+(add-to-list 'use-package-keywords :pin)
+
+(provide 'use-package-ensure)
+
+;;; use-package-ensure.el ends here
diff --git a/lisp/use-package/use-package-jump.el b/lisp/use-package/use-package-jump.el
new file mode 100644
index 00000000000..4fc5c3f0a8e
--- /dev/null
+++ b/lisp/use-package/use-package-jump.el
@@ -0,0 +1,74 @@
+;;; use-package-jump.el --- Attempt to jump to a use-package declaration -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
+
+;; Author: John Wiegley <johnw@newartisans.com>
+;; Maintainer: John Wiegley <johnw@newartisans.com>
+
+;; 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:
+
+;; Provides the command `M-x use-package-jump-to-package-form'. However, it
+;; only works if the package being jumped to was required during
+;; initialization. If it was autoloaded, it will not work.
+;; Improvements are needed.
+;;
+;; See the `use-package' info manual for more information.
+
+;;; Code:
+
+(require 'use-package-core)
+
+(defun use-package-find-require (package)
+ "Find file that required PACKAGE by searching `load-history'.
+Returns an absolute file path or nil if none is found."
+ (catch 'suspect
+ (dolist (filespec load-history)
+ (dolist (entry (cdr filespec))
+ (when (equal entry (cons 'require package))
+ (throw 'suspect (car filespec)))))))
+
+;;;###autoload
+(defun use-package-jump-to-package-form (package)
+ "Attempt to find and jump to the `use-package' form that loaded PACKAGE.
+This will only find the form if that form actually required
+PACKAGE. If PACKAGE was previously required then this function
+will jump to the file that originally required PACKAGE instead."
+ (interactive (list (completing-read "Package: " features)))
+ (let* ((package (if (stringp package) (intern package) package))
+ (requiring-file (use-package-find-require package))
+ file location)
+ (if (null requiring-file)
+ (user-error "Can't find file requiring file; may have been autoloaded")
+ (setq file (if (string= (file-name-extension requiring-file) "elc")
+ (concat (file-name-sans-extension requiring-file) ".el")
+ requiring-file))
+ (when (file-exists-p file)
+ (find-file-other-window file)
+ (save-excursion
+ (goto-char (point-min))
+ (setq location
+ (re-search-forward
+ (format (eval use-package-form-regexp-eval) package) nil t)))
+ (if (null location)
+ (message "No use-package form found.")
+ (goto-char location)
+ (beginning-of-line))))))
+
+(provide 'use-package-jump)
+
+;;; use-package-jump.el ends here
diff --git a/lisp/use-package/use-package-lint.el b/lisp/use-package/use-package-lint.el
new file mode 100644
index 00000000000..9239d01148a
--- /dev/null
+++ b/lisp/use-package/use-package-lint.el
@@ -0,0 +1,80 @@
+;;; use-package-lint.el --- Attempt to find errors in use-package declarations -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
+
+;; Author: John Wiegley <johnw@newartisans.com>
+;; Maintainer: John Wiegley <johnw@newartisans.com>
+
+;; 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:
+
+;; Provides the command `M-x use-package-lint'.
+;;
+;; See the `use-package' info manual for more information.
+
+;;; Code:
+
+(require 'cl-lib)
+(require 'use-package-core)
+
+(defun use-package-lint-declaration (name plist)
+ (dolist (path (plist-get plist :load-path))
+ (unless (file-exists-p path)
+ (display-warning
+ 'use-package
+ (format "%s :load-path does not exist: %s"
+ name path) :error)))
+
+ (unless (or (plist-member plist :disabled)
+ (plist-get plist :no-require)
+ (locate-library (use-package-as-string name) nil
+ (plist-get plist :load-path)))
+ (display-warning
+ 'use-package
+ (format "%s module cannot be located" name) :error))
+
+ ;; (dolist (command (plist-get plist :commands))
+ ;; (unless (string= (find-lisp-object-file-name command nil)
+ ;; (locate-library (use-package-as-string name) nil
+ ;; (plist-get plist :load-path)))
+ ;; (display-warning
+ ;; 'use-package
+ ;; (format "%s :command is from different path: %s"
+ ;; name (symbol-name command)) :error)))
+ )
+
+;;;###autoload
+(defun use-package-lint ()
+ "Check for errors in `use-package' declarations.
+For example, if the module's `:if' condition is met, but even
+with the specified `:load-path' the module cannot be found."
+ (interactive)
+ (save-excursion
+ (goto-char (point-min))
+ (let ((re (eval use-package-form-regexp-eval)))
+ (while (re-search-forward re nil t)
+ (goto-char (match-beginning 0))
+ (let ((decl (read (current-buffer))))
+ (when (eq (car decl) 'use-package)
+ (use-package-lint-declaration
+ (use-package-as-string (cadr decl))
+ (use-package-normalize-keywords
+ (cadr decl) (cddr decl)))))))))
+
+(provide 'use-package-lint)
+
+;;; use-package-lint.el ends here
diff --git a/lisp/use-package/use-package.el b/lisp/use-package/use-package.el
new file mode 100644
index 00000000000..7682468522d
--- /dev/null
+++ b/lisp/use-package/use-package.el
@@ -0,0 +1,53 @@
+;;; use-package.el --- A configuration macro for simplifying your .emacs -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2012-2023 Free Software Foundation, Inc.
+
+;; Author: John Wiegley <johnw@newartisans.com>
+;; Maintainer: John Wiegley <johnw@newartisans.com>
+;; Created: 17 Jun 2012
+;; Version: 2.4.4
+;; Package-Requires: ((emacs "24.3") (bind-key "2.4"))
+;; Keywords: dotemacs startup speed config package extensions
+;; URL: https://github.com/jwiegley/use-package
+
+;; 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 `use-package' declaration macro allows you to isolate package
+;; configuration in your init file in a way that is
+;; performance-oriented and, well, just tidy. I created it because I
+;; have over 80 packages that I use in Emacs, and things were getting
+;; difficult to manage. Yet with this utility my total load time is
+;; just under 1 second, with no loss of functionality!
+;;
+;; See the `use-package' info manual for more information.
+
+;;; Code:
+
+(require 'use-package-core)
+
+(require 'use-package-bind-key)
+(require 'use-package-diminish)
+(require 'use-package-delight)
+(require 'use-package-ensure)
+
+(declare-function use-package-jump-to-package-form "use-package-jump")
+(autoload #'use-package-jump-to-package-form "use-package-jump" nil t)
+
+(provide 'use-package)
+
+;;; use-package.el ends here
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 38e9d5f9c91..7413ecb79b1 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
@@ -1041,12 +1041,13 @@ It is based on `log-edit-mode', and has Git-specific extensions."
(string-replace file-diff "" vc-git-patch-string))
(user-error "Index not empty"))
(setq pos (point))))))
- (let ((patch-file (make-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)))))
(cl-flet ((boolean-arg-fn
(argument)
(lambda (value) (when (equal value "yes") (list argument)))))
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 328d33040db..f105461b210 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
@@ -1135,7 +1135,7 @@ BEWARE: this function may change the current buffer."
(vc-dir-deduce-fileset state-model-only-files))
((derived-mode-p 'dired-mode)
(dired-vc-deduce-fileset state-model-only-files not-state-changing))
- ((derived-mode-p 'diff-mode)
+ ((and (derived-mode-p 'diff-mode) (not buffer-file-name))
(diff-vc-deduce-fileset))
((setq backend (vc-backend buffer-file-name))
(if state-model-only-files
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..9995706a5da 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
@@ -2093,6 +2093,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 +2122,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 +2217,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 +2283,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 +2308,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 +2454,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 +2469,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))))))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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 00e76df0a01..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
@@ -776,7 +776,8 @@ Default value of MODIFIERS is `shift-super'."
(defconst windmove--default-keybindings-type
`(choice (const :tag "Don't bind" nil)
(cons :tag "Bind using"
- (key-sequence :tag "Prefix")
+ (choice (key-sequence :tag "Prefix")
+ (const :tag "No Prefix" nil))
(set :tag "Modifier"
:greedy t
;; See `(elisp) Keyboard Events'
diff --git a/lisp/window.el b/lisp/window.el
index a11293d372a..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
@@ -2162,17 +2162,14 @@ the font."
(let* ((window-width (window-body-width window t))
(font-width (window-font-width window face))
(ncols (- (/ window-width font-width)
- (ceiling (line-number-display-width 'columns)))))
+ (ceiling (line-number-display-width 'columns))))
+ (fringes (window-fringes window))
+ (lfringe (car fringes))
+ (rfringe (nth 1 fringes)))
(if (and (display-graphic-p)
overflow-newline-into-fringe
- (not
- (or (eq left-fringe-width 0)
- (and (null left-fringe-width)
- (= (frame-parameter nil 'left-fringe) 0))))
- (not
- (or (eq right-fringe-width 0)
- (and (null right-fringe-width)
- (= (frame-parameter nil 'right-fringe) 0)))))
+ (not (eq lfringe 0))
+ (not (eq rfringe 0)))
ncols
;; FIXME: This should remove 1 more column when there are no
;; fringes, lines are truncated, and the window is hscrolled,
@@ -4636,7 +4633,7 @@ omitted in calls from `switch-to-next-buffer'."
(catch 'found
(dolist (regexp switch-to-prev-buffer-skip-regexp)
(when (string-match-p regexp (buffer-name buffer))
- (throw 'tag t)))))))))
+ (throw 'found t)))))))))
(defun switch-to-prev-buffer (&optional window bury-or-kill)
"In WINDOW switch to previous buffer.
@@ -10564,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
index 3b4ef8c3cc5..aa74bea3d26 100644
--- a/m4/explicit_bzero.m4
+++ b/m4/explicit_bzero.m4
@@ -1,4 +1,4 @@
-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/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..70e9105bee1 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.
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4
index 1a8bf8b7cdf..e03946c94ca 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 9e09b96e165..15401e129cd 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 4abea2ec597..9817c74403a 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 840da905dab..523f833ca24 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 29.0.60 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 ebbbcd2df24..2de6071a33c 100644
--- a/oldXMenu/ChangeLog.1
+++ b/oldXMenu/ChangeLog.1
@@ -46,7 +46,7 @@
* Makefile.in (mostlyclean, clean, distclean, maintainer-clean, tags):
Declare as PHONY.
- (boostrap-clean): New.
+ (bootstrap-clean): New.
2013-10-24 Glenn Morris <rgm@gnu.org>
@@ -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 9ec536a96d1..c96c2b597bd 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 7f77c0ca077..74df9809261 100644
--- a/src/ChangeLog.12
+++ b/src/ChangeLog.12
@@ -10836,7 +10836,7 @@
* gtkutil.c (xg_maybe_add_timer): Port to higher-res time stamps.
* image.c (prepare_image_for_display, clear_image_cache)
- (lookup_image): Port to higer-resolution time stamps.
+ (lookup_image): Port to higher-resolution time stamps.
* keyboard.c (start_polling, bind_polling_period):
Check for time stamp overflow.
@@ -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 91f8005ac51..d9736479a04 100644
--- a/src/ChangeLog.13
+++ b/src/ChangeLog.13
@@ -10579,7 +10579,7 @@
(../src/$(OLDXMENU), $(OLDXMENU)): Remove.
(temacs$(EXEEXT)): Depend on $(LIBXMENU), not stamp-oldxmenu.
($(lwlibdir)/liblw.a, $(oldXMenudir)/libXMenu11.a, FORCE): New targets.
- (boostrap-clean): No need to remove stamp-oldxmenu.
+ (bootstrap-clean): No need to remove stamp-oldxmenu.
Fix recently introduced bool vector overrun.
This was due to an optimization that went awry.
@@ -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 da11e130b2a..c29c3750e59 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 980085d3292..f7a0a4a80c8 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.
@@ -5275,7 +5275,8 @@ valid_lisp_object_p (Lisp_Object obj)
if (valid <= 0)
return valid;
- if (SUBRP (obj))
+ /* Strings and conses produced by AUTO_STRING etc. all get here. */
+ if (SUBRP (obj) || STRINGP (obj) || CONSP (obj))
return 1;
return 0;
@@ -7436,7 +7437,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 71be7ed9e13..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.
@@ -604,7 +604,6 @@ even if it is dead. The return value is never nil. */)
set_buffer_intervals (b, NULL);
BUF_UNCHANGED_MODIFIED (b) = 1;
BUF_OVERLAY_UNCHANGED_MODIFIED (b) = 1;
- BUF_CHARS_UNCHANGED_MODIFIED (b) = 1;
BUF_END_UNCHANGED (b) = 0;
BUF_BEG_UNCHANGED (b) = 0;
*(BUF_GPT_ADDR (b)) = *(BUF_Z_ADDR (b)) = 0; /* Put an anchor '\0'. */
@@ -1748,7 +1747,19 @@ other_buffer_safely (Lisp_Object buffer)
if (candidate_buffer (buf, buffer))
return buf;
- return safe_call (1, Qget_scratch_buffer_create);
+ /* This function must return a valid buffer, since it is frequently
+ our last line of defense in the face of the expected buffers
+ becoming dead under our feet. safe_call below could return nil
+ if recreating *scratch* in Lisp, which does some fancy stuff,
+ signals an error in some weird use case. */
+ buf = safe_call (1, Qget_scratch_buffer_create);
+ if (NILP (buf))
+ {
+ AUTO_STRING (scratch, "*scratch*");
+ buf = Fget_buffer_create (scratch, Qnil);
+ Fset_buffer_major_mode (buf);
+ }
+ return buf;
}
DEFUN ("buffer-enable-undo", Fbuffer_enable_undo, Sbuffer_enable_undo,
@@ -3899,11 +3910,11 @@ the value is (point-min). */)
/* These functions are for debugging overlays. */
DEFUN ("overlay-lists", Foverlay_lists, Soverlay_lists, 0, 0, 0,
- doc: /* Return a pair of lists giving all the overlays of the current buffer.
-The car has all the overlays before the overlay center;
-the cdr has all the overlays after the overlay center.
-Recentering overlays moves overlays between these lists.
-The lists you get are copies, so that changing them has no effect.
+ doc: /* Return a list giving all the overlays of the current buffer.
+
+For backward compatibility, the value is actually a list that
+holds another list; the overlays are in the inner list.
+The list you get is a copy, so that changing it has no effect.
However, the overlays you get are the real objects that the buffer uses. */)
(void)
{
@@ -3919,7 +3930,12 @@ However, the overlays you get are the real objects that the buffer uses. */)
DEFUN ("overlay-recenter", Foverlay_recenter, Soverlay_recenter, 1, 1, 0,
doc: /* Recenter the overlays of the current buffer around position POS.
That makes overlay lookup faster for positions near POS (but perhaps slower
-for positions far away from POS). */)
+for positions far away from POS).
+
+Since Emacs 29.1, this function is a no-op, because the implementation
+of overlays changed and their lookup is now fast regardless of their
+position in the buffer. In particular, this function no longer affects
+the value returned by `overlay-lists'. */)
(Lisp_Object pos)
{
CHECK_FIXNUM_COERCE_MARKER (pos);
diff --git a/src/buffer.h b/src/buffer.h
index dded0cd98c1..23340b4c0ee 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.
@@ -149,18 +149,12 @@ enum { BEG = 1, BEG_BYTE = BEG };
#define BUF_BEG_UNCHANGED(buf) ((buf)->text->beg_unchanged)
#define BUF_END_UNCHANGED(buf) ((buf)->text->end_unchanged)
-#define BUF_CHARS_UNCHANGED_MODIFIED(buf) \
- ((buf)->text->chars_unchanged_modified)
-
#define UNCHANGED_MODIFIED \
BUF_UNCHANGED_MODIFIED (current_buffer)
#define OVERLAY_UNCHANGED_MODIFIED \
BUF_OVERLAY_UNCHANGED_MODIFIED (current_buffer)
#define BEG_UNCHANGED BUF_BEG_UNCHANGED (current_buffer)
#define END_UNCHANGED BUF_END_UNCHANGED (current_buffer)
-
-#define CHARS_UNCHANGED_MODIFIED \
- BUF_CHARS_UNCHANGED_MODIFIED (current_buffer)
/* Functions to set PT in the current buffer, or another buffer. */
@@ -274,11 +268,6 @@ struct buffer_text
end_unchanged contain no useful information. */
modiff_count overlay_unchanged_modified;
- /* CHARS_MODIFF as of last redisplay that finished. It's used
- when we only care about changes in actual buffer text, not in
- any other kind of changes, like properties etc. */
- modiff_count chars_unchanged_modified;
-
/* Properties of this buffer's text. */
INTERVAL intervals;
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 e8ae2e276fc..1a959b1c07b 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 1a4f73500a3..c92684f4bc7 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 b6072a866e6..bd7ecfffc23 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 da53f32971e..f86f3c5ed85 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 c6b85e17bc2..bb4d1347d72 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..a0a37acb804 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.
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 b364f441b53..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.
@@ -3279,18 +3279,18 @@ The other arguments are substituted into it to make the result, a string.
The format control string may contain %-sequences meaning to substitute
the next available argument, or the argument explicitly specified:
-%s means print a string argument. Actually, prints any object, with `princ'.
-%d means print as signed number in decimal.
-%o means print a number in octal.
-%x means print a number in hex.
+%s means produce a string argument. Actually, produces any object with `princ'.
+%d means produce as signed number in decimal.
+%o means produce a number in octal.
+%x means produce a number in hex.
%X is like %x, but uses upper case.
-%e means print a number in exponential notation.
-%f means print a number in decimal-point notation.
-%g means print a number in exponential notation if the exponent would be
+%e means produce a number in exponential notation.
+%f means produce a number in decimal-point notation.
+%g means produce a number in exponential notation if the exponent would be
less than -4 or greater than or equal to the precision (default: 6);
- otherwise it prints in decimal-point notation.
-%c means print a number as a single character.
-%S means print any object as an s-expression (using `prin1').
+ otherwise it produces in decimal-point notation.
+%c means produce a number as a single character.
+%S means produce any object as an s-expression (using `prin1').
The argument used for %d, %o, %x, %e, %f, %g or %c must be a number.
%o, %x, and %X treat arguments as unsigned if `binary-as-unsigned' is t
@@ -3325,7 +3325,7 @@ included even if the precision is zero, and also forces trailing
zeros after the decimal point to be left in place.
The width specifier supplies a lower limit for the length of the
-printed representation. The padding, if any, normally goes on the
+produced representation. The padding, if any, normally goes on the
left, but it goes on the right if the - flag is present. The padding
character is normally a space, but it is 0 if the 0 flag is present.
The 0 flag is ignored if the - flag is present, or the format sequence
@@ -3334,7 +3334,7 @@ is something other than %d, %o, %x, %e, %f, and %g.
For %e and %f sequences, the number after the "." in the precision
specifier says how many decimal places to show; if zero, the decimal
point itself is omitted. For %g, the precision specifies how many
-significant digits to print; zero or omitted are treated as 1.
+significant digits to produce; zero or omitted are treated as 1.
For %s and %S, the precision specifier truncates the string to the
given width.
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 bef89b059fc..6a23aa708e4 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 00e7f86e9ae..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.
@@ -1924,6 +1924,12 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
Vcoding_system_hash_table. */
syms_of_coding (); /* This should be after syms_of_fileio. */
init_frame_once (); /* Before init_window_once. */
+ /* init_window_once calls make_initial_frame, which calls
+ Fcurrent_time and bset_display_time, both of which allocate
+ bignums. Without the following call to init_bignums, crashes
+ happen on Windows 9X after dumping when GC tries to free a
+ pointer allocated on the system heap. */
+ init_bignum ();
init_window_once (); /* Init the window system. */
#ifdef HAVE_WINDOW_SYSTEM
init_fringe_once (); /* Swap bitmaps if necessary. */
@@ -2904,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..2dd0c356e88 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.
diff --git a/src/fileio.c b/src/fileio.c
index 92335b639cd..f00c389a520 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.
@@ -2427,16 +2427,11 @@ DEFUN ("make-directory-internal", Fmake_directory_internal,
(Lisp_Object directory)
{
const char *dir;
- Lisp_Object handler;
Lisp_Object encoded_dir;
CHECK_STRING (directory);
directory = Fexpand_file_name (directory, Qnil);
- handler = Ffind_file_name_handler (directory, Qmake_directory_internal);
- if (!NILP (handler))
- return call2 (handler, Qmake_directory_internal, directory);
-
encoded_dir = ENCODE_FILE (directory);
dir = SSDATA (encoded_dir);
@@ -5392,12 +5387,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;
}
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 d8744c1a4de..51ef1153fb7 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.
@@ -3938,7 +3938,7 @@ system.
If the region can't be decoded, signal an error and don't modify the buffer.
Optional third argument BASE64URL determines whether to use the URL variant
of the base 64 encoding, as defined in RFC 4648.
-If optional fourth argument INGORE-INVALID is non-nil invalid characters
+If optional fourth argument IGNORE-INVALID is non-nil invalid characters
are ignored instead of signaling an error. */)
(Lisp_Object beg, Lisp_Object end, Lisp_Object base64url,
Lisp_Object ignore_invalid)
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 05106a6c759..38a6583605c 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 d6fd62b2ac2..4a4c8c38447 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.
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 7f0aaf85a41..45dd1b0aa53 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.
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 a6bba096a43..f5e70305ead 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..4599ca40c47 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.
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 2436f78ac38..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.
@@ -11309,6 +11309,15 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
img->face_font_size);
viewbox_height = svg_css_length_to_pixels (iheight, dpi,
img->face_font_size);
+
+ /* Here one dimension could be zero because in percent unit.
+ So calculate this dimension with the other. */
+ if (! (0 < viewbox_width) && (iwidth.unit == RSVG_UNIT_PERCENT))
+ viewbox_width = (viewbox_height * viewbox.width / viewbox.height)
+ * iwidth.length;
+ else if (! (0 < viewbox_height) && (iheight.unit == RSVG_UNIT_PERCENT))
+ viewbox_height = (viewbox_width * viewbox.height / viewbox.width)
+ * iheight.length;
}
else if (has_width && has_viewbox)
{
diff --git a/src/indent.c b/src/indent.c
index 4671ccccf90..6de18d749ca 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 04fa9e827a2..b8db08bc74c 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.
@@ -15,7 +15,7 @@ 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 <http://www.gnu.org/licenses/>. */
+along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
#include <math.h>
@@ -85,7 +85,7 @@ along with GNU Emacs. If not, see <http://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 291fa53fd30..8f675fd43bc 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.
@@ -15,7 +15,7 @@ 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 <http://www.gnu.org/licenses/>. */
+along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#ifndef ITREE_H
#define ITREE_H
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 0f70f60d75c..70555b3ce91 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.
diff --git a/src/lread.c b/src/lread.c
index 0a6e4201e40..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.
@@ -3375,7 +3375,7 @@ read_bool_vector (Lisp_Object readcharfun)
break;
}
if (INT_MULTIPLY_WRAPV (length, 10, &length)
- | INT_ADD_WRAPV (length, c - '0', &length))
+ || INT_ADD_WRAPV (length, c - '0', &length))
invalid_syntax ("#&", readcharfun);
}
@@ -3421,7 +3421,7 @@ skip_lazy_string (Lisp_Object readcharfun)
break;
}
if (INT_MULTIPLY_WRAPV (nskip, 10, &nskip)
- | INT_ADD_WRAPV (nskip, c - '0', &nskip))
+ || INT_ADD_WRAPV (nskip, c - '0', &nskip))
invalid_syntax ("#@", readcharfun);
digits++;
if (digits == 2 && nskip == 0)
@@ -5468,15 +5468,6 @@ to the specified file name if a suffix is allowed or required. */);
Vload_suffixes =
Fcons (build_pure_c_string (MODULES_SECONDARY_SUFFIX), Vload_suffixes);
#endif
-
- DEFVAR_LISP ("dynamic-library-suffixes", Vdynamic_library_suffixes,
- doc: /* A list of suffixes for loadable dynamic libraries. */);
- Vdynamic_library_suffixes =
- Fcons (build_pure_c_string (DYNAMIC_LIB_SECONDARY_SUFFIX), Qnil);
- Vdynamic_library_suffixes =
- Fcons (build_pure_c_string (DYNAMIC_LIB_SUFFIX),
- Vdynamic_library_suffixes);
-
#endif
DEFVAR_LISP ("module-file-suffix", Vmodule_file_suffix,
doc: /* Suffix of loadable module file, or nil if modules are not supported. */);
@@ -5485,6 +5476,20 @@ to the specified file name if a suffix is allowed or required. */);
#else
Vmodule_file_suffix = Qnil;
#endif
+
+ DEFVAR_LISP ("dynamic-library-suffixes", Vdynamic_library_suffixes,
+ doc: /* A list of suffixes for loadable dynamic libraries. */);
+
+#ifndef MSDOS
+ Vdynamic_library_suffixes
+ = Fcons (build_pure_c_string (DYNAMIC_LIB_SECONDARY_SUFFIX), Qnil);
+ Vdynamic_library_suffixes
+ = Fcons (build_pure_c_string (DYNAMIC_LIB_SUFFIX),
+ Vdynamic_library_suffixes);
+#else
+ Vdynamic_library_suffixes = Qnil;
+#endif
+
DEFVAR_LISP ("load-file-rep-suffixes", Vload_file_rep_suffixes,
doc: /* List of suffixes that indicate representations of \
the same file.
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..4180cdc9e7f 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.
@@ -6703,8 +6703,16 @@ ns_create_font_panel_buttons (id target, SEL select, SEL cancel_action)
- (void)resetCursorRects
{
- NSRect visible = [self visibleRect];
- NSCursor *currentCursor = FRAME_POINTER_TYPE (emacsframe);
+ NSRect visible;
+ NSCursor *currentCursor;
+
+ /* On macOS 13, [resetCursorRects:] could be called even after the
+ window is closed. */
+ if (! emacsframe || ! FRAME_OUTPUT_DATA (emacsframe))
+ return;
+
+ visible = [self visibleRect];
+ currentCursor = FRAME_POINTER_TYPE (emacsframe);
NSTRACE ("[EmacsView resetCursorRects]");
if (currentCursor == nil)
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 fedcd3e4044..800fc2e9d05 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.
@@ -2811,7 +2811,6 @@ dump_buffer (struct dump_context *ctx, const struct buffer *in_buffer)
DUMP_FIELD_COPY (out, buffer, own_text.end_unchanged);
DUMP_FIELD_COPY (out, buffer, own_text.unchanged_modified);
DUMP_FIELD_COPY (out, buffer, own_text.overlay_unchanged_modified);
- DUMP_FIELD_COPY (out, buffer, own_text.chars_unchanged_modified);
if (buffer->own_text.intervals)
dump_field_fixup_later (ctx, out, buffer, &buffer->own_text.intervals);
dump_field_lv_rawptr (ctx, out, buffer, &buffer->own_text.markers,
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 5144c5d6c92..67d1d3e425f 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.
@@ -6795,10 +6795,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 4b746924bb1..d5463c81a09 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 736723bdf3d..ce6a20f5302 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 9beec1ce384..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.
@@ -40,6 +40,10 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include <stdio.h>
#include <stdlib.h>
+#ifdef WINDOWSNT
+extern clock_t sys_clock (void);
+#endif
+
#ifdef HAVE_TIMEZONE_T
# include <sys/param.h>
# if defined __NetBSD_Version__ && __NetBSD_Version__ < 700000000
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 4b150059fac..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.
@@ -52,7 +54,6 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#undef ts_node_named_descendant_for_byte_range
#undef ts_node_next_named_sibling
#undef ts_node_next_sibling
-#undef ts_node_parent
#undef ts_node_prev_named_sibling
#undef ts_node_prev_sibling
#undef ts_node_start_byte
@@ -76,7 +77,9 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#undef ts_query_predicates_for_pattern
#undef ts_query_string_value_for_id
#undef ts_set_allocator
+#undef ts_tree_cursor_copy
#undef ts_tree_cursor_current_node
+#undef ts_tree_cursor_delete
#undef ts_tree_cursor_goto_first_child
#undef ts_tree_cursor_goto_next_sibling
#undef ts_tree_cursor_goto_parent
@@ -109,7 +112,6 @@ DEF_DLL_FN (TSNode, ts_node_named_descendant_for_byte_range,
(TSNode, uint32_t, uint32_t));
DEF_DLL_FN (TSNode, ts_node_next_named_sibling, (TSNode));
DEF_DLL_FN (TSNode, ts_node_next_sibling, (TSNode));
-DEF_DLL_FN (TSNode, ts_node_parent, (TSNode));
DEF_DLL_FN (TSNode, ts_node_prev_named_sibling, (TSNode));
DEF_DLL_FN (TSNode, ts_node_prev_sibling, (TSNode));
DEF_DLL_FN (uint32_t, ts_node_start_byte, (TSNode));
@@ -143,7 +145,9 @@ DEF_DLL_FN (const char *, ts_query_string_value_for_id,
(const TSQuery *, uint32_t, uint32_t *));
DEF_DLL_FN (void, ts_set_allocator,
(void *(*)(size_t), void *(*)(size_t, size_t), void *(*)(void *, size_t), void (*)(void *)));
+DEF_DLL_FN (TSTreeCursor, ts_tree_cursor_copy, (const TSTreeCursor *));
DEF_DLL_FN (TSNode, ts_tree_cursor_current_node, (const TSTreeCursor *));
+DEF_DLL_FN (void, ts_tree_cursor_delete, (const TSTreeCursor *));
DEF_DLL_FN (bool, ts_tree_cursor_goto_first_child, (TSTreeCursor *));
DEF_DLL_FN (bool, ts_tree_cursor_goto_next_sibling, (TSTreeCursor *));
DEF_DLL_FN (bool, ts_tree_cursor_goto_parent, (TSTreeCursor *));
@@ -182,7 +186,6 @@ init_treesit_functions (void)
LOAD_DLL_FN (library, ts_node_named_descendant_for_byte_range);
LOAD_DLL_FN (library, ts_node_next_named_sibling);
LOAD_DLL_FN (library, ts_node_next_sibling);
- LOAD_DLL_FN (library, ts_node_parent);
LOAD_DLL_FN (library, ts_node_prev_named_sibling);
LOAD_DLL_FN (library, ts_node_prev_sibling);
LOAD_DLL_FN (library, ts_node_start_byte);
@@ -206,7 +209,9 @@ init_treesit_functions (void)
LOAD_DLL_FN (library, ts_query_predicates_for_pattern);
LOAD_DLL_FN (library, ts_query_string_value_for_id);
LOAD_DLL_FN (library, ts_set_allocator);
+ LOAD_DLL_FN (library, ts_tree_cursor_copy);
LOAD_DLL_FN (library, ts_tree_cursor_current_node);
+ LOAD_DLL_FN (library, ts_tree_cursor_delete);
LOAD_DLL_FN (library, ts_tree_cursor_goto_first_child);
LOAD_DLL_FN (library, ts_tree_cursor_goto_next_sibling);
LOAD_DLL_FN (library, ts_tree_cursor_goto_parent);
@@ -239,7 +244,6 @@ init_treesit_functions (void)
#define ts_node_named_descendant_for_byte_range fn_ts_node_named_descendant_for_byte_range
#define ts_node_next_named_sibling fn_ts_node_next_named_sibling
#define ts_node_next_sibling fn_ts_node_next_sibling
-#define ts_node_parent fn_ts_node_parent
#define ts_node_prev_named_sibling fn_ts_node_prev_named_sibling
#define ts_node_prev_sibling fn_ts_node_prev_sibling
#define ts_node_start_byte fn_ts_node_start_byte
@@ -263,7 +267,9 @@ init_treesit_functions (void)
#define ts_query_predicates_for_pattern fn_ts_query_predicates_for_pattern
#define ts_query_string_value_for_id fn_ts_query_string_value_for_id
#define ts_set_allocator fn_ts_set_allocator
+#define ts_tree_cursor_copy fn_ts_tree_cursor_copy
#define ts_tree_cursor_current_node fn_ts_tree_cursor_current_node
+#define ts_tree_cursor_delete fn_ts_tree_cursor_delete
#define ts_tree_cursor_goto_first_child fn_ts_tree_cursor_goto_first_child
#define ts_tree_cursor_goto_next_sibling fn_ts_tree_cursor_goto_next_sibling
#define ts_tree_cursor_goto_parent fn_ts_tree_cursor_goto_parent
@@ -288,7 +294,7 @@ init_treesit_functions (void)
slow enough to make insignificant any performance advantages from
using the cursor. Not exposing the cursor also minimizes the
number of new types this adds to Emacs Lisp; currently, this adds
- only the parser and node types.
+ only the parser, node, and compiled query types.
- Because updating the change is handled on the C level as each
change is made in the buffer, there is no way for Lisp to update
@@ -384,11 +390,26 @@ init_treesit_functions (void)
mysteriously drops. 3) what if a user uses so many stuff that the
default cache size (20) is not enough and we end up thrashing?
These are all imaginary scenarios but they are not impossible
- :-) */
+ :-)
+
+ Parsers in indirect buffers: We make indirect buffers to share the
+ parser of its base buffer. Indirect buffers and their base buffer
+ share the same buffer content but not other buffer attributes. If
+ they have separate parser lists, changes made in an indirect buffer
+ will only update parsers of that indirect buffer, and not parsers
+ in the base buffer or other indirect buffers, and vice versa. We
+ could keep track of all the base and indirect buffers, and update
+ all of their parsers, but ultimately decide to take a simpler
+ approach, which is to make indirect buffers share their base
+ buffer's parser list. The discussion can be found in bug#59693. */
/*** 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
@@ -611,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.
@@ -641,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.
@@ -659,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
@@ -697,9 +740,10 @@ void
treesit_record_change (ptrdiff_t start_byte, ptrdiff_t old_end_byte,
ptrdiff_t new_end_byte)
{
- Lisp_Object parser_list;
-
- parser_list = BVAR (current_buffer, ts_parser_list);
+ struct buffer *base_buffer = current_buffer;
+ if (current_buffer->base_buffer)
+ base_buffer = current_buffer->base_buffer;
+ Lisp_Object parser_list = BVAR (base_buffer, ts_parser_list);
FOR_EACH_TAIL_SAFE (parser_list)
{
@@ -911,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 ();
@@ -933,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. */
@@ -941,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;
@@ -962,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
@@ -1131,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'"));
}
@@ -1176,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;
@@ -1252,12 +1318,16 @@ DEFUN ("treesit-parser-create",
1, 3, 0,
doc: /* Create and return a parser in BUFFER for LANGUAGE.
-The parser is automatically added to BUFFER's parser list, as
-returned by `treesit-parser-list'.
-LANGUAGE is a language symbol. If BUFFER is nil or omitted, it
-defaults to the current buffer. If BUFFER already has a parser for
-LANGUAGE, return that parser, but if NO-REUSE is non-nil, always
-create a new parser. */)
+The parser is automatically added to BUFFER's parser list, as returned
+by `treesit-parser-list'. LANGUAGE is a language symbol. If BUFFER
+is nil or omitted, it defaults to the current buffer. If BUFFER
+already has a parser for LANGUAGE, return that parser, but if NO-REUSE
+is non-nil, always create a new parser.
+
+If that buffer is an indirect buffer, its base buffer is used instead.
+That is, indirect buffers use their base buffer's parsers. Lisp
+programs should widen as necessary should they want to use a parser in
+an indirect buffer. */)
(Lisp_Object language, Lisp_Object buffer, Lisp_Object no_reuse)
{
treesit_initialize ();
@@ -1271,16 +1341,21 @@ create a new parser. */)
CHECK_BUFFER (buffer);
buf = XBUFFER (buffer);
}
+ if (buf->base_buffer)
+ buf = buf->base_buffer;
+
treesit_check_buffer_size (buf);
/* See if we can reuse a parser. */
- for (Lisp_Object tail = BVAR (buf, ts_parser_list);
- NILP (no_reuse) && !NILP (tail);
- tail = XCDR (tail))
+ if (NILP (no_reuse))
{
- struct Lisp_TS_Parser *parser = XTS_PARSER (XCAR (tail));
- if (EQ (parser->language_symbol, language))
- return XCAR (tail);
+ Lisp_Object tail = BVAR (buf, ts_parser_list);
+ FOR_EACH_TAIL (tail)
+ {
+ struct Lisp_TS_Parser *parser = XTS_PARSER (XCAR (tail));
+ if (EQ (parser->language_symbol, language))
+ return XCAR (tail);
+ }
}
/* Load language. */
@@ -1329,7 +1404,10 @@ DEFUN ("treesit-parser-list",
Ftreesit_parser_list, Streesit_parser_list,
0, 1, 0,
doc: /* Return BUFFER's parser list.
-BUFFER defaults to the current buffer. */)
+
+BUFFER defaults to the current buffer. If that buffer is an indirect
+buffer, its base buffer is used instead. That is, indirect buffers
+use their base buffer's parsers. */)
(Lisp_Object buffer)
{
struct buffer *buf;
@@ -1340,6 +1418,9 @@ BUFFER defaults to the current buffer. */)
CHECK_BUFFER (buffer);
buf = XBUFFER (buffer);
}
+ if (buf->base_buffer)
+ buf = buf->base_buffer;
+
/* Return a fresh list so messing with that list doesn't affect our
internal data. */
Lisp_Object return_list = Qnil;
@@ -1501,9 +1582,9 @@ buffer. */)
for (int idx = 0; !NILP (ranges); idx++, ranges = XCDR (ranges))
{
Lisp_Object range = XCAR (ranges);
- EMACS_INT beg_byte = buf_charpos_to_bytepos (buffer,
+ ptrdiff_t beg_byte = buf_charpos_to_bytepos (buffer,
XFIXNUM (XCAR (range)));
- EMACS_INT end_byte = buf_charpos_to_bytepos (buffer,
+ ptrdiff_t end_byte = buf_charpos_to_bytepos (buffer,
XFIXNUM (XCDR (range)));
/* Shouldn't violate assertion since we just checked for
buffer size at the beginning of this function. */
@@ -1642,6 +1723,17 @@ treesit_check_node (Lisp_Object obj)
xsignal1 (Qtreesit_node_outdated, obj);
}
+/* Checks that OBJ is a positive integer and it is within the visible
+ portion of BUF. */
+static void
+treesit_check_position (Lisp_Object obj, struct buffer *buf)
+{
+ treesit_check_positive_integer (obj);
+ ptrdiff_t pos = XFIXNUM (obj);
+ if (pos < BUF_BEGV (buf) || pos > BUF_ZV (buf))
+ xsignal1 (Qargs_out_of_range, obj);
+}
+
bool
treesit_node_uptodate_p (Lisp_Object obj)
{
@@ -1720,6 +1812,8 @@ If NODE is nil, return nil. */)
return build_string (string);
}
+static bool treesit_cursor_helper (TSTreeCursor *, TSNode, Lisp_Object);
+
DEFUN ("treesit-node-parent",
Ftreesit_node_parent, Streesit_node_parent, 1, 1, 0,
doc: /* Return the immediate parent of NODE.
@@ -1730,13 +1824,21 @@ Return nil if NODE has no parent. If NODE is nil, return nil. */)
treesit_check_node (node);
treesit_initialize ();
- TSNode treesit_node = XTS_NODE (node)->node;
- TSNode parent = ts_node_parent (treesit_node);
+ Lisp_Object return_value = Qnil;
- if (ts_node_is_null (parent))
- return Qnil;
+ TSNode treesit_node = XTS_NODE (node)->node;
+ Lisp_Object parser = XTS_NODE (node)->parser;
+ TSTreeCursor cursor;
+ if (!treesit_cursor_helper (&cursor, treesit_node, parser))
+ return return_value;
- return make_treesit_node (XTS_NODE (node)->parser, parent);
+ if (ts_tree_cursor_goto_parent (&cursor))
+ {
+ TSNode parent = ts_tree_cursor_current_node (&cursor);
+ return_value = make_treesit_node (parser, parent);
+ }
+ ts_tree_cursor_delete (&cursor);
+ return return_value;
}
DEFUN ("treesit-node-child",
@@ -1990,17 +2092,14 @@ Note that this function returns an immediate child, not the smallest
if (NILP (node))
return Qnil;
treesit_check_node (node);
- treesit_check_positive_integer (pos);
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));
-
- if (byte_pos < BUF_BEGV_BYTE (buf) || byte_pos > BUF_ZV_BYTE (buf))
- xsignal1 (Qargs_out_of_range, 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))
@@ -2028,22 +2127,17 @@ If NODE is nil, return nil. */)
{
if (NILP (node)) return Qnil;
treesit_check_node (node);
- CHECK_INTEGER (beg);
- CHECK_INTEGER (end);
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));
- /* Checks for BUFFER_BEG <= BEG <= END <= BUFFER_END. */
- if (!(BUF_BEGV_BYTE (buf) <= byte_beg
- && byte_beg <= byte_end
- && byte_end <= BUF_ZV_BYTE (buf)))
- xsignal2 (Qargs_out_of_range, beg, 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))
@@ -2119,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
@@ -2218,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;
@@ -2241,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));
@@ -2314,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. */
@@ -2336,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;
@@ -2426,21 +2552,24 @@ the query. */)
(Lisp_Object node, Lisp_Object query,
Lisp_Object beg, Lisp_Object end, Lisp_Object node_only)
{
- if (!NILP (beg))
- CHECK_INTEGER (beg);
- if (!NILP (end))
- CHECK_INTEGER (end);
-
if (!(TS_COMPILED_QUERY_P (query)
|| CONSP (query) || STRINGP (query)))
wrong_type_argument (Qtreesit_query_p, query);
+ treesit_initialize ();
+
/* Resolve NODE into an actual node. */
Lisp_Object lisp_node;
if (TS_NODEP (node))
- lisp_node = node;
+ {
+ treesit_check_node (node); /* Check if up-to-date. */
+ lisp_node = node;
+ }
else if (TS_PARSERP (node))
- lisp_node = Ftreesit_parser_root_node (node);
+ {
+ treesit_check_parser (node); /* Check if deleted. */
+ lisp_node = Ftreesit_parser_root_node (node);
+ }
else if (SYMBOLP (node))
{
Lisp_Object parser
@@ -2452,8 +2581,6 @@ the query. */)
list4 (Qor, Qtreesit_node_p, Qtreesit_parser_p, Qsymbolp),
node);
- treesit_initialize ();
-
/* Extract C values from Lisp objects. */
TSNode treesit_node
= XTS_NODE (lisp_node)->node;
@@ -2464,6 +2591,13 @@ the query. */)
const TSLanguage *lang
= ts_parser_language (XTS_PARSER (lisp_parser)->parser);
+ /* Check BEG and END. */
+ struct buffer *buf = XBUFFER (XTS_PARSER (lisp_parser)->buffer);
+ if (!NILP (beg))
+ treesit_check_position (beg, buf);
+ if (!NILP (end))
+ treesit_check_position (end, buf);
+
/* Initialize query objects. At the end of this block, we should
have a working TSQuery and a TSQueryCursor. */
TSQuery *treesit_query;
@@ -2496,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;
}
@@ -2507,14 +2641,15 @@ the query. */)
/* Set query range. */
if (!NILP (beg) && !NILP (end))
{
- EMACS_INT beg_byte = XFIXNUM (beg);
- EMACS_INT end_byte = XFIXNUM (end);
+ ptrdiff_t beg_byte = CHAR_TO_BYTE (XFIXNUM (beg));
+ ptrdiff_t end_byte = CHAR_TO_BYTE (XFIXNUM (end));
/* We never let tree-sitter run on buffers too large, so these
assertion should never hit. */
eassert (beg_byte - visible_beg <= UINT32_MAX);
eassert (end_byte - visible_beg <= UINT32_MAX);
- ts_query_cursor_set_byte_range (cursor, (uint32_t) beg_byte - visible_beg,
- (uint32_t) end_byte - visible_beg);
+ ts_query_cursor_set_byte_range (cursor,
+ (uint32_t) (beg_byte - visible_beg),
+ (uint32_t) (end_byte - visible_beg));
}
/* Execute query. */
@@ -2580,63 +2715,222 @@ the query. */)
/*** Navigation */
-/* Return the next/previous named/unnamed sibling of NODE. FORWARD
- controls the direction and NAMED controls the nameness. */
-static TSNode
-treesit_traverse_sibling_helper (TSNode node, bool forward, bool named)
+static inline void
+treesit_assume_true (bool val)
{
- if (forward)
+ 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 (named)
- return ts_node_next_named_sibling (node);
- else
- return ts_node_next_sibling (node);
+ if (!ts_tree_cursor_goto_next_sibling (cursor))
+ break;
+ cursor_node = ts_tree_cursor_current_node (cursor);
}
- else
+
+ /* 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 (named)
- return ts_node_prev_named_sibling (node);
- else
- return ts_node_prev_sibling (node);
+ 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;
}
-/* Return the first/last named/unnamed child of NODE. FORWARD controls
- the direction and NAMED controls the nameness. */
-static TSNode
-treesit_traverse_child_helper (TSNode node, bool forward, bool named)
+/* Create a TSTreeCursor pointing at NODE. PARSER is the lisp parser
+ 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
+ down to NODE, in order to record the correct stack of parent nodes.
+ Otherwise going to sibling or parent of NODE wouldn't work.
+
+ (Wow perfect filling.) */
+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);
+ *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
+ direction. NAMED controls the namedness. If there is a valid
+ sibling, move CURSOR to it and return true, otherwise return false.
+ When false is returned, CURSOR points to a sibling node of the node
+ we started at, but exactly which is undefined. */
+static bool
+treesit_traverse_sibling_helper (TSTreeCursor *cursor,
+ bool forward, bool named)
{
if (forward)
{
- if (named)
- return ts_node_named_child (node, 0);
- else
- return ts_node_child (node, 0);
+ if (!named)
+ return ts_tree_cursor_goto_next_sibling (cursor);
+ /* Else named... */
+ while (ts_tree_cursor_goto_next_sibling (cursor))
+ {
+ if (ts_node_is_named (ts_tree_cursor_current_node (cursor)))
+ return true;
+ }
+ return false;
}
- else
+ else /* Backward. */
{
- if (named)
+ /* Go to first child and go through each sibling, until we find
+ the one just before the starting node. */
+ TSNode start = ts_tree_cursor_current_node (cursor);
+ if (!ts_tree_cursor_goto_parent (cursor))
+ return false;
+ treesit_assume_true (ts_tree_cursor_goto_first_child (cursor));
+
+ /* Now CURSOR is at the first child. If we started at the first
+ child, then there is no further siblings. */
+ TSNode first_child = ts_tree_cursor_current_node (cursor);
+ if (ts_node_eq (first_child, start))
+ return false;
+
+ /* PROBE is always DELTA siblings ahead of CURSOR. */
+ TSTreeCursor probe = ts_tree_cursor_copy (cursor);
+ /* This is position of PROBE minus position of CURSOR. */
+ ptrdiff_t delta = 0;
+ TSNode probe_node;
+ TSNode cursor_node;
+ while (ts_tree_cursor_goto_next_sibling (&probe))
{
- uint32_t count = ts_node_named_child_count (node);
- uint32_t idx = count == 0 ? 0 : count - 1;
- return ts_node_named_child (node, idx);
+ /* Move PROBE forward, if it equals to the starting node,
+ CURSOR points to the node we want (prev valid sibling of
+ the starting node). */
+ delta++;
+ probe_node = ts_tree_cursor_current_node (&probe);
+
+ /* PROBE matched, depending on NAMED, return true/false. */
+ if (ts_node_eq (probe_node, start))
+ {
+ ts_tree_cursor_delete (&probe);
+ cursor_node = ts_tree_cursor_current_node (cursor);
+ ts_tree_cursor_delete (&probe);
+ return (!named || (named && ts_node_is_named (cursor_node)));
+ }
+
+ /* PROBE didn't match, move CURSOR forward to PROBE's
+ position, but if we are looking for named nodes, only
+ move CURSOR to PROBE if PROBE is at a named node. */
+ if (!named || (named && ts_node_is_named (probe_node)))
+ for (; delta > 0; delta--)
+ treesit_assume_true (ts_tree_cursor_goto_next_sibling (cursor));
}
+ ts_tree_cursor_delete (&probe);
+ return false;
+ }
+}
+
+/* Move CURSOR to the first/last child. FORWARD controls the
+ direction. NAMED controls the namedness. If there is a valid
+ child, move CURSOR to it and return true, otherwise don't move
+ CURSOR and return false. */
+static bool
+treesit_traverse_child_helper (TSTreeCursor *cursor,
+ bool forward, bool named)
+{
+ if (forward)
+ {
+ if (!named)
+ return ts_tree_cursor_goto_first_child (cursor);
else
{
- uint32_t count = ts_node_child_count (node);
- uint32_t idx = count == 0 ? 0 : count - 1;
- return ts_node_child (node, idx);
+ if (!ts_tree_cursor_goto_first_child (cursor))
+ return false;
+ /* After this point, if you return false, make sure to go
+ back to parent. */
+ TSNode first_child = ts_tree_cursor_current_node (cursor);
+ if (ts_node_is_named (first_child))
+ return true;
+
+ if (treesit_traverse_sibling_helper (cursor, true, true))
+ return true;
+ else
+ {
+ treesit_assume_true (ts_tree_cursor_goto_parent (cursor));
+ return false;
+ }
+ }
+ }
+ else /* Backward. */
+ {
+ if (!ts_tree_cursor_goto_first_child (cursor))
+ return false;
+ /* After this point, if you return false, make sure to go
+ back to parent. */
+
+ /* First go to the last child. */
+ while (ts_tree_cursor_goto_next_sibling (cursor));
+
+ if (!named)
+ return true;
+ /* Else named... */
+ if (treesit_traverse_sibling_helper(cursor, false, true))
+ return true;
+ else
+ {
+ treesit_assume_true (ts_tree_cursor_goto_parent (cursor));
+ return false;
}
}
}
-/* Return true if NODE matches PRED. PRED can be a string or a
- function. This function assumes PRED is either a string or a
- function. */
+/* Return true if the node at CURSOR matches PRED. PRED can be a
+ string or a function. This function assumes PRED is either a
+ string or a function. If NAMED is true, also check that the node
+ is named. */
static bool
-treesit_traverse_match_predicate (TSNode node, Lisp_Object pred,
- Lisp_Object parser)
+treesit_traverse_match_predicate (TSTreeCursor *cursor, Lisp_Object pred,
+ Lisp_Object parser, bool named)
{
+ TSNode node = ts_tree_cursor_current_node (cursor);
+ if (named && !ts_node_is_named (node))
+ return false;
+
if (STRINGP (pred))
{
const char *type = ts_node_type (node);
@@ -2647,73 +2941,60 @@ treesit_traverse_match_predicate (TSNode node, Lisp_Object pred,
Lisp_Object lisp_node = make_treesit_node (parser, node);
return !NILP (CALLN (Ffuncall, pred, lisp_node));
}
-
}
-/* Traverse the parse tree starting from ROOT (but ROOT is not
- matches against PRED). PRED can be a function (takes a node and
- returns nil/non-nil),or a string (treated as regexp matching the
- node's type, ignores case, must be all single byte characters). If
- the node satisfies PRED , terminate, set ROOT to that node, and
- return true. If no node satisfies PRED, return FALSE. PARSER is
- the parser of ROOT.
+/* Traverse the parse tree starting from CURSOR. PRED can be a
+ function (takes a node and returns nil/non-nil), or a string
+ (treated as regexp matching the node's type, must be all single
+ byte characters). If the node satisfies PRED, leave CURSOR on that
+ node and return true. If no node satisfies PRED, move CURSOR back
+ to starting position and return false.
LIMIT is the number of levels we descend in the tree. FORWARD
controls the direction in which we traverse the tree, true means
- forward, false backward. If NAMED is true, only traverse named
- nodes, if false, all nodes. If SKIP_ROOT is true, don't match
- ROOT. */
+ forward, false backward. If SKIP_ROOT is true, don't match ROOT.
+ */
static bool
-treesit_search_dfs (TSNode *root, Lisp_Object pred, Lisp_Object parser,
- bool named, bool forward, ptrdiff_t limit,
+treesit_search_dfs (TSTreeCursor *cursor,
+ Lisp_Object pred, Lisp_Object parser,
+ bool forward, bool named, ptrdiff_t limit,
bool skip_root)
{
- /* TSTreeCursor doesn't allow us to move backward, so we can't use
- it. */
- TSNode node = *root;
+ if (!skip_root
+ && treesit_traverse_match_predicate (cursor, pred, parser, named))
+ return true;
- if (!skip_root && treesit_traverse_match_predicate (node, pred, parser))
- {
- *root = node;
- return true;
- }
+ if (limit == 0)
+ return false;
- if (limit <= 0)
+ if (!treesit_traverse_child_helper (cursor, forward, named))
return false;
- else
+ /* After this point, if you return false, make sure to go back to
+ parent. */
+
+ do /* Iterate through each child. */
{
- int count = (named
- ? ts_node_named_child_count (node)
- : ts_node_child_count (node));
- for (int offset = 0; offset < count; offset++)
- {
- uint32_t idx = forward ? offset : count - offset - 1;
- TSNode child = (named
- ? ts_node_named_child (node, idx)
- : ts_node_child (node, idx));
-
- if (!ts_node_is_null (child)
- && treesit_search_dfs (&child, pred, parser, named,
- forward, limit - 1, false))
- {
- *root = child;
- return true;
- }
- }
- return false;
+ if (treesit_search_dfs (cursor, pred, parser, forward,
+ named, limit - 1, false))
+ return true;
}
+ while (treesit_traverse_sibling_helper (cursor, forward, false));
+
+ /* No match in any child's subtree, go back to starting node. */
+ treesit_assume_true (ts_tree_cursor_goto_parent (cursor));
+ return false;
}
/* Go through the whole tree linearly, leaf-first, starting from
START. PRED, PARSER, NAMED, FORWARD are the same as in
- ts_search_subtre. If UP_ONLY is true, never go to children, only
- sibling and parents. */
+ ts_search_subtree. If a match is found, leave CURSOR at that node,
+ and return true, if no match is found, return false, and CURSOR's
+ position is undefined. */
static bool
-treesit_search_forward (TSNode *start, Lisp_Object pred, Lisp_Object parser,
- bool named, bool forward)
+treesit_search_forward (TSTreeCursor *cursor,
+ Lisp_Object pred, Lisp_Object parser,
+ bool forward, bool named)
{
- TSNode node = *start;
-
/* We don't search for subtree and always search from the leaf
nodes. This way repeated call of this function traverses each
node in the tree once and only once:
@@ -2723,39 +3004,26 @@ treesit_search_forward (TSNode *start, Lisp_Object pred, Lisp_Object parser,
bool initial = true;
while (true)
{
- if (!initial /* We don't match START. */
- && treesit_traverse_match_predicate (node, pred, parser))
- {
- *start = node;
- return true;
- }
+ if (!initial /* We don't match the starting node. */
+ && treesit_traverse_match_predicate (cursor, pred, parser, named))
+ return true;
initial = false;
- TSNode next = treesit_traverse_sibling_helper (node, forward, named);
- while (ts_node_is_null (next))
+ /* Try going to the next sibling, if there is no next sibling,
+ go to parent and try again. */
+ while (!treesit_traverse_sibling_helper (cursor, forward, named))
{
/* There is no next sibling, go to parent. */
- node = ts_node_parent (node);
- if (ts_node_is_null (node))
+ if (!ts_tree_cursor_goto_parent (cursor))
return false;
- if (treesit_traverse_match_predicate (node, pred, parser))
- {
- *start = node;
+ if (treesit_traverse_match_predicate (cursor, pred, parser, named))
return true;
- }
- next = treesit_traverse_sibling_helper (node, forward, named);
}
/* We are at the next sibling, deep dive into the first leaf
node. */
- TSNode next_next = treesit_traverse_child_helper (next, forward, named);
- while (!ts_node_is_null (next_next))
- {
- next = next_next;
- next_next = treesit_traverse_child_helper (next, forward, named);
- }
- /* At this point NEXT is a leaf node. */
- node = next;
+ while (treesit_traverse_child_helper (cursor, forward, false));
+ /* At this point CURSOR is at a leaf node. */
}
}
@@ -2783,9 +3051,9 @@ Return the first matched node, or nil if none matches. */)
CHECK_SYMBOL (all);
CHECK_SYMBOL (backward);
- /* We use a default limit to 1000. See bug#59426 for the
+ /* 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);
@@ -2794,13 +3062,20 @@ Return the first matched node, or nil if none matches. */)
treesit_initialize ();
- TSNode treesit_node = XTS_NODE (node)->node;
Lisp_Object parser = XTS_NODE (node)->parser;
- if (treesit_search_dfs (&treesit_node, predicate, parser, NILP (all),
- NILP (backward), the_limit, false))
- return make_treesit_node (parser, treesit_node);
- else
- return Qnil;
+ Lisp_Object return_value = Qnil;
+ 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))
+ {
+ TSNode node = ts_tree_cursor_current_node (&cursor);
+ return_value = make_treesit_node (parser, node);
+ }
+ ts_tree_cursor_delete (&cursor);
+ return return_value;
}
DEFUN ("treesit-search-forward",
@@ -2844,13 +3119,20 @@ always traverse leaf nodes first, then upwards. */)
treesit_initialize ();
- TSNode treesit_start = XTS_NODE (start)->node;
Lisp_Object parser = XTS_NODE (start)->parser;
- if (treesit_search_forward (&treesit_start, predicate, parser, NILP (all),
- NILP (backward)))
- return make_treesit_node (parser, treesit_start);
- else
- return Qnil;
+ Lisp_Object return_value = Qnil;
+ 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)))
+ {
+ TSNode node = ts_tree_cursor_current_node (&cursor);
+ return_value = make_treesit_node (parser, node);
+ }
+ ts_tree_cursor_delete (&cursor);
+ return return_value;
}
/* Recursively traverse the tree under CURSOR, and append the result
@@ -2862,13 +3144,12 @@ treesit_build_sparse_tree (TSTreeCursor *cursor, Lisp_Object parent,
Lisp_Object pred, Lisp_Object process_fn,
ptrdiff_t limit, Lisp_Object parser)
{
-
- TSNode node = ts_tree_cursor_current_node (cursor);
- bool match = treesit_traverse_match_predicate (node, pred, parser);
+ bool match = treesit_traverse_match_predicate (cursor, pred, parser, false);
if (match)
{
/* If this node matches pred, add a new node to the parent's
children list. */
+ TSNode node = ts_tree_cursor_current_node (cursor);
Lisp_Object lisp_node = make_treesit_node (parser, node);
if (!NILP (process_fn))
lisp_node = CALLN (Ffuncall, process_fn, lisp_node);
@@ -2949,9 +3230,9 @@ a regexp. */)
if (!NILP (process_fn))
CHECK_TYPE (FUNCTIONP (process_fn), Qfunctionp, process_fn);
- /* We use a default limit to 1000. See bug#59426 for the
+ /* 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);
@@ -2960,11 +3241,15 @@ a regexp. */)
treesit_initialize ();
- TSTreeCursor cursor = ts_tree_cursor_new (XTS_NODE (root)->node);
Lisp_Object parser = XTS_NODE (root)->parser;
Lisp_Object parent = Fcons (Qnil, Qnil);
+ 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);
Fsetcdr (parent, Fnreverse (Fcdr (parent)));
if (NILP (Fcdr (parent)))
return Qnil;
@@ -3007,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");
@@ -3084,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 f116b9a9d72..6201a6f4a36 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
@@ -2639,7 +2640,7 @@ window_list (void)
Lisp_Object arglist = Qnil;
/* We are visiting windows in canonical order, and add
- new windows at the front of args[1], which means we
+ new windows at the front of arglist, which means we
have to reverse this list at the end. */
foreach_window (XFRAME (frame), add_window_to_list, &arglist);
arglist = Fnreverse (arglist);
@@ -7329,6 +7330,14 @@ the return value is nil. Otherwise the value is t. */)
last_selected_window)
= selected_window;
+ /* We may have deleted windows above. Then again, maybe we
+ haven't: the functions we call to maybe delete windows can
+ decide a window cannot be deleted. Force recalculation of
+ Vwindow_list next time it is needed, to make sure stale
+ windows with no buffers don't escape into the wild, which
+ will cause crashes elsewhere. */
+ Vwindow_list = Qnil;
+
if (NILP (data->focus_frame)
|| (FRAMEP (data->focus_frame)
&& FRAME_LIVE_P (XFRAME (data->focus_frame))))
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 255851b9213..6c88846e7a8 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.
@@ -6281,13 +6281,16 @@ static ptrdiff_t
string_buffer_position (Lisp_Object string, ptrdiff_t around_charpos)
{
const int MAX_DISTANCE = 1000;
+ ptrdiff_t forward_limit = min (around_charpos + MAX_DISTANCE, ZV);
ptrdiff_t found = string_buffer_position_lim (string, around_charpos,
- around_charpos + MAX_DISTANCE,
- false);
+ forward_limit, false);
if (!found)
- found = string_buffer_position_lim (string, around_charpos,
- around_charpos - MAX_DISTANCE, true);
+ {
+ ptrdiff_t backward_limit = max (around_charpos - MAX_DISTANCE, BEGV);
+ found = string_buffer_position_lim (string, around_charpos,
+ backward_limit, true);
+ }
return found;
}
@@ -14268,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);
@@ -16835,6 +16840,13 @@ 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)
@@ -16842,7 +16854,6 @@ redisplay_internal (void)
if (FRAME_VISIBLE_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
@@ -17264,7 +17275,6 @@ mark_window_display_accurate_1 (struct window *w, bool accurate_p)
BUF_UNCHANGED_MODIFIED (b) = BUF_MODIFF (b);
BUF_OVERLAY_UNCHANGED_MODIFIED (b) = BUF_OVERLAY_MODIFF (b);
- BUF_CHARS_UNCHANGED_MODIFIED (b) = BUF_CHARS_MODIFF (b);
BUF_BEG_UNCHANGED (b) = BUF_GPT (b) - BUF_BEG (b);
BUF_END_UNCHANGED (b) = BUF_Z (b) - BUF_GPT (b);
@@ -19430,6 +19440,13 @@ redisplay_window (Lisp_Object window, bool just_this_one_p)
blank_row (w, row, y);
goto finish_scroll_bars;
}
+ else if (minibuf_level >= 1)
+ {
+ /* We could have a message produced by set-minibuffer-message
+ displayed in the mini-window as an overlay, so resize the
+ mini-window if needed. */
+ resize_mini_window (w, false);
+ }
clear_glyph_matrix (w->desired_matrix);
}
@@ -19535,7 +19552,7 @@ redisplay_window (Lisp_Object window, bool just_this_one_p)
/* Check whether the buffer to be displayed contains long lines. */
if (!NILP (Vlong_line_threshold)
&& !current_buffer->long_line_optimizations_p
- && (CHARS_MODIFF - CHARS_UNCHANGED_MODIFIED > 8
+ && (CHARS_MODIFF - UNCHANGED_MODIFIED > 8
|| current_buffer->clip_changed))
{
ptrdiff_t cur, next, found, max = 0, threshold;
diff --git a/src/xfaces.c b/src/xfaces.c
index df078227c8a..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.
@@ -6014,6 +6014,23 @@ realize_non_ascii_face (struct frame *f, Lisp_Object font_object,
}
#endif /* HAVE_WINDOW_SYSTEM */
+/* Remove the attribute at INDEX from the font object if SYMBOL
+ appears in `font-fallback-ignored-attributes'. */
+
+static void
+font_maybe_unset_attribute (Lisp_Object font_object,
+ enum font_property_index index, Lisp_Object symbol)
+{
+ Lisp_Object tail = Vface_font_lax_matched_attributes;
+
+ eassert (CONSP (tail));
+
+ FOR_EACH_TAIL_SAFE (tail)
+ {
+ if (EQ (XCAR (tail), symbol))
+ ASET (font_object, index, Qnil);
+ }
+}
/* Realize the fully-specified face with attributes ATTRS in face
cache CACHE for ASCII characters. Do it for GUI frame CACHE->f.
@@ -6071,8 +6088,48 @@ realize_gui_face (struct face_cache *cache, Lisp_Object attrs[LFACE_VECTOR_SIZE]
emacs_abort ();
}
if (! FONT_OBJECT_P (attrs[LFACE_FONT_INDEX]))
- attrs[LFACE_FONT_INDEX]
- = font_load_for_lface (f, attrs, attrs[LFACE_FONT_INDEX]);
+ {
+ Lisp_Object spec = copy_font_spec (attrs[LFACE_FONT_INDEX]);
+
+ /* Maybe unset several values in SPEC, usually the width,
+ slant, and weight. The best possible values for these
+ attributes are determined in font_find_for_lface, called
+ by font_load_for_lface, when the list of candidate fonts
+ returned by font_list_entities is sorted by font_select_entity
+ (which calls font_sort_entities, which calls font_score).
+ If these attributes are not unset here, the candidate
+ font list returned by font_list_entities only contains
+ fonts that are exact matches for these weight, slant, and
+ width attributes, which could lead to suboptimal or wrong
+ font selection. (bug#5934) */
+ if (EQ (Vface_font_lax_matched_attributes, Qt))
+ {
+ /* The default case: clear the font attributes that
+ affect its appearance the least, to try to find some
+ font that is close, if not exact, match. */
+ ASET (spec, FONT_WEIGHT_INDEX, Qnil);
+ ASET (spec, FONT_SLANT_INDEX, Qnil);
+ ASET (spec, FONT_WIDTH_INDEX, Qnil);
+ }
+ else if (!NILP (Vface_font_lax_matched_attributes))
+ {
+ /* Also allow unsetting specific attributes for
+ debugging purposes. */
+ font_maybe_unset_attribute (spec, FONT_WEIGHT_INDEX, QCweight);
+ font_maybe_unset_attribute (spec, FONT_SLANT_INDEX, QCslant);
+ font_maybe_unset_attribute (spec, FONT_WIDTH_INDEX, QCwidth);
+ font_maybe_unset_attribute (spec, FONT_FAMILY_INDEX, QCfamily);
+ font_maybe_unset_attribute (spec, FONT_FOUNDRY_INDEX, QCfoundry);
+ font_maybe_unset_attribute (spec, FONT_REGISTRY_INDEX, QCregistry);
+ font_maybe_unset_attribute (spec, FONT_ADSTYLE_INDEX, QCadstyle);
+ font_maybe_unset_attribute (spec, FONT_SIZE_INDEX, QCsize);
+ font_maybe_unset_attribute (spec, FONT_DPI_INDEX, QCdpi);
+ font_maybe_unset_attribute (spec, FONT_SPACING_INDEX, QCspacing);
+ font_maybe_unset_attribute (spec, FONT_AVGWIDTH_INDEX, QCavgwidth);
+ }
+
+ attrs[LFACE_FONT_INDEX] = font_load_for_lface (f, attrs, spec);
+ }
if (FONT_OBJECT_P (attrs[LFACE_FONT_INDEX]))
{
face->font = XFONT_OBJECT (attrs[LFACE_FONT_INDEX]);
@@ -7223,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,
@@ -7360,6 +7417,35 @@ Lisp programs that change the value of this variable should also
clear the face cache, see `clear-face-cache'. */);
face_near_same_color_threshold = 30000;
+ DEFVAR_LISP ("face-font-lax-matched-attributes",
+ Vface_font_lax_matched_attributes,
+ doc: /* Whether to match some face attributes in lax manner when realizing faces.
+
+If non-nil, some font-related face attributes will be matched in a lax
+manner when looking for candidate fonts.
+If the value is t, the default, the search for fonts will not insist
+on exact match for 3 font attributes: weight, width, and slant.
+Instead, it will examine the available fonts with various values of
+these attributes, and select the font that is the closest possible
+match. (If an exact match is available, it will still be selected,
+as that is the closest match.) For example, looking for a semi-bold
+font might select a bold or a medium-weight font if no semi-bold font
+matching other attributes can be found. This is especially important
+when the `default' face specifies unusual values for one or more of
+these 3 attributes, which other installed fonts don't support.
+
+The value can also be a list of font-related face attribute symbols;
+see `set-face-attribute' for the full list of attributes. Then the
+corresponding face attributes will be treated as "soft" constraints
+in the manner described above, instead of the default 3 attributes.
+
+If the value is nil, candidate fonts might be rejected if the don't
+have exactly the same values of attributes as the face requests.
+
+This variable exists for debugging of the font-selection process,
+and we advise not to change it otherwise. */);
+ Vface_font_lax_matched_attributes = Qt;
+
#ifdef HAVE_WINDOW_SYSTEM
defsubr (&Sbitmap_spec_p);
defsubr (&Sx_list_fonts);
diff --git a/src/xfns.c b/src/xfns.c
index 36b51a30112..528ae61ca32 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.
@@ -1758,19 +1758,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);
@@ -1791,6 +1789,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))
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 6043ef9f94f..1ade22a6006 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 844ef7220a9..45f933bba30 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 44fad6e8d59..6a4b84babe4 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.
@@ -4513,7 +4513,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);
diff --git a/src/xterm.h b/src/xterm.h
index ee429e9c68d..8834346e7ca 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.
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 17783a4bacf..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
@@ -118,7 +118,7 @@ If the $EMACS_TEST_JUNIT_REPORT environment variable is set to a file
name, a JUnit test report is generated under this name.
Some of the tests require a remote temporary directory
-(autorevert-tests.el, dnd-tests.el, filenotify-tests.el,
+(autorevert-tests.el, dnd-tests.el, eglot-tests.el, filenotify-tests.el,
shadowfile-tests.el and tramp-tests.el). Per default, a mock-up
connection method is used (this might not be possible when running on
MS Windows). If you want to test a real remote connection, set
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 e034430edce..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.
#
@@ -155,7 +155,7 @@ default:
.filenotify-gio-template:
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
- - if: '$CI_PIPELINE_SOURCE == "schedule"'
+ # - if: '$CI_PIPELINE_SOURCE == "schedule"'
changes:
- "**.in"
- lisp/autorevert.el
@@ -246,17 +246,17 @@ test-gnustep:
target: emacs-gnustep
make_params: install
-build-native-comp-speed0:
- stage: native-comp-images
- extends: [.job-template, .build-template, .native-comp-template]
- variables:
- target: emacs-native-comp-speed0
+# build-native-comp-speed0:
+# stage: native-comp-images
+# extends: [.job-template, .build-template, .native-comp-template]
+# variables:
+# target: emacs-native-comp-speed0
-build-native-comp-speed1:
- stage: native-comp-images
- extends: [.job-template, .build-template, .native-comp-template]
- variables:
- target: emacs-native-comp-speed1
+# build-native-comp-speed1:
+# stage: native-comp-images
+# extends: [.job-template, .build-template, .native-comp-template]
+# variables:
+# target: emacs-native-comp-speed1
build-native-comp-speed2:
stage: native-comp-images
@@ -264,14 +264,14 @@ build-native-comp-speed2:
variables:
target: emacs-native-comp-speed2
-test-native-comp-speed0:
+test-native-comp-speed2:
stage: native-comp
extends: [.job-template, .test-template, .native-comp-template]
needs:
- - job: build-native-comp-speed0
+ - job: build-native-comp-speed2
optional: true
variables:
- target: emacs-native-comp-speed0
+ target: emacs-native-comp-speed2
make_params: "-k -C test check SELECTOR='(not (tag :unstable))'"
# Local Variables:
diff --git a/test/infra/test-jobs.yml b/test/infra/test-jobs.yml
index 51707c181b1..55ce590af89 100644
--- a/test/infra/test-jobs.yml
+++ b/test/infra/test-jobs.yml
@@ -493,6 +493,23 @@ test-lisp-url-inotify:
target: emacs-inotify
make_params: "-k -C test check-lisp-url"
+test-lisp-use-package-inotify:
+ stage: normal
+ extends: [.job-template, .test-template]
+ needs:
+ - job: build-image-inotify
+ optional: true
+ rules:
+ - if: '$CI_PIPELINE_SOURCE == "schedule"'
+ when: never
+ - changes:
+ - lisp/use-package/*.el
+ - test/lisp/use-package/*.el
+ - test/lisp/use-package/*resources/**
+ variables:
+ target: emacs-inotify
+ make_params: "-k -C test check-lisp-use-package"
+
test-lisp-vc-inotify:
stage: normal
extends: [.job-template, .test-template]
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 1107e09b51b..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>
@@ -175,7 +175,8 @@ HOSTNAME, USER and PORT are passed unchanged to
(ert-deftest auth-source-pass-any-host ()
(auth-source-pass--with-store '(("foo" ("port" . "foo-port") ("host" . "foo-user"))
("bar"))
- (should-not (auth-source-pass-search :host t))))
+ (let ((inhibit-message t)) ; silence "... does not handle host wildcards."
+ (should-not (auth-source-pass-search :host t)))))
(ert-deftest auth-source-pass-undefined-host ()
(auth-source-pass--with-store '(("foo" ("port" . "foo-port") ("host" . "foo-user"))
@@ -697,29 +698,29 @@ machine Libera.Chat password b
;; with slightly more realistic and less legible values.
(ert-deftest auth-source-pass-extra-query-keywords--suffixed-user ()
- (let ((store (sort (copy-sequence '(("x.com:42/b@r" (secret . "a"))
- ("b@r@x.com" (secret . "b"))
+ (let ((store (sort (copy-sequence '(("x.com:42/s p@m" (secret . "a"))
+ ("s p@m@x.com" (secret . "b"))
("x.com" (secret . "?"))
- ("b@r@y.org" (secret . "c"))
- ("fake.com" (secret . "?"))
- ("fake.com/b@r" (secret . "d"))
- ("y.org/b@r" (secret . "?"))
- ("b@r@fake.com" (secret . "e"))))
+ ("s p@m@y.org" (secret . "c"))
+ ("fa ke" (secret . "?"))
+ ("fa ke/s p@m" (secret . "d"))
+ ("y.org/s p@m" (secret . "?"))
+ ("s p@m@fa ke" (secret . "e"))))
(lambda (&rest _) (zerop (random 2))))))
(auth-source-pass--with-store store
(auth-source-pass-enable)
(let* ((auth-source-pass-extra-query-keywords t)
- (results (auth-source-search :host '("x.com" "fake.com" "y.org")
- :user "b@r"
+ (results (auth-source-search :host '("x.com" "fa ke" "y.org")
+ :user "s p@m"
:require '(:user) :max 5)))
(dolist (result results)
(setf (plist-get result :secret) (auth-info-password result)))
(should (equal results
- '((:host "x.com" :user "b@r" :secret "b")
- (:host "x.com" :user "b@r" :port "42" :secret "a")
- (:host "fake.com" :user "b@r" :secret "e")
- (:host "fake.com" :user "b@r" :secret "d")
- (:host "y.org" :user "b@r" :secret "c"))))))))
+ '((:host "x.com" :user "s p@m" :secret "b")
+ (:host "x.com" :user "s p@m" :port "42" :secret "a")
+ (:host "fa ke" :user "s p@m" :secret "e")
+ (:host "fa ke" :user "s p@m" :secret "d")
+ (:host "y.org" :user "s p@m" :secret "c"))))))))
;; This is a more distilled version of `suffixed-user', above. It
;; better illustrates that search order takes precedence over "/user"
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 fa55eea95e2..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
@@ -63,7 +63,8 @@
(defun icalendar-tests--get-error-string-for-export (diary-string)
"Call icalendar-export for DIARY-STRING and return resulting error-string."
- (let ((file (make-temp-file "export.ics")))
+ (ert-with-temp-file file
+ :suffix "-export.ics"
(with-temp-buffer
(insert diary-string)
(icalendar-export-region (point-min) (point-max) file))
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 8402c13daf3..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.
@@ -59,9 +59,23 @@
(dolist (str comint-testsuite-password-strings)
(should (string-match comint-password-prompt-regexp str))))
+(declare-function w32-application-type "w32proc.c")
+(defun w32-native-executable-p (fname)
+ "Predicate to test program FNAME for being a native Windows application."
+ (and (memq (w32-application-type fname) '(w32-native dos))
+ (file-executable-p fname)))
+
+(defun w32-native-executable-find (name)
+ "Find a native MS-Windows application named NAME.
+This is needed to avoid invoking MSYS or Cygwin executables that
+happen to lurk on PATH when running the test suite."
+ (locate-file name exec-path exec-suffixes 'w32-native-executable-p))
+
(defun comint-tests/test-password-function (password-function)
"PASSWORD-FUNCTION can return nil or a string."
- (when-let ((cat (executable-find "cat")))
+ (when-let ((cat (if (eq system-type 'windows-nt)
+ (w32-native-executable-find "cat")
+ (executable-find "cat"))))
(let ((comint-password-function password-function))
(cl-letf (((symbol-function 'read-passwd)
(lambda (&rest _args) "non-nil")))
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 97fa0f1e8f1..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>
@@ -100,7 +100,7 @@
"aaa [ bbb, cccc ] dddd\n"
"aa [ bb, ccccccc ] ddd\n"))))))
-(ert-deftest delim-col-tests-delimit-colummns-before-after ()
+(ert-deftest delim-col-tests-delimit-columns-before-after ()
(let ((delimit-columns-before "<")
(delimit-columns-after ">"))
(with-temp-buffer
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..d751eee06a0 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>
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 e7c308213e4..7ae10cdea73 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>
diff --git a/test/lisp/emacs-lisp/cconv-tests.el b/test/lisp/emacs-lisp/cconv-tests.el
index e666fe0a4c2..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.
@@ -60,7 +60,7 @@
"cl-defun documentation"))
(should (eq (cconv-tests-cl-defun) 'cl-defun-result)))
-;; FIXME: The byte-complier croaks on this. See Bug#28557.
+;; FIXME: The byte-compiler croaks on this. See Bug#28557.
;; (defmacro cconv-tests-defmacro ()
;; (:documentation (concat "defmacro" " documentation"))
;; '(quote defmacro-result))
@@ -70,7 +70,7 @@
;; "defmacro documentation"))
;; (should (eq (cconv-tests-defmacro) 'defmacro-result)))
-;; FIXME: The byte-complier croaks on this. See Bug#28557.
+;; FIXME: The byte-compiler croaks on this. See Bug#28557.
;; (cl-defmacro cconv-tests-cl-defmacro ()
;; (:documentation (concat "cl-defmacro" " documentation"))
;; '(quote cl-defmacro-result))
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 289476f0246..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>
@@ -130,25 +130,25 @@ See the comments in Bug#24998."
(re-search-forward goto-string)
(checkdoc-in-abbreviation-p (point))))
-(ert-deftest checkdoc-tests-in-abbrevation-p/basic-case ()
+(ert-deftest checkdoc-tests-in-abbreviation-p/basic-case ()
(should (checkdoc-tests--abbrev-test "foo bar e.g. baz" "e.g"))
(should (checkdoc-tests--abbrev-test "behavior/errors etc. that" "etc"))
(should (checkdoc-tests--abbrev-test "foo vs. bar" "vs"))
(should (checkdoc-tests--abbrev-test "spy a.k.a. spy" "a.k.a")))
-(ert-deftest checkdoc-tests-in-abbrevation-p/with-parens ()
+(ert-deftest checkdoc-tests-in-abbreviation-p/with-parens ()
(should (checkdoc-tests--abbrev-test "foo bar (e.g. baz)" "e.g")))
-(ert-deftest checkdoc-tests-in-abbrevation-p/with-escaped-parens ()
+(ert-deftest checkdoc-tests-in-abbreviation-p/with-escaped-parens ()
(should (checkdoc-tests--abbrev-test "foo\n\\(e.g. baz)" "e.g")))
-(ert-deftest checkdoc-tests-in-abbrevation-p/single-char ()
+(ert-deftest checkdoc-tests-in-abbreviation-p/single-char ()
(should (checkdoc-tests--abbrev-test "a. foo bar" "a")))
-(ert-deftest checkdoc-tests-in-abbrevation-p/with-em-dash ()
+(ert-deftest checkdoc-tests-in-abbreviation-p/with-em-dash ()
(should (checkdoc-tests--abbrev-test "foo bar baz---e.g." "e.g")))
-(ert-deftest checkdoc-tests-in-abbrevation-p/incorrect-abbreviation ()
+(ert-deftest checkdoc-tests-in-abbreviation-p/incorrect-abbreviation ()
(should-not (checkdoc-tests--abbrev-test "foo bar a.b.c." "a.b.c")))
(defun checkdoc-test-error-format-is-good (msg &optional reverse literal)
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 b19494af746..d5886626bf1 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.
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 d18a9dc1a94..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:
@@ -87,7 +87,7 @@ expected function symbol and function library, respectively."
(test-locate-helper #'forward-char '(forward-char . "cmds.c"))
(should-error (test-locate-helper 'wrong-function)))
-(ert-deftest find-func-tests--locate-adviced-symbols ()
+(ert-deftest find-func-tests--locate-advised-symbols ()
(defun my-message ()
(message "Hello!"))
(advice-add #'mark-sexp :around 'my-message)
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 200be7354a0..c056761f0f9 100644
--- a/test/lisp/emacs-lisp/lisp-mnt-tests.el
+++ b/test/lisp/emacs-lisp/lisp-mnt-tests.el
@@ -1,25 +1,23 @@
;;; 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>
-;; This program is free software; you can redistribute it and/or modify
+;; 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.
-;; This program is distributed in the hope that it will be useful,
+;; 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 this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
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..c55db6491cd 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.
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 125ddee8595..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.
@@ -207,6 +207,12 @@
(list 'ok z))
'(ok "F"))))
+(ert-deftest rx-let-pcase ()
+ "Test `rx-let' around `pcase' with `rx' patterns (bug#59814)."
+ (should (equal (rx-let ((tata "ab"))
+ (pcase "abc" ((rx tata) 'toto)))
+ 'toto)))
+
(ert-deftest rx-kleene ()
"Test greedy and non-greedy repetition operators."
(should (equal (rx (* "a") (+ "b") (\? "c") (?\s "d")
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 7a3efe9db62..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:
@@ -707,7 +707,16 @@
(should (equal (get-text-property 2 'display) '(raise 0.5)))
(should (equal (get-text-property 5 'display)
[(raise 0.5) (height 2.0)]))
- (should (equal (get-text-property 9 'display) '(raise 0.5)))))
+ (should (equal (get-text-property 9 'display) '(raise 0.5))))
+ (with-temp-buffer
+ (should (equal (let ((str "some useless string"))
+ (add-display-text-property 4 8 'height 2.0 str)
+ (add-display-text-property 2 12 'raise 0.5 str)
+ str)
+ #("some useless string"
+ 2 4 (display (raise 0.5))
+ 4 8 (display ((raise 0.5) (height 2.0)))
+ 8 12 (display (raise 0.5)))))))
(ert-deftest subr-x-named-let ()
(let ((funs ()))
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 fc12bf7ce37..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.
;;
@@ -197,6 +197,36 @@
(erc-networks-tests--clean-bufs))
+;; A non-ERC buffer exists named "bob", and we're killing one of two
+;; ERC target buffers named "bob@<netid>". The surviving buffer
+;; retains its suffix.
+
+(ert-deftest erc-networks-rename-surviving-target-buffer--query-non-target ()
+ (should (memq #'erc-networks-rename-surviving-target-buffer
+ erc-kill-buffer-hook))
+
+ (let ((existing (get-buffer-create "bob"))
+ (bob-foonet (get-buffer-create "bob@foonet")))
+
+ (with-current-buffer bob-foonet
+ (erc-mode)
+ (setq erc-networks--id (make-erc-networks--id-qualifying
+ :parts [foonet "bob"] :len 1)
+ erc--target (erc--target-from-string "bob")))
+
+ (with-current-buffer (get-buffer-create "bob@barnet")
+ (erc-mode)
+ (setq erc-networks--id (make-erc-networks--id-qualifying
+ :parts [barnet "bob"] :len 1)
+ erc--target (erc--target-from-string "bob")))
+
+ (kill-buffer "bob@barnet")
+ (should (buffer-live-p existing))
+ (should (buffer-live-p bob-foonet))
+ (kill-buffer existing))
+
+ (erc-networks-tests--clean-bufs))
+
(ert-deftest erc-networks-rename-surviving-target-buffer--multi ()
(ert-info ("Multiple leftover channels untouched")
@@ -1171,6 +1201,8 @@
(let (erc-server-announced-name
(erc--isupport-params (make-hash-table))
erc-network
+ erc-quit-hook
+ (erc-server-process (erc-networks-tests--create-live-proc))
calls)
(erc-mode)
@@ -1183,10 +1215,7 @@
(ert-info ("Signals when table empty and NETWORK param unset")
(setq erc-server-announced-name "irc.fake.gnu.org")
- (let ((err (should-error (erc-networks--set-name
- nil (make-erc-response)))))
- (should (string-match-p "failed" (cadr err)))
- (should (eq (car err) 'error)))
+ (should (eq 'error (erc-networks--set-name nil (make-erc-response))))
(should (string-match-p (rx "*** Failed") (car (pop calls)))))))
(erc-networks-tests--clean-bufs)))
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 3d399a18154..641b881666e 100644
--- a/test/lisp/erc/erc-scenarios-auth-source.el
+++ b/test/lisp/erc/erc-scenarios-auth-source.el
@@ -1,28 +1,29 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;; Commentary:
-;;
+
;; For practical reasons (mainly lack of imagination), this file
;; contains tests for both server-password and NickServ contexts.
+;;; Code:
+
(require 'ert-x)
(eval-and-compile
(let ((load-path (cons (ert-resource-directory) load-path)))
diff --git a/test/lisp/erc/erc-scenarios-base-association-nick.el b/test/lisp/erc/erc-scenarios-base-association-nick.el
index b46c996bc0a..5f90f0d2bcd 100644
--- a/test/lisp/erc/erc-scenarios-base-association-nick.el
+++ b/test/lisp/erc/erc-scenarios-base-association-nick.el
@@ -1,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
diff --git a/test/lisp/erc/erc-scenarios-base-association-query.el b/test/lisp/erc/erc-scenarios-base-association-query.el
new file mode 100644
index 00000000000..e9472617918
--- /dev/null
+++ b/test/lisp/erc/erc-scenarios-base-association-query.el
@@ -0,0 +1,107 @@
+;;; erc-scenarios-base-association-query.el --- assoc query scenarios -*- lexical-binding: t -*-
+
+;; Copyright (C) 2022-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 'ert-x)
+(eval-and-compile
+ (let ((load-path (cons (ert-resource-directory) load-path)))
+ (require 'erc-scenarios-common)))
+
+(eval-when-compile (require 'erc-join))
+
+
+;; Non-ERC buffers exist whose names match the nicknames of query
+;; targets, both newly arriving and outgoing. No target buffers yet
+;; exist for these, so new ones are created that feature a net-ID
+;; @suffix.
+
+(ert-deftest erc-scenarios-base-association-existing-non-erc-buffer ()
+ :tags '(:expensive-test)
+ (erc-scenarios-common-with-cleanup
+ ((erc-scenarios-common-dialog "base/assoc/queries")
+ (dumb-server (erc-d-run "localhost" t 'non-erc))
+ (port (process-contact dumb-server :service))
+ (expect (erc-d-t-make-expecter))
+ (nitwit (with-current-buffer (get-buffer-create "nitwit")
+ (prin1 (ert-test-name (ert-running-test)) (current-buffer))
+ (current-buffer))) ; these are killed on completion by macro
+ (dummy (with-current-buffer (get-buffer-create "dummy")
+ (prin1 (ert-test-name (ert-running-test)) (current-buffer))
+ (current-buffer)))
+ (erc-server-flood-penalty 0.1))
+
+ (ert-info ("Connect to foonet")
+ (with-current-buffer (erc :server "127.0.0.1"
+ :port port
+ :nick "tester"
+ :user "tester"
+ :full-name "tester")
+ (erc-scenarios-common-assert-initial-buf-name nil port)
+ (erc-d-t-wait-for 5 (eq erc-network 'foonet))
+ (funcall expect 15 "debug mode")))
+
+ (ert-info ("Nick dummy queries us")
+ (with-current-buffer (erc-d-t-wait-for 10 (get-buffer "dummy@foonet"))
+ (should (erc-query-buffer-p))
+ (funcall expect 5 "hi")
+
+ (ert-info ("We query nick nitwit")
+ (with-current-buffer (erc-cmd-QUERY "nitwit")
+ (should (equal (buffer-name) "nitwit@foonet"))
+ (erc-scenarios-common-say "hola")
+ (funcall expect 5 "ciao")))
+
+ (erc-scenarios-common-say "howdy")
+ (funcall expect 5 "bye")
+ (erc-cmd-QUIT "")))))
+
+;; Someone sending you a PM has the same name as the network (bug#59976)
+
+(ert-deftest erc-scenarios-base-association-some-nick-is-network ()
+ :tags '(:expensive-test)
+ (erc-scenarios-common-with-cleanup
+ ((erc-scenarios-common-dialog "base/assoc/queries")
+ (dumb-server (erc-d-run "localhost" t 'netnick))
+ (port (process-contact dumb-server :service))
+ (expect (erc-d-t-make-expecter))
+ (erc-server-flood-penalty 0.5))
+
+ (ert-info ("Connect to foonet")
+ (with-current-buffer (erc :server "127.0.0.1"
+ :port port
+ :nick "tester"
+ :user "tester"
+ :full-name "tester")
+ (erc-scenarios-common-assert-initial-buf-name nil port)
+ (erc-d-t-wait-for 5 (eq erc-network 'foonet))))
+
+ (ert-info ("Join common channel as nick foonet")
+ (with-current-buffer "foonet"
+ (funcall expect 15 "debug mode")
+ (erc-cmd-JOIN "#chan"))
+ (with-current-buffer (erc-d-t-wait-for 10 (get-buffer "#chan"))
+ (funcall expect 5 "welcome")))
+
+ (ert-info ("Nick foonet PMs us")
+ (with-current-buffer (erc-d-t-wait-for 10 (get-buffer "foonet@foonet"))
+ (should (erc-query-buffer-p))
+ (funcall expect 5 "hi")))))
+
+;;; erc-scenarios-base-association-query.el ends here
diff --git a/test/lisp/erc/erc-scenarios-base-association-samenet.el b/test/lisp/erc/erc-scenarios-base-association-samenet.el
index b7c7079df34..c64a3f6725b 100644
--- a/test/lisp/erc/erc-scenarios-base-association-samenet.el
+++ b/test/lisp/erc/erc-scenarios-base-association-samenet.el
@@ -1,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
diff --git a/test/lisp/erc/erc-scenarios-base-association.el b/test/lisp/erc/erc-scenarios-base-association.el
index 83e5101e3ad..1e280d0fdd7 100644
--- a/test/lisp/erc/erc-scenarios-base-association.el
+++ b/test/lisp/erc/erc-scenarios-base-association.el
@@ -1,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
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 2ffa86aff64..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,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
diff --git a/test/lisp/erc/erc-scenarios-base-local-modules.el b/test/lisp/erc/erc-scenarios-base-local-modules.el
index 417705de09c..d4001df45de 100644
--- a/test/lisp/erc/erc-scenarios-base-local-modules.el
+++ b/test/lisp/erc/erc-scenarios-base-local-modules.el
@@ -1,30 +1,29 @@
;;; 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.
-;;
-;; 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, see
-;; <https://www.gnu.org/licenses/>.
-;;; Code:
+;; 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:
;; These tests all use `sasl' because, as of ERC 5.5, it's the one
;; and only local module.
+;;; Code:
+
(require 'ert-x)
(eval-and-compile
(let ((load-path (cons (ert-resource-directory) load-path)))
diff --git a/test/lisp/erc/erc-scenarios-base-misc-regressions.el b/test/lisp/erc/erc-scenarios-base-misc-regressions.el
index 8f5700df14b..16b2cb355d1 100644
--- a/test/lisp/erc/erc-scenarios-base-misc-regressions.el
+++ b/test/lisp/erc/erc-scenarios-base-misc-regressions.el
@@ -1,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
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 6c6568cad68..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,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
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 f48e1ef3940..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,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
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 72510809ab4..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,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
diff --git a/test/lisp/erc/erc-scenarios-base-netid-bouncer.el b/test/lisp/erc/erc-scenarios-base-netid-bouncer.el
index d171e1f9f91..a658a17601b 100644
--- a/test/lisp/erc/erc-scenarios-base-netid-bouncer.el
+++ b/test/lisp/erc/erc-scenarios-base-netid-bouncer.el
@@ -1,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
diff --git a/test/lisp/erc/erc-scenarios-base-netid-samenet.el b/test/lisp/erc/erc-scenarios-base-netid-samenet.el
index 248144d6f9b..7304dead44c 100644
--- a/test/lisp/erc/erc-scenarios-base-netid-samenet.el
+++ b/test/lisp/erc/erc-scenarios-base-netid-samenet.el
@@ -1,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
@@ -39,6 +40,9 @@
(erc-server-flood-margin 30)
erc-serv-buf-a erc-serv-buf-b)
+ (when (and id-a (zerop (random 2))) (setq id-a (symbol-name id-a)))
+ (when (and id-b (zerop (random 2))) (setq id-b (symbol-name id-b)))
+
(ert-info ("Connect to foonet with nick tester")
(with-current-buffer
(setq erc-serv-buf-a (erc :server "127.0.0.1"
diff --git a/test/lisp/erc/erc-scenarios-base-reconnect.el b/test/lisp/erc/erc-scenarios-base-reconnect.el
index 8762f33b303..5b4dc549042 100644
--- a/test/lisp/erc/erc-scenarios-base-reconnect.el
+++ b/test/lisp/erc/erc-scenarios-base-reconnect.el
@@ -1,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
diff --git a/test/lisp/erc/erc-scenarios-base-renick.el b/test/lisp/erc/erc-scenarios-base-renick.el
index bf27f61b3fc..f1723200533 100644
--- a/test/lisp/erc/erc-scenarios-base-renick.el
+++ b/test/lisp/erc/erc-scenarios-base-renick.el
@@ -1,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
diff --git a/test/lisp/erc/erc-scenarios-base-reuse-buffers.el b/test/lisp/erc/erc-scenarios-base-reuse-buffers.el
index 8e7e939d046..d23a0b35904 100644
--- a/test/lisp/erc/erc-scenarios-base-reuse-buffers.el
+++ b/test/lisp/erc/erc-scenarios-base-reuse-buffers.el
@@ -1,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
diff --git a/test/lisp/erc/erc-scenarios-base-unstable.el b/test/lisp/erc/erc-scenarios-base-unstable.el
index 2313a15842c..2ccf8880b95 100644
--- a/test/lisp/erc/erc-scenarios-base-unstable.el
+++ b/test/lisp/erc/erc-scenarios-base-unstable.el
@@ -1,29 +1,30 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
(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
@@ -131,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 5a5b363f31d..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,27 +1,28 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;; Commentary:
-;;
+
;; These concern the loss and recovery of a proxy's IRC-side connection.
+;;; Code:
+
(require 'ert-x)
(eval-and-compile
(let ((load-path (cons (ert-resource-directory) load-path)))
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 6e9a2172459..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,27 +1,28 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;; Commentary:
-;;
+
;; These concern the loss and recovery of a proxy's IRC-side connection.
+;;; Code:
+
(require 'ert-x)
(eval-and-compile
(let ((load-path (cons (ert-resource-directory) load-path)))
diff --git a/test/lisp/erc/erc-scenarios-internal.el b/test/lisp/erc/erc-scenarios-internal.el
index e4e1edb97e3..8d38c2dde49 100644
--- a/test/lisp/erc/erc-scenarios-internal.el
+++ b/test/lisp/erc/erc-scenarios-internal.el
@@ -1,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
diff --git a/test/lisp/erc/erc-scenarios-join-auth-source.el b/test/lisp/erc/erc-scenarios-join-auth-source.el
index 94336db07c5..6ed5bc2db37 100644
--- a/test/lisp/erc/erc-scenarios-join-auth-source.el
+++ b/test/lisp/erc/erc-scenarios-join-auth-source.el
@@ -1,27 +1,28 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;; TODO add another test with autojoin and channel keys
+;;; Code:
+
(require 'ert-x)
(eval-and-compile
(let ((load-path (cons (ert-resource-directory) load-path)))
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 e2e437321d9..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,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
diff --git a/test/lisp/erc/erc-scenarios-join-netid-newcmd.el b/test/lisp/erc/erc-scenarios-join-netid-newcmd.el
index 1a541a46b3f..c8e9d66906e 100644
--- a/test/lisp/erc/erc-scenarios-join-netid-newcmd.el
+++ b/test/lisp/erc/erc-scenarios-join-netid-newcmd.el
@@ -1,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
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 92bdd643de8..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,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
diff --git a/test/lisp/erc/erc-scenarios-join-netid-recon.el b/test/lisp/erc/erc-scenarios-join-netid-recon.el
index cbdba07e256..0f76617faa5 100644
--- a/test/lisp/erc/erc-scenarios-join-netid-recon.el
+++ b/test/lisp/erc/erc-scenarios-join-netid-recon.el
@@ -1,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
diff --git a/test/lisp/erc/erc-scenarios-misc.el b/test/lisp/erc/erc-scenarios-misc.el
index 8557a779069..5927eee48fd 100644
--- a/test/lisp/erc/erc-scenarios-misc.el
+++ b/test/lisp/erc/erc-scenarios-misc.el
@@ -1,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
@@ -97,11 +98,10 @@
:nick "tester"
:full-name "tester")
(should (string= (buffer-name) (format "127.0.0.1:%d" port)))
- (let ((err (should-error (sleep-for 1))))
- (should (string-match-p "Failed to determine" (cadr err))))
(funcall expect 1 "Failed to determine")
(funcall expect 1 "Failed to determine")
- (should-not erc-network)
+ (funcall expect 1 "Connection failed")
+ (should (string-prefix-p "Unknown" (erc-network-name)))
(should (string= erc-server-announced-name "irc.foonet.org"))))))
;; Targets that are host/server masks like $*, $$*, and #* are routed
diff --git a/test/lisp/erc/erc-scenarios-sasl.el b/test/lisp/erc/erc-scenarios-sasl.el
index 6c5e78d0c8d..3878237c7d2 100644
--- a/test/lisp/erc/erc-scenarios-sasl.el
+++ b/test/lisp/erc/erc-scenarios-sasl.el
@@ -1,22 +1,21 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/lisp/erc/erc-scenarios-services-misc.el b/test/lisp/erc/erc-scenarios-services-misc.el
index cb1aa6ff324..a1679d302f4 100644
--- a/test/lisp/erc/erc-scenarios-services-misc.el
+++ b/test/lisp/erc/erc-scenarios-services-misc.el
@@ -1,22 +1,23 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
(require 'ert-x)
(eval-and-compile
@@ -83,4 +84,63 @@
(should-not (memq 'services erc-modules))))
+;; A user with `services' enabled connects, quits, and reconnects. An
+;; entry in their netrc matches the network ID, which isn't known when
+;; `erc-auth-source-server-function' runs -- initially *or* on
+;; reconnect. It's only seen by `erc-auth-source-services-function'.
+
+(ert-deftest erc-scenarios-services-auth-source-reconnect ()
+ :tags '(:expensive-test)
+ (erc-scenarios-common-with-cleanup
+ ((erc-scenarios-common-dialog "services/auth-source")
+ (erc-server-flood-penalty 0.1)
+ (dumb-server (erc-d-run "localhost" t 'recon 'recon))
+ (port (process-contact dumb-server :service))
+ (netrc-file (make-temp-file
+ "auth-source-test" nil nil
+ "machine FooNet login tester password changeme\n"))
+ (auth-sources (list netrc-file))
+ (auth-source-do-cache nil)
+ (erc-modules (cons 'services erc-modules))
+ (erc-use-auth-source-for-nickserv-password t) ; do consult
+ (erc-prompt-for-nickserv-password nil) ; don't prompt
+ (erc-nickserv-alist
+ (cons '(FooNet
+ "NickServ!NickServ@services.int"
+ "This nickname is registered. Please choose"
+ "NickServ" "IDENTIFY" nil nil "You are now identified for ")
+ erc-nickserv-alist))
+ (expect (erc-d-t-make-expecter))
+ (erc-scenarios-common-extra-teardown (lambda ()
+ (delete-file netrc-file))))
+
+ (ert-info ("Server password omitted from initial connection")
+ (with-current-buffer (erc :server "127.0.0.1"
+ :port port
+ :nick "tester"
+ :user "tester"
+ :full-name "tester")
+ (should (string= (buffer-name) (format "127.0.0.1:%d" port)))
+ (ert-info ("Services module authenticates")
+ (funcall expect 10 "This nickname is registered.")
+ (funcall expect 3 "You are now identified"))
+ (erc-cmd-JOIN "#chan")
+ (with-current-buffer (erc-d-t-wait-for 10 (get-buffer "#chan"))
+ (funcall expect 10 "the gallants desire it"))
+ (erc-cmd-QUIT "")
+ (funcall expect 3 "finished")))
+
+ (ert-info ("Server password withheld on reconnect")
+ (with-current-buffer "#chan"
+ (erc-cmd-RECONNECT))
+ (with-current-buffer "FooNet"
+ (funcall expect 10 "This nickname is registered.")
+ (funcall expect 3 "You are now identified")
+ (with-current-buffer "#chan" ; autojoined
+ (funcall expect 10 "the gallants desire it"))
+ (erc-cmd-QUIT "")
+ (funcall expect 3 "finished")))
+
+ (erc-services-mode -1)))
+
;;; erc-scenarios-services-misc.el ends here
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 4d0d69cd7b6..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>
@@ -428,18 +428,21 @@
(ert-info ("ascii")
(puthash 'CASEMAPPING '("ascii") erc--isupport-params)
+ (should (equal (erc-downcase "ABC 123 ΔÎΩΣ") "abc 123 ΔÎΩΣ"))
(should (equal (erc-downcase "Bob[m]`") "bob[m]`"))
(should (equal (erc-downcase "Tilde~") "tilde~" ))
(should (equal (erc-downcase "\\O/") "\\o/" )))
(ert-info ("rfc1459")
(puthash 'CASEMAPPING '("rfc1459") erc--isupport-params)
+ (should (equal (erc-downcase "ABC 123 ΔÎΩΣ") "abc 123 ΔÎΩΣ"))
(should (equal (erc-downcase "Bob[m]`") "bob{m}`" ))
(should (equal (erc-downcase "Tilde~") "tilde^" ))
(should (equal (erc-downcase "\\O/") "|o/" )))
(ert-info ("rfc1459-strict")
(puthash 'CASEMAPPING '("rfc1459-strict") erc--isupport-params)
+ (should (equal (erc-downcase "ABC 123 ΔÎΩΣ") "abc 123 ΔÎΩΣ"))
(should (equal (erc-downcase "Bob[m]`") "bob{m}`"))
(should (equal (erc-downcase "Tilde~") "tilde~" ))
(should (equal (erc-downcase "\\O/") "|o/" )))))
@@ -998,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))))
@@ -1033,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
@@ -1328,7 +1331,7 @@ Some docstring"
(defun erc-mname-enable (&optional ,arg-en)
"Enable ERC mname mode.
-With ARG, do so in all buffers for the current connection."
+When called interactively, do so in all buffers for the current connection."
(interactive "p")
(when (derived-mode-p 'erc-mode)
(if ,arg-en
@@ -1340,7 +1343,7 @@ With ARG, do so in all buffers for the current connection."
(defun erc-mname-disable (&optional ,arg-dis)
"Disable ERC mname mode.
-With ARG, do so in all buffers for the current connection."
+When called interactively, do so in all buffers for the current connection."
(interactive "p")
(when (derived-mode-p 'erc-mode)
(if ,arg-dis
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/base/assoc/queries/netnick.eld b/test/lisp/erc/resources/base/assoc/queries/netnick.eld
new file mode 100644
index 00000000000..98dda126909
--- /dev/null
+++ b/test/lisp/erc/resources/base/assoc/queries/netnick.eld
@@ -0,0 +1,42 @@
+;; -*- 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"))
+
+((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.00 ":foonet!~u@z5d6jyn8pwxge.irc PRIVMSG tester :hi")
+
+ (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.")
+ (0.00 ":foonet!~u@z5d6jyn8pwxge.irc QUIT :connection closed"))
+
+((quit 10 "QUIT :\2ERC\2")
+ (0.03 ":tester!~u@z5d6jyn8pwxge.irc QUIT :Quit: \2ERC\2"))
diff --git a/test/lisp/erc/resources/base/assoc/queries/non-erc.eld b/test/lisp/erc/resources/base/assoc/queries/non-erc.eld
new file mode 100644
index 00000000000..aecd4922c39
--- /dev/null
+++ b/test/lisp/erc/resources/base/assoc/queries/non-erc.eld
@@ -0,0 +1,33 @@
+;; -*- 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.")
+ (0.00 ":dummy!~u@z5d6jyn8pwxge.irc PRIVMSG tester :hi"))
+
+((~privmsg-open 10 "PRIVMSG nitwit :hola")
+ (0.00 ":nitwit!~u@m5q6wla8cjktr.irc PRIVMSG tester :ciao"))
+
+((privmsg 10 "PRIVMSG dummy :howdy")
+ (0.00 ":dummy!~u@z5d6jyn8pwxge.irc PRIVMSG tester :bye")
+ (0.01 ":dummy!~u@z5d6jyn8pwxge.irc QUIT :connection closed"))
+
+((quit 10 "QUIT :\2ERC\2")
+ (0.03 ":tester!~u@z5d6jyn8pwxge.irc QUIT :Quit: \2ERC\2"))
diff --git a/test/lisp/erc/resources/base/local-modules/fourth.eld b/test/lisp/erc/resources/base/local-modules/fourth.eld
index fd6d62b6cc2..4ac5dcbd38b 100644
--- a/test/lisp/erc/resources/base/local-modules/fourth.eld
+++ b/test/lisp/erc/resources/base/local-modules/fourth.eld
@@ -1,7 +1,7 @@
;; -*- mode: lisp-data; -*-
((cap 10 "CAP REQ :sasl"))
((nick 10 "NICK tester`"))
-((user 10 "USER tester 0 * :tester"))
+((user 10 "USER tester` 0 * :tester"))
((authenticate 10 "AUTHENTICATE PLAIN")
(0.0 ":irc.foonet.org CAP * ACK sasl")
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 db113335a82..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,22 +1,21 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
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 a1a7e7e88d5..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,26 +1,24 @@
;;; 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.
-;;
-;; 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, see
-;; <https://www.gnu.org/licenses/>.
-;;; Commentary:
+;; 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:
+
(eval-and-compile
(let* ((d (file-name-directory (or (macroexp-file-name) buffer-file-name)))
(load-path (cons (directory-file-name d) load-path)))
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 8dd5cef7aa2..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,26 +1,24 @@
;;; 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.
-;;
-;; 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, see
-;; <https://www.gnu.org/licenses/>.
-;;; Commentary:
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
+
(require 'ert-x)
(eval-and-compile
(let ((load-path (cons (expand-file-name ".." (ert-resource-directory))
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 ce13efef624..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,22 +1,21 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/test/lisp/erc/resources/erc-d/erc-d.el b/test/lisp/erc/resources/erc-d/erc-d.el
index d6082227c52..f4491bbb834 100644
--- a/test/lisp/erc/resources/erc-d/erc-d.el
+++ b/test/lisp/erc/resources/erc-d/erc-d.el
@@ -1,22 +1,21 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
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 bb8869dff69..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,24 +1,22 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
-;;; Commentary:
;;; Code:
(defvar erc-d-tmpl-vars)
diff --git a/test/lisp/erc/resources/erc-scenarios-common.el b/test/lisp/erc/resources/erc-scenarios-common.el
index 601c9e95c88..0d9a79ae9ce 100644
--- a/test/lisp/erc/resources/erc-scenarios-common.el
+++ b/test/lisp/erc/resources/erc-scenarios-common.el
@@ -1,22 +1,21 @@
;;; 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.
-;;
-;; 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.
-;;
+
+;; 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 this program. If not, see
-;; <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
@@ -186,7 +185,7 @@ Dialog resource directories are located by expanding the variable
(defun erc-scenarios-common-assert-initial-buf-name (id port)
;; Assert no limbo period when explicit ID given
(should (string= (if id
- (symbol-name id)
+ (format "%s" id)
(format "127.0.0.1:%d" port))
(buffer-name))))
diff --git a/test/lisp/erc/resources/networks/announced-missing/foonet.eld b/test/lisp/erc/resources/networks/announced-missing/foonet.eld
index 79b0fb462a8..4481f27663d 100644
--- a/test/lisp/erc/resources/networks/announced-missing/foonet.eld
+++ b/test/lisp/erc/resources/networks/announced-missing/foonet.eld
@@ -3,6 +3,3 @@
((user 1 "USER user 0 * :tester")
(0 ":irc.foonet.org 001 tester :Welcome to the FooNet Internet Relay Chat Network tester")
(0 ":irc.foonet.org 422 tester :MOTD File is missing"))
-
-((mode-user 1.2 "MODE tester +i")
- (0 ":tester MODE tester :+Zi"))
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/erc/resources/services/auth-source/recon.eld b/test/lisp/erc/resources/services/auth-source/recon.eld
new file mode 100644
index 00000000000..2ab52c9bec8
--- /dev/null
+++ b/test/lisp/erc/resources/services/auth-source/recon.eld
@@ -0,0 +1,48 @@
+;; -*- mode: lisp-data; -*-
+((nick 10 "NICK tester"))
+((user 5 "USER tester 0 * :tester")
+ (0.00 ":irc.foonet.net NOTICE * :*** Looking up your hostname...")
+ (0.04 ":irc.foonet.net NOTICE tester :*** Could not resolve your hostname: Domain not found; using your IP address (10.0.2.100) instead.")
+ (0.06 ":irc.foonet.net 001 tester :Welcome to the FooNet IRC Network tester!tester@10.0.2.100")
+ (0.01 ":irc.foonet.net 002 tester :Your host is irc.foonet.net, running version InspIRCd-3")
+ (0.01 ":irc.foonet.net 003 tester :This server was created 08:32:24 Dec 05 2022")
+ (0.01 ":irc.foonet.net 004 tester irc.foonet.net InspIRCd-3 BIRcgikorsw ACHIKMORTXabcefghijklmnopqrstvz :HIXabefghjkloqv")
+ (0.01 ":irc.foonet.net 005 tester ACCEPT=30 AWAYLEN=200 BOT=B CALLERID=g CASEMAPPING=ascii CHANLIMIT=#:20 CHANMODES=IXbeg,k,Hfjl,ACKMORTcimnprstz CHANNELLEN=64 CHANTYPES=# ELIST=CMNTU ESILENCE=CcdiNnPpTtx EXCEPTS=e :are supported by this server")
+ (0.01 ":irc.foonet.net 005 tester EXTBAN=,ACORTUacjrwz HOSTLEN=64 INVEX=I KEYLEN=32 KICKLEN=255 LINELEN=512 MAXLIST=I:100,X:100,b:100,e:100,g:100 MAXTARGETS=20 MODES=20 MONITOR=30 NAMELEN=128 NAMESX NETWORK=FooNet :are supported by this server")
+ (0.01 ":irc.foonet.net 005 tester NICKLEN=30 PREFIX=(qaohv)~&@%+ SAFELIST SILENCE=32 STATUSMSG=~&@%+ TOPICLEN=307 UHNAMES USERIP USERLEN=10 USERMODES=,,s,BIRcgikorw WHOX :are supported by this server")
+ (0.01 ":irc.foonet.net 251 tester :There are 2 users and 0 invisible on 2 servers")
+ (0.00 ":irc.foonet.net 253 tester 1 :unknown connections")
+ (0.00 ":irc.foonet.net 254 tester 1 :channels formed")
+ (0.00 ":irc.foonet.net 255 tester :I have 2 clients and 1 servers")
+ (0.00 ":irc.foonet.net 265 tester :Current local users: 2 Max: 3")
+ (0.00 ":irc.foonet.net 266 tester :Current global users: 2 Max: 3")
+ (0.00 ":irc.foonet.net 375 tester :irc.foonet.net message of the day")
+ (0.00 ":irc.foonet.net 372 tester :Have fun!")
+ (0.00 ":irc.foonet.net 376 tester :End of message of the day."))
+
+((mode-a 10 "MODE tester +i")
+ (0.00 ":irc.foonet.net 501 tester x :is not a recognized user mode.")
+ (0.04 ":tester!tester@10.0.2.100 MODE tester :+i")
+ (0.00 ":NickServ!NickServ@services.int NOTICE tester :This nickname is registered. Please choose a different nickname, or identify via \2/msg NickServ identify <password>\2."))
+
+((~privmsg 10 "PRIVMSG NickServ :IDENTIFY changeme")
+ (0.00 ":NickServ!NickServ@services.int NOTICE tester :You are now identified for \2tester\2.")
+ (0.01 ":irc.foonet.net 900 tester tester!tester@10.0.2.100 tester :You are now logged in as tester"))
+
+((~join 10 "JOIN #chan")
+ (0.00 ":tester!tester@10.0.2.100 JOIN :#chan")
+ (0.04 ":irc.foonet.net 353 tester = #chan :@alice bob tester")
+ (0.00 ":irc.foonet.net 366 tester #chan :End of /NAMES list."))
+
+((mode-b 10 "MODE #chan")
+ (0.03 ":irc.foonet.net 324 tester #chan :+nt")
+ (0.01 ":irc.foonet.net 329 tester #chan :1670229160")
+ (0.00 ":alice!alice@0::1 PRIVMSG #chan :tester, welcome!")
+ (0.00 ":bob!bob@0::1 PRIVMSG #chan :tester, welcome!")
+ (0.05 ":alice!alice@0::1 PRIVMSG #chan :bob: Thou art the cap of all the fools alive.")
+ (0.06 ":bob!bob@0::1 PRIVMSG #chan :alice: What, man! 'tis a night of revels; the gallants desire it."))
+
+((quit 10 "QUIT :\2ERC\2")
+ (0.1 ":tester!tester@10.0.2.100 QUIT :Client Quit"))
+
+((drop 1 DROP))
diff --git a/test/lisp/eshell/em-alias-tests.el b/test/lisp/eshell/em-alias-tests.el
index aca622220e3..273e19d580b 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..6d6d4daac9d 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>
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..4e557fada73 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.
diff --git a/test/lisp/eshell/em-tramp-tests.el b/test/lisp/eshell/em-tramp-tests.el
index 6cc35ecdb1b..1d4ad9dc632 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.
diff --git a/test/lisp/eshell/esh-arg-tests.el b/test/lisp/eshell/esh-arg-tests.el
new file mode 100644
index 00000000000..918ad3a949f
--- /dev/null
+++ b/test/lisp/eshell/esh-arg-tests.el
@@ -0,0 +1,105 @@
+;;; esh-arg-tests.el --- esh-arg test suite -*- lexical-binding:t -*-
+
+;; Copyright (C) 2022-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:
+
+;; Tests for Eshell's argument handling.
+
+;;; Code:
+
+(require 'ert)
+(require 'esh-mode)
+(require 'eshell)
+
+(require 'eshell-tests-helpers
+ (expand-file-name "eshell-tests-helpers"
+ (file-name-directory (or load-file-name
+ default-directory))))
+
+(defvar eshell-test-value nil)
+
+;;; Tests:
+
+(ert-deftest esh-arg-test/escape/nonspecial ()
+ "Test that \"\\c\" and \"c\" are equivalent when \"c\" is not a
+special character."
+ (with-temp-eshell
+ (eshell-match-command-output "echo he\\llo"
+ "hello\n")))
+
+(ert-deftest esh-arg-test/escape/nonspecial-unicode ()
+ "Test that \"\\c\" and \"c\" are equivalent when \"c\" is a
+unicode character (unicode characters are nonspecial by
+definition)."
+ (with-temp-eshell
+ (eshell-match-command-output "echo Vid\\Ă©os"
+ "Vidéos\n")))
+
+(ert-deftest esh-arg-test/escape/special ()
+ "Test that the backslash is not preserved for escaped special
+chars."
+ (with-temp-eshell
+ (eshell-match-command-output "echo he\\\\llo"
+ ;; Backslashes are doubled for regexp.
+ "he\\\\llo\n")))
+
+(ert-deftest esh-arg-test/escape/newline ()
+ "Test that an escaped newline is equivalent to the empty string.
+When newlines are *nonspecial*, an escaped newline should be
+treated as just a newline."
+ (with-temp-eshell
+ (eshell-match-command-output "echo hi\\\nthere"
+ "hithere\n")))
+
+(ert-deftest esh-arg-test/escape/newline-conditional ()
+ "Test invocation of an if/else statement using line continuations."
+ (let ((eshell-test-value t))
+ (eshell-command-result-equal
+ "if $eshell-test-value \\\n{echo yes} \\\n{echo no}"
+ "yes"))
+ (let ((eshell-test-value nil))
+ (eshell-command-result-equal
+ "if $eshell-test-value \\\n{echo yes} \\\n{echo no}"
+ "no")))
+
+(ert-deftest esh-arg-test/escape-quoted/nonspecial ()
+ "Test that the backslash is preserved for escaped nonspecial
+chars."
+ (with-temp-eshell
+ (eshell-match-command-output "echo \"h\\i\""
+ ;; Backslashes are doubled for regexp.
+ "h\\\\i\n")))
+
+(ert-deftest esh-arg-test/escape-quoted/special ()
+ "Test that the backslash is not preserved for escaped special
+chars."
+ (with-temp-eshell
+ (eshell-match-command-output "echo \"\\\"hi\\\\\""
+ ;; Backslashes are doubled for regexp.
+ "\\\"hi\\\\\n")))
+
+(ert-deftest esh-arg-test/escape-quoted/newline ()
+ "Test that an escaped newline is equivalent to the empty string.
+When newlines are *nonspecial*, an escaped newline should be
+treated literally, as a backslash and a newline."
+ (with-temp-eshell
+ (eshell-match-command-output "echo \"hi\\\nthere\""
+ "hithere\n")))
+
+;; esh-arg-tests.el ends here
diff --git a/test/lisp/eshell/esh-cmd-tests.el b/test/lisp/eshell/esh-cmd-tests.el
index 92d785d7fdf..912822eeddb 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.
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..b38d6090f13 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.
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 96fde026a54..7ec1731f94e 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..f1d12dbe9f3 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>
diff --git a/test/lisp/eshell/eshell-tests.el b/test/lisp/eshell/eshell-tests.el
index d5112146c2d..3c4a8ec97ea 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>
@@ -105,37 +105,6 @@
(format template "format \"%s\" eshell-in-pipeline-p")
"nil")))
-(ert-deftest eshell-test/escape-nonspecial ()
- "Test that \"\\c\" and \"c\" are equivalent when \"c\" is not a
-special character."
- (with-temp-eshell
- (eshell-match-command-output "echo he\\llo"
- "hello\n")))
-
-(ert-deftest eshell-test/escape-nonspecial-unicode ()
- "Test that \"\\c\" and \"c\" are equivalent when \"c\" is a
-unicode character (unicode characters are nonspecial by
-definition)."
- (with-temp-eshell
- (eshell-match-command-output "echo Vid\\Ă©os"
- "Vidéos\n")))
-
-(ert-deftest eshell-test/escape-nonspecial-quoted ()
- "Test that the backslash is preserved for escaped nonspecial
-chars"
- (with-temp-eshell
- (eshell-match-command-output "echo \"h\\i\""
- ;; Backslashes are doubled for regexp.
- "h\\\\i\n")))
-
-(ert-deftest eshell-test/escape-special-quoted ()
- "Test that the backslash is not preserved for escaped special
-chars"
- (with-temp-eshell
- (eshell-match-command-output "echo \"\\\"hi\\\\\""
- ;; Backslashes are doubled for regexp.
- "\\\"hi\\\\\n")))
-
(ert-deftest eshell-test/command-running-p ()
"Modeline should show no command running"
(with-temp-eshell
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 682b5cdb449..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.
@@ -1038,17 +1038,6 @@ unquoted file names."
(let ((default-directory nospecial-dir))
(should-error (make-directory "dir")))))
-(ert-deftest files-tests-file-name-non-special-make-directory-internal ()
- (files-tests--with-temp-non-special (tmpdir nospecial-dir t)
- (let ((default-directory nospecial-dir))
- (make-directory-internal "dir")
- (should (file-directory-p "dir"))
- (delete-directory "dir")))
- (files-tests--with-temp-non-special-and-file-name-handler
- (tmpdir nospecial-dir t)
- (let ((default-directory nospecial-dir))
- (should-error (make-directory-internal "dir")))))
-
(ert-deftest files-tests-file-name-non-special-make-nearby-temp-file ()
(let* ((default-directory (file-name-quote temporary-file-directory))
(near-tmpfile (make-nearby-temp-file "file")))
@@ -1272,11 +1261,11 @@ works as expected if the default directory is quoted."
(a/b (concat dirname "a/b")))
(write-region "" nil file)
(should-error (make-directory "/"))
- (should-not (make-directory "/" t))
+ (should (make-directory "/" t))
(should-error (make-directory dir))
- (should-not (make-directory dir t))
+ (should (make-directory dir t))
(should-error (make-directory dirname))
- (should-not (make-directory dirname t))
+ (should (make-directory dirname t))
(should-error (make-directory file))
(should-error (make-directory file t))
(should-not (make-directory subdir1))
@@ -1357,7 +1346,9 @@ name (Bug#28412)."
(dest (concat dirname "dest/new/directory/"))
(file (concat (file-name-as-directory source) "file"))
(source2 (concat dirname "source2"))
- (dest2 (concat dirname "dest/new2")))
+ (dest2 (concat dirname "dest/new2"))
+ (source3 (concat dirname "source3/d"))
+ (dest3 (concat dirname "dest3/d")))
(make-directory source)
(write-region "" nil file)
(copy-directory source dest t t t)
@@ -1365,6 +1356,11 @@ name (Bug#28412)."
(make-directory (concat (file-name-as-directory source2) "a") t)
(copy-directory source2 dest2)
(should (file-directory-p (concat (file-name-as-directory dest2) "a")))
+ (make-directory source3 t)
+ (write-region "x\n" nil (concat (file-name-as-directory source3) "file"))
+ (make-directory dest3 t)
+ (write-region "y\n" nil (concat (file-name-as-directory dest3) "file"))
+ (copy-directory source3 (file-name-directory dest3) t)
(delete-directory dir 'recursive))))
(ert-deftest files-tests-abbreviate-file-name-homedir ()
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 e4e607b70e6..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>
@@ -789,7 +789,7 @@ With Ma Gnus v0.14 and earlier a signature would be created with a wrong key."
;; TODO Passphrase passing and caching in Emacs does not seem to work
;; with gpgsm at all.
-;; Independently of caching settings, a pinentry dialogue is displayed.
+;; Independently of caching settings, a pinentry dialog is displayed.
;; Thus, the following tests require the user to enter the correct gpgsm
;; passphrases at the correct points in time. (Either empty string or
;; "Passphrase".)
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 8d7ac5eb8b1..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.
@@ -255,7 +255,8 @@ Must be called with `ucs-normalize-tests--norm-buf' as current buffer."
(ert-deftest ucs-normalize-part1 ()
:tags '(:expensive-test)
- (skip-unless (not (getenv "EMACS_HYDRA_CI"))) ; SLOW ~ 1800s
+ (skip-unless (not (or (getenv "EMACS_HYDRA_CI")
+ (getenv "EMACS_EMBA_CI")))) ; SLOW ~ 1800s
;; This takes a long time, so make sure we're compiled.
(dolist (fun '(ucs-normalize-tests--part1-rule2
ucs-normalize-tests--rule1-failing-for-partX
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 5c8914ed573..882d073ab56 100644
--- a/test/lisp/loadhist-resources/loadhist--bar.el
+++ b/test/lisp/loadhist-resources/loadhist--bar.el
@@ -1,21 +1,23 @@
;;; 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>
-;; This program is free software; you can redistribute it and/or modify
+;; 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.
-;; This program is distributed in the hope that it will be useful,
+;; 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 this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
diff --git a/test/lisp/loadhist-resources/loadhist--foo.el b/test/lisp/loadhist-resources/loadhist--foo.el
index 3574c220135..239066b6def 100644
--- a/test/lisp/loadhist-resources/loadhist--foo.el
+++ b/test/lisp/loadhist-resources/loadhist--foo.el
@@ -1,21 +1,23 @@
;;; 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>
-;; This program is free software; you can redistribute it and/or modify
+;; 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.
-;; This program is distributed in the hope that it will be useful,
+;; 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 this program. If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
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..a3d7d9f656b 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>
@@ -5503,15 +5503,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
new file mode 100644
index 00000000000..4b6528351b2
--- /dev/null
+++ b/test/lisp/progmodes/eglot-tests.el
@@ -0,0 +1,1320 @@
+;;; eglot-tests.el --- Tests for eglot.el -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
+
+;; Author: JoĂ£o TĂ¡vora <joaotavora@gmail.com>
+;; Keywords: tests
+
+;; 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:
+
+;; Tests for lisp/progmodes/eglot.el
+;;
+;; Many of these tests rely on the availability of third-party LSP
+;; servers. They are automatically skipped if the program is not
+;; available.
+;;
+;; Some of these tests rely on the GNU ELPA package company.el and
+;; yasnippet.el being available.
+
+;; Some of the tests require access to a remote host files. Since
+;; this could be problematic, a mock-up connection method "mock" is
+;; used. Emulating a remote connection, it simply calls "sh -i".
+;; Tramp's file name handlers still run, so this test is sufficient
+;; except for connection establishing.
+
+;; If you want to test a real Tramp connection, set
+;; $REMOTE_TEMPORARY_FILE_DIRECTORY to a suitable value in order to
+;; overwrite the default value. If you want to skip tests accessing a
+;; remote host, set this environment variable to "/dev/null" or
+;; whatever is appropriate on your system.
+
+;;; Code:
+(require 'eglot)
+(require 'cl-lib)
+(require 'ert)
+(require 'tramp) ; must be prior ert-x
+(require 'ert-x) ; ert-simulate-command
+(require 'edebug)
+(require 'python) ; some tests use pylsp
+(require 'cc-mode) ; c-mode-hook
+(require 'company nil t)
+(require 'yasnippet nil t)
+(require 'subr-x)
+(require 'flymake) ; project-diagnostics
+
+;;; Helpers
+
+(defmacro eglot--with-fixture (fixture &rest body)
+ "Setup FIXTURE, call BODY, teardown FIXTURE.
+FIXTURE is a list. Its elements are of the form (FILE . CONTENT)
+to create a readable FILE with CONTENT. FILE may be a directory
+name and CONTENT another (FILE . CONTENT) list to specify a
+directory hierarchy. FIXTURE's elements can also be (SYMBOL
+VALUE) meaning SYMBOL should be bound to VALUE during BODY and
+then restored."
+ (declare (indent 1) (debug t))
+ `(eglot--call-with-fixture
+ ,fixture #'(lambda () ,@body)))
+
+(defun eglot--make-file-or-dir (ass)
+ (let ((file-or-dir-name (car ass))
+ (content (cdr ass)))
+ (cond ((listp content)
+ (make-directory file-or-dir-name 'parents)
+ (let ((default-directory (concat default-directory "/" file-or-dir-name)))
+ (mapcan #'eglot--make-file-or-dir content)))
+ ((stringp content)
+ (with-temp-buffer
+ (insert content)
+ (write-region nil nil file-or-dir-name nil 'nomessage))
+ (list (expand-file-name file-or-dir-name)))
+ (t
+ (eglot--error "Expected a string or a directory spec")))))
+
+(defun eglot--call-with-fixture (fixture fn)
+ "Helper for `eglot--with-fixture'. Run FN under FIXTURE."
+ (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t))
+ (default-directory fixture-directory)
+ file-specs created-files
+ syms-to-restore
+ new-servers
+ test-body-successful-p)
+ (dolist (spec fixture)
+ (cond ((symbolp spec)
+ (push (cons spec (symbol-value spec)) syms-to-restore)
+ (set spec nil))
+ ((symbolp (car spec))
+ (push (cons (car spec) (symbol-value (car spec))) syms-to-restore)
+ (set (car spec) (cadr spec)))
+ ((stringp (car spec)) (push spec file-specs))))
+ (unwind-protect
+ (let* ((home (getenv "HOME"))
+ (process-environment
+ (append
+ `(;; Set XDF_CONFIG_HOME to /dev/null to prevent
+ ;; user-configuration to have an influence on
+ ;; language servers. (See github#441)
+ "XDG_CONFIG_HOME=/dev/null"
+ ;; ... on the flip-side, a similar technique by
+ ;; Emacs's test makefiles means that HOME is set to
+ ;; /nonexistent. This breaks some common
+ ;; installations for LSP servers like pylsp, making
+ ;; these tests mostly useless, so we hack around it
+ ;; here with a great big hack.
+ ,(format "HOME=%s"
+ (if (file-exists-p home) home
+ (format "/home/%s" (getenv "USER")))))
+ process-environment))
+ ;; Prevent "Can't guess python-indent-offset ..." messages.
+ (python-indent-guess-indent-offset-verbose . nil)
+ (eglot-server-initialized-hook
+ (lambda (server) (push server new-servers))))
+ (setq created-files (mapcan #'eglot--make-file-or-dir file-specs))
+ (prog1 (funcall fn)
+ (setq test-body-successful-p t)))
+ (eglot--message
+ "Test body was %s" (if test-body-successful-p "OK" "A FAILURE"))
+ (unwind-protect
+ (let ((eglot-autoreconnect nil))
+ (dolist (server new-servers)
+ (when (jsonrpc-running-p server)
+ (condition-case oops
+ (eglot-shutdown
+ server nil 3 (not test-body-successful-p))
+ (error
+ (eglot--message "Non-critical shutdown error after test: %S"
+ oops))))
+ (when (not test-body-successful-p)
+ ;; We want to do this after the sockets have
+ ;; shut down such that any pending data has been
+ ;; consumed and is available in the process
+ ;; buffers.
+ (let ((buffers (delq nil (list
+ ;; FIXME: Accessing "internal" symbol here.
+ (process-buffer (jsonrpc--process server))
+ (jsonrpc-stderr-buffer server)
+ (jsonrpc-events-buffer server)))))
+ (cond (noninteractive
+ (dolist (buffer buffers)
+ (eglot--message "%s:" (buffer-name buffer))
+ (princ (with-current-buffer buffer (buffer-string))
+ 'external-debugging-output)))
+ (t
+ (eglot--message "Preserved for inspection: %s"
+ (mapconcat #'buffer-name buffers ", "))))))))
+ (eglot--cleanup-after-test fixture-directory created-files syms-to-restore)))))
+
+(defun eglot--cleanup-after-test (fixture-directory created-files syms-to-restore)
+ (let ((buffers-to-delete
+ (delete nil (mapcar #'find-buffer-visiting created-files))))
+ (eglot--message "Killing %s, wiping %s, restoring %s"
+ buffers-to-delete
+ fixture-directory
+ (mapcar #'car syms-to-restore))
+ (cl-loop for (sym . val) in syms-to-restore
+ do (set sym val))
+ (dolist (buf buffers-to-delete) ;; have to save otherwise will get prompted
+ (with-current-buffer buf (save-buffer) (kill-buffer)))
+ (delete-directory fixture-directory 'recursive)
+ ;; Delete Tramp buffers if needed.
+ (when (file-remote-p temporary-file-directory)
+ (tramp-cleanup-connection
+ (tramp-dissect-file-name temporary-file-directory) nil 'keep-password))))
+
+(cl-defmacro eglot--with-timeout (timeout &body body)
+ (declare (indent 1) (debug t))
+ `(eglot--call-with-timeout ,timeout (lambda () ,@body)))
+
+(defun eglot--call-with-timeout (timeout fn)
+ (let* ((tag (gensym "eglot-test-timeout"))
+ (timed-out (make-symbol "timeout"))
+ (timeout-and-message
+ (if (listp timeout) timeout
+ (list timeout "waiting for test to finish")))
+ (timeout (car timeout-and-message))
+ (message (cadr timeout-and-message))
+ (timer)
+ (retval))
+ (unwind-protect
+ (setq retval
+ (catch tag
+ (setq timer
+ (run-with-timer timeout nil
+ (lambda ()
+ (unless edebug-active
+ (throw tag timed-out)))))
+ (funcall fn)))
+ (cancel-timer timer)
+ (when (eq retval timed-out)
+ (error "%s" (concat "Timed out " message))))))
+
+(defun eglot--find-file-noselect (file &optional noerror)
+ (unless (or noerror
+ (file-readable-p file)) (error "%s does not exist" file))
+ (find-file-noselect file))
+
+(cl-defmacro eglot--sniffing ((&key server-requests
+ server-notifications
+ server-replies
+ client-requests
+ client-notifications
+ client-replies)
+ &rest body)
+ "Run BODY saving LSP JSON messages in variables, most recent first."
+ (declare (indent 1) (debug (sexp &rest form)))
+ (let ((log-event-ad-sym (make-symbol "eglot--event-sniff")))
+ `(unwind-protect
+ (let ,(delq nil (list server-requests
+ server-notifications
+ server-replies
+ client-requests
+ client-notifications
+ client-replies))
+ (advice-add
+ #'jsonrpc--log-event :before
+ (lambda (_proc message &optional type)
+ (cl-destructuring-bind (&key method id _error &allow-other-keys)
+ message
+ (let ((req-p (and method id))
+ (notif-p method)
+ (reply-p id))
+ (cond
+ ((eq type 'server)
+ (cond (req-p ,(when server-requests
+ `(push message ,server-requests)))
+ (notif-p ,(when server-notifications
+ `(push message ,server-notifications)))
+ (reply-p ,(when server-replies
+ `(push message ,server-replies)))))
+ ((eq type 'client)
+ (cond (req-p ,(when client-requests
+ `(push message ,client-requests)))
+ (notif-p ,(when client-notifications
+ `(push message ,client-notifications)))
+ (reply-p ,(when client-replies
+ `(push message ,client-replies)))))))))
+ '((name . ,log-event-ad-sym)))
+ ,@body)
+ (advice-remove #'jsonrpc--log-event ',log-event-ad-sym))))
+
+(cl-defmacro eglot--wait-for ((events-sym &optional (timeout 1) message) args &body body)
+ "Spin until FN match in EVENTS-SYM, flush events after it.
+Pass TIMEOUT to `eglot--with-timeout'."
+ (declare (indent 2) (debug (sexp sexp sexp &rest form)))
+ `(eglot--with-timeout '(,timeout ,(or message
+ (format "waiting for:\n%s" (pp-to-string body))))
+ (let ((event
+ (cl-loop thereis (cl-loop for json in ,events-sym
+ for method = (plist-get json :method)
+ when (keywordp method)
+ do (plist-put json :method
+ (substring
+ (symbol-name method)
+ 1))
+ when (funcall
+ (jsonrpc-lambda ,args ,@body) json)
+ return (cons json before)
+ collect json into before)
+ for i from 0
+ when (zerop (mod i 5))
+ ;; do (eglot--message "still struggling to find in %s"
+ ;; ,events-sym)
+ do
+ ;; `read-event' is essential to have the file
+ ;; watchers come through.
+ (read-event "[eglot] Waiting a bit..." nil 0.1)
+ (accept-process-output nil 0.1))))
+ (setq ,events-sym (cdr event))
+ (eglot--message "Event detected:\n%s"
+ (pp-to-string (car event))))))
+
+;; `rust-mode' is not a part of Emacs, so we define these two shims
+;; which should be more than enough for testing.
+(unless (functionp 'rust-mode)
+ (define-derived-mode rust-mode prog-mode "Rust")
+ (add-to-list 'auto-mode-alist '("\\.rs\\'" . rust-mode)))
+
+;; `typescript-mode' is not a part of Emacs, so we define these two
+;; shims which should be more than enough for testing.
+(unless (functionp 'typescript-mode)
+ (define-derived-mode typescript-mode prog-mode "TypeScript")
+ (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode)))
+
+(defun eglot--tests-connect (&optional timeout)
+ (let* ((timeout (or timeout 10))
+ (eglot-sync-connect t)
+ (eglot-connect-timeout timeout))
+ (apply #'eglot--connect (eglot--guess-contact))))
+
+(defun eglot--simulate-key-event (char)
+ "Like (execute-kbd-macro (vector char)), but with `call-interactively'."
+ ;; Also, this is a bit similar to what electric-tests.el does.
+ (setq last-input-event char)
+ (setq last-command-event char)
+ (call-interactively (key-binding (vector char))))
+
+
+;;; Unit tests
+
+(ert-deftest eglot-test-eclipse-connect ()
+ "Connect to eclipse.jdt.ls server."
+ (skip-unless (executable-find "jdtls"))
+ (eglot--with-fixture
+ '(("project/src/main/java/foo" . (("Main.java" . "")))
+ ("project/.git/" . nil))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/src/main/java/foo/Main.java")
+ (eglot--sniffing (:server-notifications s-notifs)
+ (should (eglot--tests-connect 20))
+ (eglot--wait-for (s-notifs 10)
+ (&key _id method &allow-other-keys)
+ (string= method "language/status"))))))
+
+(defun eglot-tests--auto-detect-running-server-1 ()
+ (let (server)
+ (eglot--with-fixture
+ `(("project" . (("coiso.c" . "bla")
+ ("merdix.c" . "bla")))
+ ("anotherproject" . (("cena.c" . "bla"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/coiso.c")
+ (should (setq server (eglot--tests-connect)))
+ (should (eglot-current-server)))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/merdix.c")
+ (should (eglot-current-server))
+ (should (eq (eglot-current-server) server)))
+ (with-current-buffer
+ (eglot--find-file-noselect "anotherproject/cena.c")
+ (should-error (eglot--current-server-or-lose))))))
+
+(ert-deftest eglot-test-auto-detect-running-server ()
+ "Visit a file and \\[eglot], then visit a neighbor."
+ (skip-unless (executable-find "clangd"))
+ (eglot-tests--auto-detect-running-server-1))
+
+(ert-deftest eglot-test-auto-shutdown ()
+ "Visit a file and \\[eglot], then kill buffer."
+ (skip-unless (executable-find "clangd"))
+ (let (server
+ buffer)
+ (eglot--with-fixture
+ `(("project" . (("thingy.c" . "int main() {return 0;}"))))
+ (with-current-buffer
+ (setq buffer (eglot--find-file-noselect "project/thingy.c"))
+ (should (setq server (eglot--tests-connect)))
+ (should (eglot-current-server))
+ (let ((eglot-autoshutdown nil)) (kill-buffer buffer))
+ (should (jsonrpc-running-p server))
+ ;; re-find file...
+ (setq buffer (eglot--find-file-noselect (buffer-file-name buffer)))
+ ;; ;; but now kill it with `eglot-autoshutdown' set to t
+ (let ((eglot-autoshutdown t)) (kill-buffer buffer))
+ (should (not (jsonrpc-running-p server)))))))
+
+(ert-deftest eglot-test-auto-reconnect ()
+ "Start a server. Kill it. Watch it reconnect."
+ (skip-unless (executable-find "clangd"))
+ (let (server (eglot-autoreconnect 1))
+ (eglot--with-fixture
+ `(("project" . (("thingy.c" . "bla")
+ ("thingy2.c" . "bla"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/thingy.c")
+ (should (setq server (eglot--tests-connect)))
+ ;; In 1.2 seconds > `eglot-autoreconnect' kill servers. We
+ ;; should have a automatic reconnection.
+ (run-with-timer 1.2 nil (lambda () (delete-process
+ (jsonrpc--process server))))
+ (while (jsonrpc-running-p server) (accept-process-output nil 0.5))
+ (should (eglot-current-server))
+ ;; Now try again too quickly
+ (setq server (eglot-current-server))
+ (let ((proc (jsonrpc--process server)))
+ (run-with-timer 0.5 nil (lambda () (delete-process proc)))
+ (while (process-live-p proc) (accept-process-output nil 0.5)))
+ (should (not (eglot-current-server)))))))
+
+(ert-deftest eglot-test-rust-analyzer-watches-files ()
+ "Start rust-analyzer. Notify it when a critical file changes."
+ (skip-unless (executable-find "rust-analyzer"))
+ (skip-unless (executable-find "cargo"))
+ (let ((eglot-autoreconnect 1))
+ (eglot--with-fixture
+ '(("watch-project" . (("coiso.rs" . "bla")
+ ("merdix.rs" . "bla"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "watch-project/coiso.rs")
+ (should (zerop (shell-command "cargo init")))
+ (eglot--sniffing (
+ :server-requests s-requests
+ :client-notifications c-notifs
+ :client-replies c-replies
+ )
+ (should (eglot--tests-connect))
+ (let (register-id)
+ (eglot--wait-for (s-requests 1)
+ (&key id method &allow-other-keys)
+ (setq register-id id)
+ (string= method "client/registerCapability"))
+ (eglot--wait-for (c-replies 1)
+ (&key id error &allow-other-keys)
+ (and (eq id register-id) (null error))))
+ (delete-file "Cargo.toml")
+ (eglot--wait-for
+ (c-notifs 3 "waiting for didChangeWatchedFiles notification")
+ (&key method params &allow-other-keys)
+ (and (string= method "workspace/didChangeWatchedFiles")
+ (cl-destructuring-bind (&key uri type)
+ (elt (plist-get params :changes) 0)
+ (and (string= (eglot--path-to-uri "Cargo.toml") uri)
+ (= type 3))))))))))
+
+(ert-deftest eglot-test-basic-diagnostics ()
+ "Test basic diagnostics."
+ (skip-unless (executable-find "clangd"))
+ (eglot--with-fixture
+ `(("diag-project" .
+ (("main.c" . "int main(){froat a = 42.2; return 0;}"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "diag-project/main.c")
+ (eglot--sniffing (:server-notifications s-notifs)
+ (eglot--tests-connect)
+ (eglot--wait-for (s-notifs 2)
+ (&key _id method &allow-other-keys)
+ (string= method "textDocument/publishDiagnostics"))
+ (flymake-start)
+ (goto-char (point-min))
+ (flymake-goto-next-error 1 '() t)
+ (should (eq 'flymake-error (face-at-point)))))))
+
+(ert-deftest eglot-test-diagnostic-tags-unnecessary-code ()
+ "Test rendering of diagnostics tagged \"unnecessary\"."
+ (skip-unless (executable-find "rust-analyzer"))
+ (skip-unless (executable-find "cargo"))
+ (eglot--with-fixture
+ '(("diagnostic-tag-project" .
+ (("main.rs" .
+ "fn main() -> () { let test=3; }"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "diagnostic-tag-project/main.rs")
+ (let ((eglot-server-programs '((rust-mode . ("rust-analyzer")))))
+ (should (zerop (shell-command "cargo init")))
+ (eglot--sniffing (:server-notifications s-notifs)
+ (eglot--tests-connect)
+ (eglot--wait-for (s-notifs 10)
+ (&key _id method &allow-other-keys)
+ (string= method "textDocument/publishDiagnostics"))
+ (flymake-start)
+ (goto-char (point-min))
+ (flymake-goto-next-error 1 '() t)
+ (should (eq 'eglot-diagnostic-tag-unnecessary-face (face-at-point))))))))
+
+(defun eglot--eldoc-on-demand ()
+ ;; Trick Eldoc 1.1.0 into accepting on-demand calls.
+ (eldoc t))
+
+(defun eglot--tests-force-full-eldoc ()
+ ;; FIXME: This uses some Eldoc implementation defatils.
+ (when (buffer-live-p eldoc--doc-buffer)
+ (with-current-buffer eldoc--doc-buffer
+ (let ((inhibit-read-only t))
+ (erase-buffer))))
+ (eglot--eldoc-on-demand)
+ (cl-loop
+ repeat 10
+ for retval = (and (buffer-live-p eldoc--doc-buffer)
+ (with-current-buffer eldoc--doc-buffer
+ (let ((bs (buffer-string)))
+ (unless (zerop (length bs)) bs))))
+ when retval return retval
+ do (sit-for 0.5)
+ finally (error "eglot--tests-force-full-eldoc didn't deliver")))
+
+(ert-deftest eglot-test-rust-analyzer-hover-after-edit ()
+ "Hover and highlightChanges."
+ (skip-unless (executable-find "rust-analyzer"))
+ (skip-unless (executable-find "cargo"))
+ (eglot--with-fixture
+ '(("hover-project" .
+ (("main.rs" .
+ "fn test() -> i32 { let test=3; return te; }"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "hover-project/main.rs")
+ (should (zerop (shell-command "cargo init")))
+ (eglot--sniffing (
+ :server-replies s-replies
+ :client-requests c-reqs
+ )
+ (eglot--tests-connect)
+ (goto-char (point-min))
+ (search-forward "return te")
+ (insert "st")
+ (progn
+ ;; simulate these two which don't happen when buffer isn't
+ ;; visible in a window.
+ (eglot--signal-textDocument/didChange)
+ (eglot--eldoc-on-demand))
+ (let (pending-id)
+ (eglot--wait-for (c-reqs 2)
+ (&key id method &allow-other-keys)
+ (setq pending-id id)
+ (string= method "textDocument/documentHighlight"))
+ (eglot--wait-for (s-replies 2)
+ (&key id &allow-other-keys)
+ (eq id pending-id)))))))
+
+(ert-deftest eglot-test-rename-a-symbol ()
+ "Test basic symbol renaming."
+ (skip-unless (executable-find "clangd"))
+ (eglot--with-fixture
+ `(("rename-project"
+ . (("main.c" .
+ "int foo() {return 42;} int main() {return foo();}"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "rename-project/main.c")
+ (eglot--tests-connect)
+ (goto-char (point-min)) (search-forward "foo")
+ (eglot-rename "bar")
+ (should (equal (buffer-string)
+ "int bar() {return 42;} int main() {return bar();}")))))
+
+(ert-deftest eglot-test-basic-completions ()
+ "Test basic autocompletion in a python LSP."
+ (skip-unless (executable-find "pylsp"))
+ (eglot--with-fixture
+ `(("project" . (("something.py" . "import sys\nsys.exi"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/something.py")
+ (should (eglot--tests-connect))
+ (goto-char (point-max))
+ (completion-at-point)
+ (should (looking-back "sys.exit")))))
+
+(ert-deftest eglot-test-non-unique-completions ()
+ "Test completion resulting in 'Complete, but not unique'."
+ (skip-unless (executable-find "pylsp"))
+ (eglot--with-fixture
+ '(("project" . (("something.py" . "foo=1\nfoobar=2\nfoo"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/something.py")
+ (should (eglot--tests-connect))
+ (goto-char (point-max))
+ (completion-at-point))
+ ;; FIXME: `current-message' doesn't work here :-(
+ (with-current-buffer (messages-buffer)
+ (save-excursion
+ (goto-char (point-max))
+ (forward-line -1)
+ (should (looking-at "Complete, but not unique"))))))
+
+(ert-deftest eglot-test-basic-xref ()
+ "Test basic xref functionality in a python LSP."
+ (skip-unless (executable-find "pylsp"))
+ (eglot--with-fixture
+ `(("project" . (("something.py" . "def foo(): pass\ndef bar(): foo()"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/something.py")
+ (should (eglot--tests-connect))
+ (search-forward "bar(): f")
+ (call-interactively 'xref-find-definitions)
+ (should (looking-at "foo(): pass")))))
+
+(defvar eglot--test-python-buffer
+ "\
+def foobarquux(a, b, c=True): pass
+def foobazquuz(d, e, f): pass
+")
+
+(declare-function yas-minor-mode nil)
+
+(ert-deftest eglot-test-snippet-completions ()
+ "Test simple snippet completion in a python LSP."
+ (skip-unless (and (executable-find "pylsp")
+ (functionp 'yas-minor-mode)))
+ (eglot--with-fixture
+ `(("project" . (("something.py" . ,eglot--test-python-buffer))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/something.py")
+ (yas-minor-mode 1)
+ (let ((eglot-workspace-configuration
+ `((:pylsp . (:plugins (:jedi_completion (:include_params t)))))))
+ (should (eglot--tests-connect)))
+ (goto-char (point-max))
+ (insert "foobar")
+ (completion-at-point)
+ (should (looking-back "foobarquux("))
+ (should (looking-at "a, b)")))))
+
+(defvar company-candidates)
+(declare-function company-mode nil)
+(declare-function company-complete nil)
+
+(ert-deftest eglot-test-snippet-completions-with-company ()
+ "Test simple snippet completion in a python LSP."
+ (skip-unless (and (executable-find "pylsp")
+ (functionp 'yas-minor-mode)
+ (functionp 'company-complete)))
+ (eglot--with-fixture
+ `(("project" . (("something.py" . ,eglot--test-python-buffer))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/something.py")
+ (yas-minor-mode 1)
+ (let ((eglot-workspace-configuration
+ `((:pylsp . (:plugins (:jedi_completion (:include_params t)))))))
+ (should (eglot--tests-connect)))
+ (goto-char (point-max))
+ (insert "foo")
+ (company-mode)
+ (company-complete)
+ (should (looking-back "fooba"))
+ (should (= 2 (length company-candidates)))
+ ;; this last one is brittle, since there it is possible that
+ ;; pylsp will change the representation of this candidate
+ (should (member "foobazquuz(d, e, f)" company-candidates)))))
+
+(ert-deftest eglot-test-eldoc-after-completions ()
+ "Test documentation echo in a python LSP."
+ (skip-unless (executable-find "pylsp"))
+ (eglot--with-fixture
+ `(("project" . (("something.py" . "import sys\nsys.exi"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/something.py")
+ (should (eglot--tests-connect))
+ (goto-char (point-max))
+ (completion-at-point)
+ (should (looking-back "sys.exit"))
+ (should (string-match "^exit" (eglot--tests-force-full-eldoc))))))
+
+(ert-deftest eglot-test-multiline-eldoc ()
+ "Test if suitable amount of lines of hover info are shown."
+ (skip-unless (executable-find "pylsp"))
+ (eglot--with-fixture
+ `(("project" . (("hover-first.py" . "from datetime import datetime"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/hover-first.py")
+ (should (eglot--tests-connect))
+ (goto-char (point-max))
+ ;; one-line
+ (let* ((eldoc-echo-area-use-multiline-p t)
+ (captured-message (eglot--tests-force-full-eldoc)))
+ (should (string-match "datetim" captured-message))
+ (should (cl-find ?\n captured-message))))))
+
+(ert-deftest eglot-test-single-line-eldoc ()
+ "Test if suitable amount of lines of hover info are shown."
+ (skip-unless (executable-find "pylsp"))
+ (eglot--with-fixture
+ `(("project" . (("hover-first.py" . "from datetime import datetime"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/hover-first.py")
+ (should (eglot--tests-connect))
+ (goto-char (point-max))
+ ;; one-line
+ (let* ((eldoc-echo-area-use-multiline-p nil)
+ (captured-message (eglot--tests-force-full-eldoc)))
+ (should (string-match "datetim" captured-message))
+ (should (not (cl-find ?\n eldoc-last-message)))))))
+
+(ert-deftest eglot-test-python-autopep-formatting ()
+ "Test formatting in the pylsp python LSP.
+pylsp prefers autopep over yafp, despite its README stating the contrary."
+ ;; Beware, default autopep rules can change over time, which may
+ ;; affect this test.
+ (skip-unless (and (executable-find "pylsp")
+ (executable-find "autopep8")))
+ (eglot--with-fixture
+ `(("project" . (("something.py" . "def a():pass\n\ndef b():pass"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/something.py")
+ (should (eglot--tests-connect))
+ ;; Try to format just the second line
+ (search-forward "b():pa")
+ (eglot-format (line-beginning-position) (line-end-position))
+ (should (looking-at "ss"))
+ (should
+ (or (string= (buffer-string) "def a():pass\n\n\ndef b(): pass\n")
+ ;; autopep8 2.0.0 (pycodestyle: 2.9.1)
+ (string= (buffer-string) "def a():pass\n\ndef b(): pass")))
+ ;; now format the whole buffer
+ (eglot-format-buffer)
+ (should
+ (string= (buffer-string) "def a(): pass\n\n\ndef b(): pass\n")))))
+
+(ert-deftest eglot-test-python-yapf-formatting ()
+ "Test formatting in the pylsp python LSP."
+ (skip-unless (and (executable-find "pylsp")
+ (not (executable-find "autopep8"))
+ (or (executable-find "yapf")
+ (executable-find "yapf3"))))
+ (eglot--with-fixture
+ `(("project" . (("something.py" . "def a():pass\ndef b():pass"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/something.py")
+ (should (eglot--tests-connect))
+ ;; Try to format just the second line
+ (search-forward "b():pa")
+ (eglot-format (line-beginning-position) (line-end-position))
+ (should (looking-at "ss"))
+ (should
+ (string= (buffer-string) "def a():pass\n\n\ndef b():\n pass\n"))
+ ;; now format the whole buffer
+ (eglot-format-buffer)
+ (should
+ (string= (buffer-string) "def a():\n pass\n\n\ndef b():\n pass\n")))))
+
+(ert-deftest eglot-test-rust-on-type-formatting ()
+ "Test textDocument/onTypeFormatting against rust-analyzer."
+ (skip-unless (executable-find "rust-analyzer"))
+ (skip-unless (executable-find "cargo"))
+ (eglot--with-fixture
+ '(("on-type-formatting-project" .
+ (("main.rs" .
+ "fn main() -> () {\n foo\n .bar()\n "))))
+ (with-current-buffer
+ (eglot--find-file-noselect "on-type-formatting-project/main.rs")
+ (let ((eglot-server-programs '((rust-mode . ("rust-analyzer")))))
+ (should (zerop (shell-command "cargo init")))
+ (eglot--sniffing (:server-notifications s-notifs)
+ (should (eglot--tests-connect))
+ (eglot--wait-for (s-notifs 10) (&key method &allow-other-keys)
+ (string= method "textDocument/publishDiagnostics")))
+ (goto-char (point-max))
+ (eglot--simulate-key-event ?.)
+ (should (looking-back "^ \\."))))))
+
+(ert-deftest eglot-test-javascript-basic ()
+ "Test basic autocompletion in a JavaScript LSP."
+ (skip-unless (and (executable-find "typescript-language-server")
+ (executable-find "tsserver")))
+ (eglot--with-fixture
+ '(("project" . (("hello.js" . "console.log('Hello world!');"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/hello.js")
+ (let ((eglot-server-programs
+ '((js-mode . ("typescript-language-server" "--stdio")))))
+ (goto-char (point-max))
+ (eglot--sniffing (:server-notifications
+ s-notifs
+ :client-notifications
+ c-notifs)
+ (should (eglot--tests-connect))
+ (eglot--wait-for (s-notifs 2) (&key method &allow-other-keys)
+ (string= method "textDocument/publishDiagnostics"))
+ (should (not (eq 'flymake-error (face-at-point))))
+ (insert "{")
+ (eglot--signal-textDocument/didChange)
+ (eglot--wait-for (c-notifs 1) (&key method &allow-other-keys)
+ (string= method "textDocument/didChange"))
+ (eglot--wait-for (s-notifs 2) (&key params method &allow-other-keys)
+ (and (string= method "textDocument/publishDiagnostics")
+ (cl-destructuring-bind (&key _uri diagnostics) params
+ (cl-find-if (jsonrpc-lambda (&key severity &allow-other-keys)
+ (= severity 1))
+ diagnostics)))))))))
+
+(ert-deftest eglot-test-project-wide-diagnostics-typescript ()
+ "Test diagnostics through multiple files in a TypeScript LSP."
+ (skip-unless (and (executable-find "typescript-language-server")
+ (executable-find "tsserver")))
+ (eglot--with-fixture
+ '(("project" . (("hello.ts" . "const thing = 5;\nexport { thin }")
+ ("hello2.ts" . "import { thing } from './hello'"))))
+ (eglot--make-file-or-dir '(".git"))
+ (let ((eglot-server-programs
+ '((typescript-mode . ("typescript-language-server" "--stdio")))))
+ ;; Check both files because typescript-language-server doesn't
+ ;; report all errors on startup, at least not with such a simple
+ ;; setup.
+ (with-current-buffer (eglot--find-file-noselect "project/hello2.ts")
+ (eglot--sniffing (:server-notifications s-notifs)
+ (eglot--tests-connect)
+ (flymake-start)
+ (eglot--wait-for (s-notifs 10)
+ (&key _id method &allow-other-keys)
+ (string= method "textDocument/publishDiagnostics"))
+ (should (= 2 (length (flymake--project-diagnostics)))))
+ (with-current-buffer (eglot--find-file-noselect "hello.ts")
+ (eglot--sniffing (:server-notifications s-notifs)
+ (flymake-start)
+ (eglot--wait-for (s-notifs 10)
+ (&key _id method &allow-other-keys)
+ (string= method "textDocument/publishDiagnostics"))
+ (should (= 4 (length (flymake--project-diagnostics))))))))))
+
+(ert-deftest eglot-test-project-wide-diagnostics-rust-analyzer ()
+ "Test diagnostics through multiple files in a TypeScript LSP."
+ (skip-unless (executable-find "rust-analyzer"))
+ (skip-unless (executable-find "cargo"))
+ (eglot--with-fixture
+ '(("project" .
+ (("main.rs" .
+ "fn main() -> () { let test=3; }")
+ ("other-file.rs" .
+ "fn foo() -> () { let hi=3; }"))))
+ (eglot--make-file-or-dir '(".git"))
+ (let ((eglot-server-programs '((rust-mode . ("rust-analyzer")))))
+ ;; Open other-file, and see diagnostics arrive for main.rs
+ (with-current-buffer (eglot--find-file-noselect "project/other-file.rs")
+ (should (zerop (shell-command "cargo init")))
+ (eglot--sniffing (:server-notifications s-notifs)
+ (eglot--tests-connect)
+ (flymake-start)
+ (eglot--wait-for (s-notifs 10)
+ (&key _id method &allow-other-keys)
+ (string= method "textDocument/publishDiagnostics"))
+ (let ((diags (flymake--project-diagnostics)))
+ (should (= 2 (length diags)))
+ ;; Check that we really get a diagnostic from main.rs, and
+ ;; not from other-file.rs
+ (should (string-suffix-p
+ "main.rs"
+ (flymake-diagnostic-buffer (car diags))))))))))
+
+(ert-deftest eglot-test-json-basic ()
+ "Test basic autocompletion in vscode-json-languageserver."
+ (skip-unless (executable-find "vscode-json-languageserver"))
+ (eglot--with-fixture
+ '(("project" .
+ (("p.json" . "{\"foo.b")
+ ("s.json" . "{\"properties\":{\"foo.bar\":{\"default\":\"fb\"}}}")
+ (".git" . nil))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/p.json")
+ (yas-minor-mode)
+ (goto-char 2)
+ (insert "\"$schema\": \"file://"
+ (file-name-directory buffer-file-name) "s.json\",")
+ (let ((eglot-server-programs
+ '((js-mode . ("vscode-json-languageserver" "--stdio")))))
+ (goto-char (point-max))
+ (should (eglot--tests-connect))
+ (completion-at-point)
+ (should (looking-back "\"foo.bar\": \""))
+ (should (looking-at "fb\"$"))))))
+
+(defun eglot-tests--lsp-abiding-column-1 ()
+ (eglot--with-fixture
+ '(("project" .
+ (("foo.c" . "const char write_data[] = u8\"đŸ‚đŸƒđŸ„đŸ…đŸ†đŸˆđŸ‡đŸˆđŸ‰đŸđŸ‹đŸŒđŸđŸđŸđŸŸđŸ đŸ¡đŸ›¤đŸ›²\";"))))
+ (let ((eglot-server-programs
+ '((c-mode . ("clangd")))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/foo.c")
+ (setq-local eglot-move-to-column-function #'eglot-move-to-lsp-abiding-column)
+ (setq-local eglot-current-column-function #'eglot-lsp-abiding-column)
+ (eglot--sniffing (:client-notifications c-notifs)
+ (eglot--tests-connect)
+ (end-of-line)
+ (insert "p ")
+ (eglot--signal-textDocument/didChange)
+ (eglot--wait-for (c-notifs 2) (&key params &allow-other-keys)
+ (should (equal 71 (cadddr (cadadr (aref (cadddr params) 0))))))
+ (beginning-of-line)
+ (should (eq eglot-move-to-column-function #'eglot-move-to-lsp-abiding-column))
+ (funcall eglot-move-to-column-function 71)
+ (should (looking-at "p")))))))
+
+(ert-deftest eglot-test-lsp-abiding-column ()
+ "Test basic `eglot-lsp-abiding-column' and `eglot-move-to-lsp-abiding-column'."
+ (skip-unless (executable-find "clangd"))
+ (eglot-tests--lsp-abiding-column-1))
+
+(ert-deftest eglot-test-ensure ()
+ "Test basic `eglot-ensure' functionality."
+ (skip-unless (executable-find "clangd"))
+ (eglot--with-fixture
+ `(("project" . (("foo.c" . "int foo() {return 42;}")
+ ("bar.c" . "int bar() {return 42;}")))
+ (c-mode-hook (eglot-ensure)))
+ (let (server)
+ ;; need `ert-simulate-command' because `eglot-ensure'
+ ;; relies on `post-command-hook'.
+ (with-current-buffer
+ (ert-simulate-command
+ '(find-file "project/foo.c"))
+ ;; FIXME: This test fails without this sleep on my machine.
+ ;; Figure out why and solve this more cleanly.
+ (sleep-for 0.1)
+ (should (setq server (eglot-current-server))))
+ (with-current-buffer
+ (ert-simulate-command
+ '(find-file "project/bar.c"))
+ (should (eq server (eglot-current-server)))))))
+
+(ert-deftest eglot-test-slow-sync-connection-wait ()
+ "Connect with `eglot-sync-connect' set to t."
+ (skip-unless (executable-find "clangd"))
+ (eglot--with-fixture
+ `(("project" . (("something.c" . "int foo() {return 42;}"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/something.c")
+ (let ((eglot-sync-connect t)
+ (eglot-server-programs
+ `((c-mode . ("sh" "-c" "sleep 1 && clangd")))))
+ (should (eglot--tests-connect 3))))))
+
+(ert-deftest eglot-test-slow-sync-connection-intime ()
+ "Connect synchronously with `eglot-sync-connect' set to 2."
+ (skip-unless (executable-find "clangd"))
+ (eglot--with-fixture
+ `(("project" . (("something.c" . "int foo() {return 42;}"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/something.c")
+ (let ((eglot-sync-connect 2)
+ (eglot-server-programs
+ `((c-mode . ("sh" "-c" "sleep 1 && clangd")))))
+ (should (eglot--tests-connect 3))))))
+
+(ert-deftest eglot-test-slow-async-connection ()
+ "Connect asynchronously with `eglot-sync-connect' set to 2."
+ (skip-unless (executable-find "clangd"))
+ (eglot--with-fixture
+ `(("project" . (("something.c" . "int foo() {return 42;}"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/something.c")
+ (let ((eglot-sync-connect 1)
+ (eglot-server-programs
+ `((c-mode . ("sh" "-c" "sleep 2 && clangd")))))
+ (should-not (apply #'eglot--connect (eglot--guess-contact)))
+ (eglot--with-timeout 3
+ (while (not (eglot-current-server))
+ (accept-process-output nil 0.2))
+ (should (eglot-current-server)))))))
+
+(ert-deftest eglot-test-slow-sync-timeout ()
+ "Failed attempt at connection synchronously."
+ (skip-unless (executable-find "clangd"))
+ (eglot--with-fixture
+ `(("project" . (("something.c" . "int foo() {return 42;}"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/something.c")
+ (let ((eglot-sync-connect t)
+ (eglot-connect-timeout 1)
+ (eglot-server-programs
+ `((c-mode . ("sh" "-c" "sleep 2 && clangd")))))
+ (should-error (apply #'eglot--connect (eglot--guess-contact)))))))
+
+(ert-deftest eglot-test-capabilities ()
+ "Unit test for `eglot--server-capable'."
+ (cl-letf (((symbol-function 'eglot--capabilities)
+ (lambda (_dummy)
+ ;; test data lifted from Golangserver example at
+ ;; https://github.com/joaotavora/eglot/pull/74
+ (list :textDocumentSync 2 :hoverProvider t
+ :completionProvider '(:triggerCharacters ["."])
+ :signatureHelpProvider '(:triggerCharacters ["(" ","])
+ :definitionProvider t :typeDefinitionProvider t
+ :referencesProvider t :documentSymbolProvider t
+ :workspaceSymbolProvider t :implementationProvider t
+ :documentFormattingProvider t :xworkspaceReferencesProvider t
+ :xdefinitionProvider t :xworkspaceSymbolByProperties t)))
+ ((symbol-function 'eglot--current-server-or-lose)
+ (lambda () nil)))
+ (should (eql 2 (eglot--server-capable :textDocumentSync)))
+ (should (eglot--server-capable :completionProvider :triggerCharacters))
+ (should (equal '(:triggerCharacters ["."]) (eglot--server-capable :completionProvider)))
+ (should-not (eglot--server-capable :foobarbaz))
+ (should-not (eglot--server-capable :textDocumentSync :foobarbaz))))
+
+(defmacro eglot--without-interface-warnings (&rest body)
+ (let ((eglot-strict-mode nil))
+ (macroexpand-all (macroexp-progn body) macroexpand-all-environment)))
+
+(ert-deftest eglot-test-strict-interfaces ()
+ (let ((eglot--lsp-interface-alist
+ `((FooObject . ((:foo :bar) (:baz))))))
+ (eglot--without-interface-warnings
+ (should
+ (equal '("foo" . "bar")
+ (let ((eglot-strict-mode nil))
+ (eglot--dbind (foo bar) `(:foo "foo" :bar "bar")
+ (cons foo bar)))))
+ (should-error
+ (let ((eglot-strict-mode '(disallow-non-standard-keys)))
+ (eglot--dbind (foo bar) `(:foo "foo" :bar "bar" :fotrix bargh)
+ (cons foo bar))))
+ (should
+ (equal '("foo" . "bar")
+ (let ((eglot-strict-mode nil))
+ (eglot--dbind (foo bar) `(:foo "foo" :bar "bar" :fotrix bargh)
+ (cons foo bar)))))
+ (should-error
+ (let ((eglot-strict-mode '(disallow-non-standard-keys)))
+ (eglot--dbind ((FooObject) foo bar) `(:foo "foo" :bar "bar" :fotrix bargh)
+ (cons foo bar))))
+ (should
+ (equal '("foo" . "bar")
+ (let ((eglot-strict-mode '(disallow-non-standard-keys)))
+ (eglot--dbind ((FooObject) foo bar) `(:foo "foo" :bar "bar" :baz bargh)
+ (cons foo bar)))))
+ (should
+ (equal '("foo" . nil)
+ (let ((eglot-strict-mode nil))
+ (eglot--dbind ((FooObject) foo bar) `(:foo "foo" :baz bargh)
+ (cons foo bar)))))
+ (should
+ (equal '("foo" . "bar")
+ (let ((eglot-strict-mode '(enforce-required-keys)))
+ (eglot--dbind ((FooObject) foo bar) `(:foo "foo" :bar "bar" :baz bargh)
+ (cons foo bar)))))
+ (should-error
+ (let ((eglot-strict-mode '(enforce-required-keys)))
+ (eglot--dbind ((FooObject) foo bar) `(:foo "foo" :baz bargh)
+ (cons foo bar)))))))
+
+(ert-deftest eglot-test-dcase ()
+ (eglot--without-interface-warnings
+ (let ((eglot--lsp-interface-alist
+ `((FooObject . ((:foo :bar) (:baz)))
+ (CodeAction (:title) (:kind :diagnostics :edit :command))
+ (Command ((:title . string) (:command . string)) (:arguments)))))
+ (should
+ (equal
+ "foo"
+ (eglot--dcase `(:foo "foo" :bar "bar")
+ (((FooObject) foo)
+ foo))))
+ (should
+ (equal
+ (list "foo" '(:title "hey" :command "ho") "some edit")
+ (eglot--dcase '(:title "foo"
+ :command (:title "hey" :command "ho")
+ :edit "some edit")
+ (((Command) _title _command _arguments)
+ (ert-fail "Shouldn't have destructured this object as a Command"))
+ (((CodeAction) title edit command)
+ (list title command edit)))))
+ (should
+ (equal
+ (list "foo" "some command" nil)
+ (eglot--dcase '(:title "foo" :command "some command")
+ (((Command) title command arguments)
+ (list title command arguments))
+ (((CodeAction) _title _edit _command)
+ (ert-fail "Shouldn't have destructured this object as a CodeAction"))))))))
+
+(ert-deftest eglot-test-dcase-issue-452 ()
+ (let ((eglot--lsp-interface-alist
+ `((FooObject . ((:foo :bar) (:baz)))
+ (CodeAction (:title) (:kind :diagnostics :edit :command))
+ (Command ((string . :title) (:command . string)) (:arguments)))))
+ (should
+ (equal
+ (list "foo" '(:command "cmd" :title "alsofoo"))
+ (eglot--dcase '(:title "foo" :command (:command "cmd" :title "alsofoo"))
+ (((Command) _title _command _arguments)
+ (ert-fail "Shouldn't have destructured this object as a Command"))
+ (((CodeAction) title command)
+ (list title command)))))))
+
+(cl-defmacro eglot--guessing-contact ((interactive-sym
+ prompt-args-sym
+ guessed-class-sym guessed-contact-sym
+ &optional guessed-lang-id-sym)
+ &body body)
+ "Guess LSP contact with `eglot--guessing-contact', evaluate BODY.
+
+BODY is evaluated twice, with INTERACTIVE bound to the boolean passed to
+`eglot--guess-contact' each time.
+
+If the user would have been prompted, PROMPT-ARGS-SYM is bound to
+the list of arguments that would have been passed to
+`read-shell-command', else nil. GUESSED-CLASS-SYM,
+GUESSED-CONTACT-SYM and GUESSED-LANG-ID-SYM are bound to the
+useful return values of `eglot--guess-contact'. Unless the
+server program evaluates to \"a-missing-executable.exe\", this
+macro will assume it exists."
+ (declare (indent 1) (debug t))
+ (let ((i-sym (cl-gensym)))
+ `(dolist (,i-sym '(nil t))
+ (let ((,interactive-sym ,i-sym)
+ (buffer-file-name "_")
+ ,@(when prompt-args-sym `((,prompt-args-sym nil))))
+ (cl-letf (((symbol-function 'executable-find)
+ (lambda (name &optional _remote)
+ (unless (string-equal name "a-missing-executable.exe")
+ (format "/totally-mock-bin/%s" name))))
+ ((symbol-function 'read-shell-command)
+ ,(if prompt-args-sym
+ `(lambda (&rest args) (setq ,prompt-args-sym args) "")
+ `(lambda (&rest _dummy) ""))))
+ (cl-destructuring-bind
+ (_ _ ,guessed-class-sym ,guessed-contact-sym
+ ,(or guessed-lang-id-sym '_))
+ (eglot--guess-contact ,i-sym)
+ ,@body))))))
+
+(ert-deftest eglot-test-server-programs-simple-executable ()
+ (let ((eglot-server-programs '((foo-mode "some-executable")))
+ (major-mode 'foo-mode))
+ (eglot--guessing-contact (_ prompt-args guessed-class guessed-contact)
+ (should (not prompt-args))
+ (should (equal guessed-class 'eglot-lsp-server))
+ (should (equal guessed-contact '("some-executable"))))))
+
+(ert-deftest eglot-test-server-programs-simple-missing-executable ()
+ (let ((eglot-server-programs '((foo-mode "a-missing-executable.exe")))
+ (major-mode 'foo-mode))
+ (eglot--guessing-contact (interactive-p prompt-args guessed-class guessed-contact)
+ (should (equal (not prompt-args) (not interactive-p)))
+ (should (equal guessed-class 'eglot-lsp-server))
+ (should (or prompt-args
+ (equal guessed-contact '("a-missing-executable.exe")))))))
+
+(ert-deftest eglot-test-server-programs-executable-multiple-major-modes ()
+ (let ((eglot-server-programs '(((bar-mode foo-mode) "some-executable")))
+ (major-mode 'foo-mode))
+ (eglot--guessing-contact (_ prompt-args guessed-class guessed-contact)
+ (should (not prompt-args))
+ (should (equal guessed-class 'eglot-lsp-server))
+ (should (equal guessed-contact '("some-executable"))))))
+
+(ert-deftest eglot-test-server-programs-executable-with-arg ()
+ (let ((eglot-server-programs '((foo-mode "some-executable" "arg1")))
+ (major-mode 'foo-mode))
+ (eglot--guessing-contact (_ prompt-args guessed-class guessed-contact)
+ (should (not prompt-args))
+ (should (equal guessed-class 'eglot-lsp-server))
+ (should (equal guessed-contact '("some-executable" "arg1"))))))
+
+(ert-deftest eglot-test-server-programs-executable-with-args-and-autoport ()
+ (let ((eglot-server-programs '((foo-mode "some-executable" "arg1"
+ :autoport "arg2")))
+ (major-mode 'foo-mode))
+ (eglot--guessing-contact (_ prompt-args guessed-class guessed-contact)
+ (should (not prompt-args))
+ (should (equal guessed-class 'eglot-lsp-server))
+ (should (equal guessed-contact '("some-executable" "arg1"
+ :autoport "arg2"))))))
+
+(ert-deftest eglot-test-server-programs-host-and-port ()
+ (let ((eglot-server-programs '((foo-mode "somehost.example.com" 7777)))
+ (major-mode 'foo-mode))
+ (eglot--guessing-contact (_ prompt-args guessed-class guessed-contact)
+ (should (not prompt-args))
+ (should (equal guessed-class 'eglot-lsp-server))
+ (should (equal guessed-contact '("somehost.example.com" 7777))))))
+
+(ert-deftest eglot-test-server-programs-host-and-port-and-tcp-args ()
+ (let ((eglot-server-programs '((foo-mode "somehost.example.com" 7777
+ :type network)))
+ (major-mode 'foo-mode))
+ (eglot--guessing-contact (_ prompt-args guessed-class guessed-contact)
+ (should (not prompt-args))
+ (should (equal guessed-class 'eglot-lsp-server))
+ (should (equal guessed-contact '("somehost.example.com" 7777
+ :type network))))))
+
+(ert-deftest eglot-test-server-programs-class-name-and-plist ()
+ (let ((eglot-server-programs '((foo-mode bar-class :init-key init-val)))
+ (major-mode 'foo-mode))
+ (eglot--guessing-contact (_ prompt-args guessed-class guessed-contact)
+ (should (not prompt-args))
+ (should (equal guessed-class 'bar-class))
+ (should (equal guessed-contact '(:init-key init-val))))))
+
+(ert-deftest eglot-test-server-programs-class-name-and-contact-spec ()
+ (let ((eglot-server-programs '((foo-mode bar-class "some-executable" "arg1"
+ :autoport "arg2")))
+ (major-mode 'foo-mode))
+ (eglot--guessing-contact (_ prompt-args guessed-class guessed-contact)
+ (should (not prompt-args))
+ (should (equal guessed-class 'bar-class))
+ (should (equal guessed-contact '("some-executable" "arg1"
+ :autoport "arg2"))))))
+
+(ert-deftest eglot-test-server-programs-function ()
+ (let ((eglot-server-programs '((foo-mode . (lambda (&optional _)
+ '("some-executable")))))
+ (major-mode 'foo-mode))
+ (eglot--guessing-contact (_ prompt-args guessed-class guessed-contact)
+ (should (not prompt-args))
+ (should (equal guessed-class 'eglot-lsp-server))
+ (should (equal guessed-contact '("some-executable"))))))
+
+(ert-deftest eglot-test-server-programs-guess-lang ()
+ (let ((major-mode 'foo-mode))
+ (let ((eglot-server-programs '((foo-mode . ("prog-executable")))))
+ (eglot--guessing-contact (_ nil _ _ guessed-lang)
+ (should (equal guessed-lang "foo"))))
+ (let ((eglot-server-programs '(((foo-mode :language-id "bar")
+ . ("prog-executable")))))
+ (eglot--guessing-contact (_ nil _ _ guessed-lang)
+ (should (equal guessed-lang "bar"))))
+ (let ((eglot-server-programs '(((baz-mode (foo-mode :language-id "bar"))
+ . ("prog-executable")))))
+ (eglot--guessing-contact (_ nil _ _ guessed-lang)
+ (should (equal guessed-lang "bar"))))))
+
+(defun eglot--glob-match (glob str)
+ (funcall (eglot--glob-compile glob t t) str))
+
+(ert-deftest eglot-test-glob-test ()
+ (should (eglot--glob-match "foo/**/baz" "foo/bar/baz"))
+ (should (eglot--glob-match "foo/**/baz" "foo/baz"))
+ (should-not (eglot--glob-match "foo/**/baz" "foo/bar"))
+ (should (eglot--glob-match "foo/**/baz/**/quuz" "foo/baz/foo/quuz"))
+ (should (eglot--glob-match "foo/**/baz/**/quuz" "foo/foo/foo/baz/foo/quuz"))
+ (should-not (eglot--glob-match "foo/**/baz/**/quuz" "foo/foo/foo/ding/foo/quuz"))
+ (should (eglot--glob-match "*.js" "foo.js"))
+ (should-not (eglot--glob-match "*.js" "foo.jsx"))
+ (should (eglot--glob-match "foo/**/*.js" "foo/bar/baz/foo.js"))
+ (should-not (eglot--glob-match "foo/**/*.js" "foo/bar/baz/foo.jsx"))
+ (should (eglot--glob-match "*.{js,ts}" "foo.js"))
+ (should-not (eglot--glob-match "*.{js,ts}" "foo.xs"))
+ (should (eglot--glob-match "foo/**/*.{js,ts}" "foo/bar/baz/foo.ts"))
+ (should (eglot--glob-match "foo/**/*.{js,ts}x" "foo/bar/baz/foo.tsx"))
+ (should (eglot--glob-match "?oo.js" "foo.js"))
+ (should (eglot--glob-match "foo/**/*.{js,ts}?" "foo/bar/baz/foo.tsz"))
+ (should (eglot--glob-match "foo/**/*.{js,ts}?" "foo/bar/baz/foo.tsz"))
+ (should (eglot--glob-match "example.[!0-9]" "example.a"))
+ (should-not (eglot--glob-match "example.[!0-9]" "example.0"))
+ (should (eglot--glob-match "example.[0-9]" "example.0"))
+ (should-not (eglot--glob-match "example.[0-9]" "example.a"))
+ (should (eglot--glob-match "**/bar/" "foo/bar/"))
+ (should-not (eglot--glob-match "foo.hs" "fooxhs"))
+
+ ;; Some more tests
+ (should (eglot--glob-match "**/.*" ".git"))
+ (should (eglot--glob-match ".?" ".o"))
+ (should (eglot--glob-match "**/.*" ".hidden.txt"))
+ (should (eglot--glob-match "**/.*" "path/.git"))
+ (should (eglot--glob-match "**/.*" "path/.hidden.txt"))
+ (should (eglot--glob-match "**/node_modules/**" "node_modules/"))
+ (should (eglot--glob-match "{foo,bar}/**" "foo/test"))
+ (should (eglot--glob-match "{foo,bar}/**" "bar/test"))
+ (should (eglot--glob-match "some/**/*" "some/foo.js"))
+ (should (eglot--glob-match "some/**/*" "some/folder/foo.js"))
+
+ ;; VSCode supposedly supports this, not sure if good idea.
+ ;;
+ ;; (should (eglot--glob-match "**/node_modules/**" "node_modules"))
+ ;; (should (eglot--glob-match "{foo,bar}/**" "foo"))
+ ;; (should (eglot--glob-match "{foo,bar}/**" "bar"))
+
+ ;; VSCode also supports nested blobs. Do we care?
+ ;;
+ ;; (should (eglot--glob-match "{**/*.d.ts,**/*.js}" "/testing/foo.js"))
+ ;; (should (eglot--glob-match "{**/*.d.ts,**/*.js}" "testing/foo.d.ts"))
+ ;; (should (eglot--glob-match "{**/*.d.ts,**/*.js,foo.[0-9]}" "foo.5"))
+ ;; (should (eglot--glob-match "prefix/{**/*.d.ts,**/*.js,foo.[0-9]}" "prefix/foo.8"))
+ )
+
+(defvar tramp-histfile-override)
+(defun eglot--call-with-tramp-test (fn)
+ ;; Set up a Tramp method that’s just a shell so the remote host is
+ ;; really just the local host.
+ (let* ((tramp-remote-path (cons 'tramp-own-remote-path tramp-remote-path))
+ (tramp-histfile-override t)
+ (tramp-verbose 1)
+ (temporary-file-directory ert-remote-temporary-file-directory)
+ (default-directory temporary-file-directory))
+ ;; We must check the remote LSP server. So far, just "clangd" is used.
+ (unless (executable-find "clangd" 'remote)
+ (ert-skip "Remote clangd not found"))
+ (funcall fn)))
+
+(ert-deftest eglot-test-tramp-test ()
+ "Ensure LSP servers can be used over TRAMP."
+ :tags '(:expensive-test)
+ (eglot--call-with-tramp-test #'eglot-tests--auto-detect-running-server-1))
+
+(ert-deftest eglot-test-tramp-test-2 ()
+ "Ensure LSP servers can be used over TRAMP."
+ :tags '(:expensive-test)
+ (eglot--call-with-tramp-test #'eglot-tests--lsp-abiding-column-1))
+
+(ert-deftest eglot-test-path-to-uri-windows ()
+ (skip-unless (eq system-type 'windows-nt))
+ (should (string-prefix-p "file:///"
+ (eglot--path-to-uri "c:/Users/Foo/bar.lisp")))
+ (should (string-suffix-p "c%3A/Users/Foo/bar.lisp"
+ (eglot--path-to-uri "c:/Users/Foo/bar.lisp"))))
+
+(ert-deftest eglot-test-same-server-multi-mode ()
+ "Check single LSP instance manages multiple modes in same project."
+ (skip-unless (executable-find "clangd"))
+ (let (server)
+ (eglot--with-fixture
+ `(("project" . (("foo.cpp" .
+ "#include \"foolib.h\"
+ int main() { return foo(); }")
+ ("foolib.h" .
+ "#ifdef __cplusplus\nextern \"C\" {\n#endif
+ int foo();
+ #ifdef __cplusplus\n}\n#endif")
+ ("foolib.c" .
+ "#include \"foolib.h\"
+ int foo() {return 42;}"))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/foo.cpp")
+ (should (setq server (eglot--tests-connect))))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/foolib.h")
+ (should (eq (eglot-current-server) server)))
+ (with-current-buffer
+ (eglot--find-file-noselect "project/foolib.c")
+ (should (eq (eglot-current-server) server))))))
+
+(provide 'eglot-tests)
+;;; eglot-tests.el ends here
+
+;; Local Variables:
+;; checkdoc-force-docstrings-flag: nil
+;; End:
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-resources/.dir-locals.el b/test/lisp/progmodes/project-resources/.dir-locals.el
new file mode 100644
index 00000000000..a311b7efa9a
--- /dev/null
+++ b/test/lisp/progmodes/project-resources/.dir-locals.el
@@ -0,0 +1 @@
+((nil . ((project-vc-ignores . ("etc")))))
diff --git a/test/lisp/progmodes/project-resources/etc b/test/lisp/progmodes/project-resources/etc
new file mode 100644
index 00000000000..dd7999bd3dd
--- /dev/null
+++ b/test/lisp/progmodes/project-resources/etc
@@ -0,0 +1 @@
+etc \ No newline at end of file
diff --git a/test/lisp/progmodes/project-resources/foo b/test/lisp/progmodes/project-resources/foo
new file mode 100644
index 00000000000..19102815663
--- /dev/null
+++ b/test/lisp/progmodes/project-resources/foo
@@ -0,0 +1 @@
+foo \ No newline at end of file
diff --git a/test/lisp/progmodes/project-tests.el b/test/lisp/progmodes/project-tests.el
index c3b886873d3..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:
@@ -41,7 +41,7 @@ quoted directory names (Bug#47799)."
(skip-unless (executable-find "grep"))
(ert-with-temp-directory directory
(let ((default-directory directory)
- (project-current-inhibit-prompt t)
+ (project-current-directory-override t)
(project-find-functions nil)
(project-list-file
(expand-file-name "projects" directory))
@@ -139,4 +139,17 @@ When `project-ignores' includes a name matching project dir."
(should-not (null project))
(should (string-match-p "/test/lisp/\\'" (project-root project)))))
+(ert-deftest project-vc-supports-project-in-different-dir ()
+ "Check that it picks up dir-locals settings from somewhere else."
+ (skip-unless (eq (vc-responsible-backend default-directory) 'Git))
+ (let* ((dir (ert-resource-directory))
+ (_ (vc-file-clearprops dir))
+ (project-vc-extra-root-markers '(".dir-locals.el"))
+ (project (project-current nil dir)))
+ (should-not (null project))
+ (should (string-match-p "/test/lisp/progmodes/project-resources/\\'" (project-root project)))
+ (should (member "etc" (project-ignores project dir)))
+ (should (equal '(".dir-locals.el" "foo")
+ (mapcar #'file-name-nondirectory (project-files project))))))
+
;;; project-tests.el ends here
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 f39489071ec..bfae948b259 100644
--- a/test/lisp/progmodes/ruby-mode-resources/ruby.rb
+++ b/test/lisp/progmodes/ruby-mode-resources/ruby.rb
@@ -174,6 +174,12 @@ qux :+,
bar,
:a
+zzz @abc,
+ 4
+
+foo a = 5,
+ b
+
b = $:
c = ??
@@ -220,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
@@ -374,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
@@ -392,6 +411,12 @@ bar 1 do
end
end
+x.foo do
+ foo
+end.bar do
+ bar
+end
+
foo |
bar
@@ -500,3 +525,43 @@ def resolve(**args)
member.call(**args)
end
+
+# Endless methods.
+class Bar
+ def foo(abc) = bar +
+ baz
+
+ def self.bar =
+ 123 +
+ 4
+
+ def foo(...) = z
+
+ def request_params = {
+ headers: request_headers,
+ body: request_body
+ }
+
+ def self.foo(
+ baz,
+ bar
+ ) =
+ what
+
+ def foo=(
+ baz,
+ bar
+ )
+ def baz.full_name = "#{bar} 3"
+
+ 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 33fded5a59b..9687231dbfa 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.
@@ -578,6 +578,45 @@ VALUES-PLIST is a list with alternating index and value elements."
(search-backward "_")
(should (string= (ruby-add-log-current-method) "M::C#foo"))))
+(ert-deftest ruby-add-log-current-method-after-inner-class-outside-methods ()
+ (ruby-with-temp-buffer (ruby-test-string
+ "module M
+ | class C
+ | class D
+ | end
+ |
+ |_
+ | end
+ |end")
+ (search-backward "_")
+ (delete-char 1)
+ (should (string= (ruby-add-log-current-method) "M::C"))))
+
+(ert-deftest ruby-add-log-current-method-after-inner-class-outside-methods-with-text ()
+ (ruby-with-temp-buffer (ruby-test-string
+ "module M
+ | class C
+ | class D
+ | end
+ |
+ | FOO = 5
+ | end
+ |end")
+ (search-backward "FOO")
+ (should (string= (ruby-add-log-current-method) "M::C"))))
+
+(ert-deftest ruby-add-log-current-method-after-endless-method ()
+ (ruby-with-temp-buffer (ruby-test-string
+ "module M
+ | class C
+ | def foo =
+ | 4_
+ | end
+ |end")
+ (search-backward "_")
+ (delete-char 1)
+ (should (string= (ruby-add-log-current-method) "M::C#foo"))))
+
(defvar ruby-block-test-example
(ruby-test-string
"class C
@@ -904,16 +943,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..aa1ab1e2605
--- /dev/null
+++ b/test/lisp/progmodes/ruby-ts-mode-tests.el
@@ -0,0 +1,254 @@
+;;; 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
+ | _
+ | end
+ |end")
+ (search-backward "_")
+ (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 ebf84481c61..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.
@@ -218,8 +218,8 @@ long as this works, the problem in bug#58877 shouldn't occur."
(eq (terminal-live-p terminal) t)
(not (eq system-type 'windows-nt)))
(delete-terminal terminal)))
- ;; Delete the created frame.
- (delete-frame (car (cl-set-difference (frame-list) starting-frames))
- t)))
+ ;; If there are any new frames remaining, delete them.
+ (mapc (lambda (frame) (delete-frame frame t))
+ (cl-set-difference (frame-list) starting-frames))))
;;; server-tests.el ends here
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 5083fc5abae..5c5802ef3e4 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
new file mode 100644
index 00000000000..6374a0d1037
--- /dev/null
+++ b/test/lisp/use-package/use-package-tests.el
@@ -0,0 +1,1959 @@
+;;; use-package-tests.el --- Tests for use-package.el -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2014-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 'ert)
+(require 'use-package)
+
+(setq use-package-always-ensure nil
+ use-package-verbose 'errors
+ use-package-expand-minimally t
+ ;; These are needed for certain tests below where the `pcase' match
+ ;; expression is large and contains holes, such as the :after tests.
+ max-lisp-eval-depth 8000
+ max-specpdl-size 8000)
+
+(unless (fboundp 'macroexpand-1)
+ (defun macroexpand-1 (form &optional environment)
+ "Perform (at most) one step of macroexpansion."
+ (cond
+ ((consp form)
+ (let* ((head (car form))
+ (env-expander (assq head environment)))
+ (if env-expander
+ (if (cdr env-expander)
+ (apply (cdr env-expander) (cdr form))
+ form)
+ (if (not (and (symbolp head) (fboundp head)))
+ form
+ (let ((def (autoload-do-load (symbol-function head) head 'macro)))
+ (cond
+ ;; Follow alias, but only for macros, otherwise we may end up
+ ;; skipping an important compiler-macro (e.g. cl--block-wrapper).
+ ((and (symbolp def) (macrop def)) (cons def (cdr form)))
+ ((not (consp def)) form)
+ (t
+ (if (eq 'macro (car def))
+ (apply (cdr def) (cdr form))
+ form))))))))
+ (t form))))
+
+(defmacro expand-minimally (form)
+ `(let ((use-package-verbose 'errors)
+ (use-package-expand-minimally t))
+ (macroexpand-1 ',form)))
+
+(defmacro expand-maximally (form)
+ `(let ((use-package-verbose 'debug)
+ (use-package-expand-minimally nil))
+ (macroexpand-1 ',form)))
+
+(defmacro match-expansion (form &rest value)
+ `(should (pcase (expand-minimally ,form)
+ ,@(mapcar #'(lambda (x) (list x t)) value))))
+
+(defun fix-expansion ()
+ (interactive)
+ (save-excursion
+ (unless (looking-at "(match-expansion")
+ (backward-up-list))
+ (when (looking-at "(match-expansion")
+ (re-search-forward "(\\(use-package\\|bind-key\\)")
+ (goto-char (match-beginning 0))
+ (let ((decl (read (current-buffer))))
+ (kill-sexp)
+ (let (vars)
+ (catch 'exit
+ (save-excursion
+ (while (ignore-errors (backward-up-list) t)
+ (when (looking-at "(let\\s-+")
+ (goto-char (match-end 0))
+ (setq vars (read (current-buffer)))
+ (throw 'exit t)))))
+ (eval
+ `(let (,@ (append vars
+ '((use-package-verbose 'errors)
+ (use-package-expand-minimally t))))
+ (insert ?\n ?\` (pp-to-string (macroexpand-1 decl))))))))))
+
+(bind-key "C-c C-u" #'fix-expansion emacs-lisp-mode-map)
+
+(ert-deftest use-package-test-recognize-function ()
+ (should (use-package-recognize-function nil t))
+ (should-not (use-package-recognize-function nil))
+ (should (use-package-recognize-function t))
+ (should (use-package-recognize-function 'sym))
+ (should (use-package-recognize-function #'sym))
+ (should (use-package-recognize-function (lambda () ...)))
+ (should (use-package-recognize-function '(lambda () ...)))
+ (should (use-package-recognize-function #'(lambda () ...)))
+
+ (should-not (use-package-recognize-function 1))
+ (should-not (use-package-recognize-function "Hello"))
+ (should-not (use-package-recognize-function '(nil . nil))))
+
+(ert-deftest use-package-test-normalize-function ()
+ (should (equal (use-package-normalize-function nil) nil))
+ (should (equal (use-package-normalize-function t) t))
+ (should (equal (use-package-normalize-function 'sym) 'sym))
+ (should (equal (use-package-normalize-function #'sym) 'sym))
+ (should (equal (use-package-normalize-function '(lambda () ...)) '(lambda () ...)))
+ (should (equal (use-package-normalize-function ''(lambda () ...)) '(lambda () ...)))
+ (should (equal (use-package-normalize-function '#'(lambda () ...)) '(lambda () ...)))
+
+ (should (equal (use-package-normalize-function 1) 1))
+ (should (equal (use-package-normalize-function "Hello") "Hello"))
+ (should (equal (use-package-normalize-function '(nil . nil)) '(nil . nil))))
+
+(ert-deftest use-package-test/:disabled-1 ()
+ (match-expansion
+ (use-package foo :disabled t)
+ `()))
+
+(ert-deftest use-package-test/:preface-1 ()
+ (match-expansion
+ (use-package foo :preface (t))
+ `(progn
+ (eval-and-compile
+ (t))
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:preface-2 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :preface (t))
+ `(progn
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors
+ "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t))))
+ (t))
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:preface-3 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo
+ :preface (preface)
+ :init (init)
+ :config (config)
+ :functions func
+ :defines def)
+ `(progn
+ (eval-and-compile
+ (defvar def)
+ (declare-function func "foo")
+ (eval-when-compile
+ (with-demoted-errors
+ "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t))))
+ (preface))
+ (init)
+ (require 'foo nil nil)
+ (config)
+ t))))
+
+(ert-deftest use-package-test/:preface-4 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo
+ :preface (preface)
+ :init (init)
+ :config (config)
+ :functions func
+ :defines def
+ :defer t)
+ `(progn
+ (eval-and-compile
+ (defvar def)
+ (declare-function func "foo")
+ (eval-when-compile
+ (with-demoted-errors
+ "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t))))
+ (preface))
+ (init)
+ (eval-after-load 'foo
+ '(progn
+ (config)
+ t))))))
+
+(ert-deftest use-package-test/:pin-1 ()
+ (match-expansion
+ (use-package foo :pin foo)
+ `(progn
+ (use-package-pin-package 'foo "foo")
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:pin-2 ()
+ (match-expansion
+ (use-package foo :pin "foo")
+ `(progn
+ (use-package-pin-package 'foo "foo")
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test-normalize/:ensure ()
+ (cl-flet ((norm (&rest args)
+ (apply #'use-package-normalize/:ensure
+ 'foopkg :ensure args)))
+ (should (equal (norm '(t)) '(t)))
+ (should (equal (norm '(nil)) '(nil)))
+ (should (equal (norm '(sym)) '(sym)))
+ (should-error (norm '(1)))
+ (should-error (norm '("Hello")))))
+
+(ert-deftest use-package-test/:ensure-1 ()
+ (let ((use-package-always-ensure nil))
+ (match-expansion
+ (use-package foo :ensure t)
+ `(progn
+ (use-package-ensure-elpa 'foo '(t) 'nil)
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:ensure-2 ()
+ (let ((use-package-always-ensure t))
+ (match-expansion
+ (use-package foo :ensure t)
+ `(progn
+ (use-package-ensure-elpa 'foo '(t) 'nil)
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:ensure-3 ()
+ (let ((use-package-always-ensure nil))
+ (match-expansion
+ (use-package foo :ensure nil)
+ `(progn
+ (use-package-ensure-elpa 'foo '(nil) 'nil)
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:ensure-4 ()
+ (let ((use-package-always-ensure t))
+ (match-expansion
+ (use-package foo :ensure nil)
+ `(progn
+ (use-package-ensure-elpa 'foo '(nil) 'nil)
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:ensure-5 ()
+ (let ((use-package-always-ensure nil))
+ (match-expansion
+ (use-package foo :load-path "foo")
+ `(progn
+ (eval-and-compile
+ (add-to-list 'load-path ,(pred stringp)))
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:ensure-6 ()
+ (let ((use-package-always-ensure t))
+ (match-expansion
+ (use-package foo :load-path "foo")
+ `(progn
+ (eval-and-compile
+ (add-to-list 'load-path ,(pred stringp)))
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:ensure-7 ()
+ (let ((use-package-always-ensure nil))
+ (match-expansion
+ (use-package foo :ensure nil :load-path "foo")
+ `(progn
+ (use-package-ensure-elpa 'foo '(nil) 'nil)
+ (eval-and-compile
+ (add-to-list 'load-path ,(pred stringp)))
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:ensure-8 ()
+ (let ((use-package-always-ensure t))
+ (match-expansion
+ (use-package foo :ensure nil :load-path "foo")
+ `(progn
+ (use-package-ensure-elpa 'foo '(nil) 'nil)
+ (eval-and-compile
+ (add-to-list 'load-path ,(pred stringp)))
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:ensure-9 ()
+ (let ((use-package-always-ensure nil))
+ (match-expansion
+ (use-package foo :ensure t :load-path "foo")
+ `(progn
+ (use-package-ensure-elpa 'foo '(t) 'nil)
+ (eval-and-compile
+ (add-to-list 'load-path ,(pred stringp)))
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:ensure-10 ()
+ (let ((use-package-always-ensure t))
+ (match-expansion
+ (use-package foo :ensure t :load-path "foo")
+ `(progn
+ (use-package-ensure-elpa 'foo '(t) 'nil)
+ (eval-and-compile
+ (add-to-list 'load-path ,(pred stringp)))
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:ensure-11 ()
+ (let (tried-to-install)
+ (cl-letf (((symbol-function #'use-package-ensure-elpa)
+ (lambda (name ensure state &optional no-refresh)
+ (when ensure
+ (setq tried-to-install name))))
+ ((symbol-function #'require) #'ignore))
+ (use-package foo :ensure t)
+ (should (eq tried-to-install 'foo)))))
+
+(ert-deftest use-package-test/:ensure-12 ()
+ (let ((use-package-always-ensure t))
+ (match-expansion
+ (use-package foo :ensure bar)
+ `(progn
+ (use-package-ensure-elpa 'foo '(bar) 'nil)
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:ensure-13 ()
+ (let ((use-package-always-ensure t))
+ (match-expansion
+ (use-package foo :ensure bar :ensure quux)
+ `(progn
+ (use-package-ensure-elpa 'foo '(bar quux) 'nil)
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:ensure-14 ()
+ (match-expansion
+ (use-package ess-site
+ :ensure ess1
+ :ensure ess2
+ :ensure (ess3 :pin "melpa-unstable")
+ :pin melpa-stable)
+ `(progn
+ (use-package-pin-package 'ess-site "melpa-stable")
+ (use-package-ensure-elpa 'ess-site
+ '(ess1 ess2
+ (ess3 . "melpa-unstable"))
+ 'nil)
+ (require 'ess-site nil nil))))
+
+(ert-deftest use-package-test/:ensure-15 ()
+ (let ((use-package-always-ensure t))
+ (match-expansion
+ (use-package foo
+ :pin "elpa"
+ :ensure bar
+ :ensure (quux :pin "melpa"))
+ `(progn
+ (use-package-pin-package 'foo "elpa")
+ (use-package-ensure-elpa 'foo
+ '(bar
+ (quux . "melpa"))
+ 'nil)
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:if-1 ()
+ (match-expansion
+ (use-package foo :if t)
+ `(when t
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:if-2 ()
+ (match-expansion
+ (use-package foo :if (and t t))
+ `(when (and t t)
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:if-3 ()
+ (match-expansion
+ (use-package foo :if nil)
+ `(when nil
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:when-1 ()
+ (match-expansion
+ (use-package foo :when t)
+ `(when t
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:when-2 ()
+ (match-expansion
+ (use-package foo :when (and t t))
+ `(when (and t t)
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:when-3 ()
+ (match-expansion
+ (use-package foo :when nil)
+ `(when nil
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:unless-1 ()
+ (match-expansion
+ (use-package foo :unless t)
+ `(when (not t)
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:unless-2 ()
+ (match-expansion
+ (use-package foo :unless (and t t))
+ `(when (not (and t t))
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:unless-3 ()
+ (match-expansion
+ (use-package foo :unless nil)
+ `(unless nil
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:requires-1 ()
+ (match-expansion
+ (use-package foo :requires bar)
+ `(when (featurep 'bar)
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:requires-2 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :requires bar)
+ `(when (featurep 'bar)
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors
+ "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:requires-3 ()
+ (match-expansion
+ (use-package foo :requires (bar quux))
+ `(when (not (member nil (mapcar #'featurep '(bar quux))))
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:requires-4 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :requires bar)
+ `(when (featurep 'bar)
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:load-path-1 ()
+ (match-expansion
+ (use-package foo :load-path "bar")
+ `(progn
+ (eval-and-compile
+ (add-to-list 'load-path
+ ,(pred (apply-partially
+ #'string=
+ (expand-file-name
+ "bar" user-emacs-directory)))))
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:load-path-2 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :load-path "bar")
+ `(progn
+ (eval-and-compile
+ (add-to-list 'load-path
+ ,(pred (apply-partially
+ #'string=
+ (expand-file-name
+ "bar" user-emacs-directory)))))
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:load-path-3 ()
+ (match-expansion
+ (use-package foo :load-path ("bar" "quux"))
+ `(progn
+ (eval-and-compile
+ (add-to-list 'load-path
+ ,(pred (apply-partially
+ #'string=
+ (expand-file-name
+ "bar" user-emacs-directory)))))
+ (eval-and-compile
+ (add-to-list 'load-path
+ ,(pred (apply-partially
+ #'string=
+ (expand-file-name
+ "quux" user-emacs-directory)))))
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:load-path-4 ()
+ (match-expansion
+ (use-package foo :load-path (lambda () (list "bar" "quux")))
+ `(progn
+ (eval-and-compile
+ (add-to-list 'load-path
+ ,(pred (apply-partially
+ #'string=
+ (expand-file-name
+ "bar" user-emacs-directory)))))
+ (eval-and-compile
+ (add-to-list 'load-path
+ ,(pred (apply-partially
+ #'string=
+ (expand-file-name
+ "quux" user-emacs-directory)))))
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:no-require-1 ()
+ (match-expansion
+ (use-package foo :no-require t)
+ `nil))
+
+(ert-deftest use-package-test/:no-require-2 ()
+ (match-expansion
+ (use-package foo :no-require t :config (config))
+ `(progn
+ (config)
+ t)))
+
+(ert-deftest use-package-test/:no-require-3 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :no-require t)
+ `(eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors "Cannot load foo: %S" nil nil))))))
+
+(defun use-package-test-normalize-bind (&rest args)
+ (apply #'use-package-normalize-binder 'foo :bind args))
+
+(ert-deftest use-package-test-normalize/:bind-1 ()
+ (should (equal (use-package-test-normalize-bind
+ '(("C-a" . alpha)))
+ '(("C-a" . alpha)))))
+
+(ert-deftest use-package-test-normalize/:bind-2 ()
+ (should (equal (use-package-test-normalize-bind
+ '(("C-a" . alpha)
+ :map foo-map
+ ("C-b" . beta)))
+ '(("C-a" . alpha)
+ :map foo-map
+ ("C-b" . beta)))))
+
+(ert-deftest use-package-test-normalize/:bind-3 ()
+ (should (equal (use-package-test-normalize-bind
+ '(:map foo-map
+ ("C-a" . alpha)
+ ("C-b" . beta)))
+ '(:map foo-map
+ ("C-a" . alpha)
+ ("C-b" . beta)))))
+
+(ert-deftest use-package-test/:bind-1 ()
+ (match-expansion
+ (use-package foo :bind ("C-k" . key1) ("C-u" . key2))
+ `(progn
+ (unless
+ (fboundp 'key1)
+ (autoload #'key1 "foo" nil t))
+ (unless
+ (fboundp 'key2)
+ (autoload #'key2 "foo" nil t))
+ (bind-keys :package foo
+ ("C-k" . key1)
+ ("C-u" . key2)))))
+
+(ert-deftest use-package-test/:bind-2 ()
+ (match-expansion
+ (use-package foo :bind (("C-k" . key1) ("C-u" . key2)))
+ `(progn
+ (unless (fboundp 'key1)
+ (autoload #'key1 "foo" nil t))
+ (unless (fboundp 'key2)
+ (autoload #'key2 "foo" nil t))
+ (bind-keys :package foo
+ ("C-k" . key1)
+ ("C-u" . key2)))))
+
+(ert-deftest use-package-test/:bind-3 ()
+ (match-expansion
+ (use-package foo :bind (:map my-map ("C-k" . key1) ("C-u" . key2)))
+ `(progn
+ (unless
+ (fboundp 'key1)
+ (autoload #'key1 "foo" nil t))
+ (unless
+ (fboundp 'key2)
+ (autoload #'key2 "foo" nil t))
+ (bind-keys :package foo :map my-map
+ ("C-k" . key1)
+ ("C-u" . key2)))))
+
+(ert-deftest use-package-test/:bind-4 ()
+ (should-error
+ (match-expansion
+ (use-package foo :bind :map my-map ("C-k" . key1) ("C-u" . key2))
+ `(bind-keys :package foo))))
+
+(ert-deftest use-package-test/:bind-5 ()
+ (match-expansion
+ (use-package foo :bind ("C-k" . key1) (:map my-map ("C-u" . key2)))
+ `(progn
+ (unless (fboundp 'key1)
+ (autoload #'key1 "foo" nil t))
+ (unless (fboundp 'key2)
+ (autoload #'key2 "foo" nil t))
+ (bind-keys :package foo
+ ("C-k" . key1)
+ :map my-map
+ ("C-u" . key2)))))
+
+(ert-deftest use-package-test/:bind-6 ()
+ (match-expansion
+ (use-package foo
+ :bind
+ ("C-k" . key1)
+ (:map my-map ("C-u" . key2))
+ (:map my-map2 ("C-u" . key3)))
+ `(progn
+ (unless (fboundp 'key1)
+ (autoload #'key1 "foo" nil t))
+ (unless (fboundp 'key2)
+ (autoload #'key2 "foo" nil t))
+ (unless (fboundp 'key3)
+ (autoload #'key3 "foo" nil t))
+ (bind-keys :package foo
+ ("C-k" . key1)
+ :map my-map ("C-u" . key2)
+ :map my-map2 ("C-u" . key3)))))
+
+(ert-deftest use-package-test/:bind-7 ()
+ (match-expansion
+ (use-package foo
+ :ensure
+ :bind ("C-c r" . browse-at-remote))
+ `(progn
+ (use-package-ensure-elpa 'foo '(t) 'nil)
+ (unless (fboundp 'browse-at-remote)
+ (autoload #'browse-at-remote "foo" nil t))
+ (bind-keys :package foo ("C-c r" . browse-at-remote)))))
+
+(ert-deftest use-package-test/:bind-8 ()
+ (match-expansion
+ (use-package foo
+ :ensure
+ :bind (:map foo-map
+ (("C-c r" . foo)
+ ("C-c r" . bar))))
+ `(progn
+ (use-package-ensure-elpa 'foo '(t) 'nil)
+ (unless (fboundp 'foo)
+ (autoload #'foo "foo" nil t))
+ (unless (fboundp 'bar)
+ (autoload #'bar "foo" nil t))
+ (bind-keys :package foo :map foo-map
+ ("C-c r" . foo)
+ ("C-c r" . bar)))))
+
+(ert-deftest use-package-test/:bind*-1 ()
+ (match-expansion
+ (use-package foo :bind* ("C-k" . key))
+ `(progn
+ (unless (fboundp 'key)
+ (autoload #'key "foo" nil t))
+ (bind-keys* :package foo ("C-k" . key)))))
+
+(ert-deftest use-package-test/:bind-keymap-1 ()
+ (match-expansion
+ (use-package foo :bind-keymap ("C-k" . key))
+ `(bind-key "C-k"
+ #'(lambda nil
+ (interactive)
+ (use-package-autoload-keymap 'key 'foo nil)))))
+
+(ert-deftest use-package-test/:bind-keymap*-1 ()
+ (match-expansion
+ (use-package foo :bind-keymap* ("C-k" . key))
+ `(bind-key* "C-k"
+ #'(lambda ()
+ (interactive)
+ (use-package-autoload-keymap 'key 'foo t)))))
+
+(ert-deftest use-package-test/:interpreter-1 ()
+ (match-expansion
+ (use-package foo :interpreter "interp")
+ `(progn
+ (unless (fboundp 'foo)
+ (autoload #'foo "foo" nil t))
+ (add-to-list 'interpreter-mode-alist '("interp" . foo)))))
+
+(ert-deftest use-package-test/:interpreter-2 ()
+ (match-expansion
+ (use-package foo :interpreter ("interp" . fun))
+ `(progn
+ (unless (fboundp 'fun)
+ (autoload #'fun "foo" nil t))
+ (add-to-list 'interpreter-mode-alist '("interp" . fun)))))
+
+(ert-deftest use-package-test-normalize/:mode ()
+ (cl-flet ((norm (&rest args)
+ (apply #'use-package-normalize/:mode
+ 'foopkg :mode args)))
+ (should (equal (norm '(".foo"))
+ '((".foo" . foopkg))))
+ (should (equal (norm '(".foo" ".bar"))
+ '((".foo" . foopkg) (".bar" . foopkg))))
+ (should (equal (norm '((".foo" ".bar")))
+ '((".foo" . foopkg) (".bar" . foopkg))))
+ (should (equal (norm '((".foo")))
+ '((".foo" . foopkg))))
+ (should (equal (norm '((".foo" . foo) (".bar" . bar)))
+ '((".foo" . foo) (".bar" . bar))))))
+
+(ert-deftest use-package-test/:mode-1 ()
+ (match-expansion
+ (use-package foo :mode "interp")
+ `(progn
+ (unless (fboundp 'foo)
+ (autoload #'foo "foo" nil t))
+ (add-to-list 'auto-mode-alist '("interp" . foo)))))
+
+(ert-deftest use-package-test/:mode-2 ()
+ (match-expansion
+ (use-package foo :mode ("interp" . fun))
+ `(progn
+ (unless (fboundp 'fun)
+ (autoload #'fun "foo" nil t))
+ (add-to-list 'auto-mode-alist '("interp" . fun)))))
+
+(ert-deftest use-package-test/:magic-1 ()
+ (match-expansion
+ (use-package foo :magic "interp")
+ `(progn
+ (unless (fboundp 'foo)
+ (autoload #'foo "foo" nil t))
+ (add-to-list 'magic-mode-alist '("interp" . foo)))))
+
+(ert-deftest use-package-test/:magic-2 ()
+ (match-expansion
+ (use-package foo :magic ("interp" . fun))
+ `(progn
+ (unless (fboundp 'fun)
+ (autoload #'fun "foo" nil t))
+ (add-to-list 'magic-mode-alist '("interp" . fun)))))
+
+(ert-deftest use-package-test/:magic-fallback-1 ()
+ (match-expansion
+ (use-package foo :magic-fallback "interp")
+ `(progn
+ (unless (fboundp 'foo)
+ (autoload #'foo "foo" nil t))
+ (add-to-list 'magic-fallback-mode-alist '("interp" . foo)))))
+
+(ert-deftest use-package-test/:magic-fallback-2 ()
+ (match-expansion
+ (use-package foo :magic-fallback ("interp" . fun))
+ `(progn
+ (unless (fboundp 'fun)
+ (autoload #'fun "foo" nil t))
+ (add-to-list 'magic-fallback-mode-alist '("interp" . fun)))))
+
+(ert-deftest use-package-test/:commands-1 ()
+ (match-expansion
+ (use-package foo :commands bar)
+ `(unless (fboundp 'bar)
+ (autoload #'bar "foo" nil t))))
+
+(ert-deftest use-package-test/:commands-2 ()
+ (match-expansion
+ (use-package foo :commands (bar quux))
+ `(progn
+ (unless (fboundp 'bar)
+ (autoload #'bar "foo" nil t))
+ (unless (fboundp 'quux)
+ (autoload #'quux "foo" nil t)))))
+
+(ert-deftest use-package-test/:commands-3 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :commands (bar quux))
+ `(progn
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (unless (fboundp 'bar)
+ (autoload #'bar "foo" nil t))
+ (eval-when-compile
+ (declare-function bar "foo"))
+ (unless (fboundp 'quux)
+ (autoload #'quux "foo" nil t))
+ (eval-when-compile
+ (declare-function quux "foo"))))))
+
+(ert-deftest use-package-test/:commands-4 ()
+ (match-expansion
+ (use-package foo :commands bar :init (bar))
+ `(progn
+ (unless
+ (fboundp 'bar)
+ (autoload #'bar "foo" nil t))
+ (bar))))
+
+(ert-deftest use-package-test/:commands-5 ()
+ (match-expansion
+ (use-package gnus-harvest
+ :load-path "foo"
+ :commands gnus-harvest-install
+ :demand t
+ :config
+ (if (featurep 'message-x)
+ (gnus-harvest-install 'message-x)
+ (gnus-harvest-install)))
+ `(progn
+ (eval-and-compile
+ (add-to-list 'load-path ,(pred stringp)))
+ (require 'gnus-harvest nil nil)
+ (if (featurep 'message-x)
+ (gnus-harvest-install 'message-x)
+ (gnus-harvest-install))
+ t)))
+
+(ert-deftest use-package-test/:commands-6 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package gnus-harvest
+ :load-path "foo"
+ :commands gnus-harvest-install
+ :demand t
+ :config
+ (if (featurep 'message-x)
+ (gnus-harvest-install 'message-x)
+ (gnus-harvest-install)))
+ `(progn
+ (eval-and-compile
+ (add-to-list 'load-path ,(pred stringp)))
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors "Cannot load gnus-harvest: %S" nil
+ (unless (featurep 'gnus-harvest)
+ (load "gnus-harvest" nil t)))))
+ (eval-when-compile
+ (declare-function gnus-harvest-install "gnus-harvest"))
+ (require 'gnus-harvest nil nil)
+ (if
+ (featurep 'message-x)
+ (gnus-harvest-install 'message-x)
+ (gnus-harvest-install))
+ t))))
+
+(ert-deftest use-package-test/:autoload-1 ()
+ (match-expansion
+ (use-package foo :autoload bar)
+ `(unless (fboundp 'bar)
+ (autoload #'bar "foo"))))
+
+(ert-deftest use-package-test/:defines-1 ()
+ (match-expansion
+ (use-package foo :defines bar)
+ `(require 'foo nil nil)))
+
+(ert-deftest use-package-test/:defines-2 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :defines bar)
+ `(progn
+ (eval-and-compile
+ (defvar bar)
+ (eval-when-compile
+ (with-demoted-errors
+ "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:functions-1 ()
+ (match-expansion
+ (use-package foo :functions bar)
+ `(require 'foo nil nil)))
+
+(ert-deftest use-package-test/:functions-2 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :functions bar)
+ `(progn
+ (eval-and-compile
+ (declare-function bar "foo")
+ (eval-when-compile
+ (with-demoted-errors
+ "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:functions-3 ()
+ (match-expansion
+ (use-package foo :defer t :functions bar)
+ `nil))
+
+(ert-deftest use-package-test/:functions-4 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :defer t :functions bar)
+ `(eval-and-compile
+ (declare-function bar "foo")
+ (eval-when-compile
+ (with-demoted-errors "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t))))))))
+
+(ert-deftest use-package-test/:functions-5 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :defer t :config (config) :functions bar)
+ `(progn
+ (eval-and-compile
+ (declare-function bar "foo")
+ (eval-when-compile
+ (with-demoted-errors
+ "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (eval-after-load 'foo
+ '(progn
+ (config)
+ t))))))
+
+(ert-deftest use-package-test/:defer-1 ()
+ (match-expansion
+ (use-package foo)
+ `(require 'foo nil nil)))
+
+(ert-deftest use-package-test/:defer-2 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo)
+ `(progn
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:defer-3 ()
+ (match-expansion
+ (use-package foo :defer t)
+ `nil))
+
+(ert-deftest use-package-test/:defer-4 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :defer t)
+ `(eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t))))))))
+
+(ert-deftest use-package-test-normalize/:hook ()
+ (cl-flet ((norm (&rest args)
+ (apply #'use-package-normalize/:hook
+ 'foopkg :hook args)))
+ (should-error (norm nil))
+ (should (equal (norm '(bar))
+ '((bar . foopkg-mode))))
+ (should (equal (norm '((bar . foopkg)))
+ '((bar . foopkg))))
+ (should (equal (norm '((bar . baz)))
+ '((bar . baz))))
+ (should (equal (norm '(((bar baz) . quux)))
+ '(((bar baz) . quux))))
+ (should (equal (norm '(bar baz))
+ '(((bar baz) . foopkg-mode))))
+ (should (equal (norm '((bar baz) (quux bow)))
+ '(((bar baz) . foopkg-mode) ((quux bow) . foopkg-mode))))
+ (should (equal (norm '((bar . baz) (quux . bow)))
+ '((bar . baz) (quux . bow))))
+ (should (equal (norm '(((bar1 bar2) . baz) ((quux1 quux2) . bow)))
+ '(((bar1 bar2) . baz) ((quux1 quux2) . bow))))))
+
+(ert-deftest use-package-test/:hook-1 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo
+ :bind (("C-a" . key))
+ :hook (hook . fun))
+ `(progn
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors
+ "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (unless
+ (fboundp 'key)
+ (autoload #'key "foo" nil t))
+ (eval-when-compile
+ (declare-function key "foo"))
+ (unless
+ (fboundp 'fun)
+ (autoload #'fun "foo" nil t))
+ (eval-when-compile
+ (declare-function fun "foo"))
+ (add-hook 'hook-hook #'fun)
+ (bind-keys :package foo ("C-a" . key))))))
+
+(ert-deftest use-package-test/:hook-2 ()
+ (match-expansion
+ (use-package foo
+ :hook (hook . fun))
+ `(progn
+ (unless (fboundp 'fun)
+ (autoload #'fun "foo" nil t))
+ (add-hook 'hook-hook #'fun))))
+
+(ert-deftest use-package-test/:hook-3 ()
+ (let ((use-package-hook-name-suffix nil))
+ (match-expansion
+ (use-package foo
+ :hook (hook . fun))
+ `(progn
+ (unless (fboundp 'fun)
+ (autoload #'fun "foo" nil t))
+ (add-hook 'hook #'fun)))))
+
+(ert-deftest use-package-test/:hook-4 ()
+ (let ((use-package-hook-name-suffix "-special"))
+ (match-expansion
+ (use-package foo
+ :hook (hook . fun))
+ `(progn
+ (unless (fboundp 'fun)
+ (autoload #'fun "foo" nil t))
+ (add-hook 'hook-special #'fun)))))
+
+(ert-deftest use-package-test/:hook-5 ()
+ (match-expansion
+ (use-package erefactor
+ :load-path "foo"
+ :after elisp-mode
+ :load t
+ :hook (emacs-lisp-mode
+ . (lambda ()
+ (bind-key "\C-c\C-v" erefactor-map emacs-lisp-mode-map))))
+ `(progn
+ (eval-and-compile
+ (add-to-list 'load-path ,(pred stringp)))
+ (eval-after-load 'elisp-mode
+ '(progn
+ (require 'erefactor nil nil)
+ (add-hook
+ 'emacs-lisp-mode-hook
+ #'(lambda nil
+ (bind-key "" erefactor-map emacs-lisp-mode-map))))))))
+
+(ert-deftest use-package-test/:hook-6 ()
+ (match-expansion
+ (use-package erefactor
+ :load-path "foo"
+ :after elisp-mode
+ :hook (emacs-lisp-mode . function))
+ `(progn
+ (eval-and-compile
+ (add-to-list 'load-path ,(pred stringp)))
+ (eval-after-load 'elisp-mode
+ '(progn
+ (unless (fboundp 'function)
+ (autoload #'function "erefactor" nil t))
+ (add-hook 'emacs-lisp-mode-hook #'function))))))
+
+(ert-deftest use-package-test/:hook-7 ()
+ (match-expansion
+ (use-package erefactor
+ :load-path "foo"
+ :after elisp-mode
+ :hook (emacs-lisp-mode . (lambda () (function))))
+ `(progn
+ (eval-and-compile
+ (add-to-list 'load-path ,(pred stringp)))
+ (eval-after-load 'elisp-mode
+ '(progn
+ (require 'erefactor nil nil)
+ (add-hook 'emacs-lisp-mode-hook #'(lambda nil (function))))))))
+
+(ert-deftest use-package-test-normalize/:custom ()
+ (cl-flet ((norm (&rest args)
+ (apply #'use-package-normalize/:custom
+ 'foopkg :custom args)))
+ (should-error (norm nil))
+ (should-error (norm '(bar)))
+ ;; (should-error (norm '((foo bar baz quux))))
+ (should (equal (norm '(foo bar)) '((foo bar))))
+ ;; (should-error (norm '(foo bar baz)))
+ ;; (should (equal (norm '(foo bar "baz"))
+ ;; '((foo bar baz))))
+ ))
+
+
+(ert-deftest use-package-test/:custom-1 ()
+ (match-expansion
+ (use-package foo :custom (foo bar))
+ `(progn
+ (let
+ ((custom--inhibit-theme-enable nil))
+ (unless (memq 'use-package custom-known-themes)
+ (deftheme use-package)
+ (enable-theme 'use-package)
+ (setq custom-enabled-themes (remq 'use-package custom-enabled-themes)))
+ (custom-theme-set-variables 'use-package
+ '(foo bar nil nil "Customized with use-package foo")))
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:custom-with-comment1 ()
+ (match-expansion
+ (use-package foo :custom (foo bar "commented"))
+ `(progn
+ (let
+ ((custom--inhibit-theme-enable nil))
+ (unless (memq 'use-package custom-known-themes)
+ (deftheme use-package)
+ (enable-theme 'use-package)
+ (setq custom-enabled-themes (remq 'use-package custom-enabled-themes)))
+ (custom-theme-set-variables 'use-package
+ '(foo bar nil nil "commented")))
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:custom-face-1 ()
+ (match-expansion
+ (use-package foo :custom-face (foo ((t (:background "#e4edfc")))))
+ `(progn
+ (apply #'face-spec-set (backquote (foo ((t (:background "#e4edfc"))))))
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:custom-face-2 ()
+ (match-expansion
+ (use-package example
+ :custom-face
+ (example-1-face ((t (:foreground "LightPink"))))
+ (example-2-face ((t (:foreground "LightGreen")))))
+ `(progn
+ (apply #'face-spec-set
+ (backquote (example-1-face ((t (:foreground "LightPink"))))))
+ (apply #'face-spec-set
+ (backquote (example-2-face ((t (:foreground "LightGreen"))))))
+ (require 'example nil nil))))
+
+(ert-deftest use-package-test/:custom-face-3 ()
+ (match-expansion
+ (use-package foo :custom-face (foo ((t (:background "#e4edfc"))) face-defspec-spec))
+ `(progn
+ (apply #'face-spec-set (backquote (foo ((t (:background "#e4edfc"))) face-defspec-spec)))
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:init-1 ()
+ (match-expansion
+ (use-package foo :init (init))
+ `(progn
+ (init)
+ (require 'foo nil nil))))
+
+(ert-deftest use-package-test/:init-2 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :init (init))
+ `(progn
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (init)
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:catch-1 ()
+ (match-expansion
+ (use-package foo :catch t)
+ `(progn
+ (defvar ,_
+ #'(lambda (keyword err)
+ (let ((msg (format "%s/%s: %s" 'foo keyword
+ (error-message-string err))))
+ (display-warning 'use-package msg :error))))
+ (condition-case-unless-debug err
+ (require 'foo nil nil)
+ (error
+ (funcall ,_ :catch err))))))
+
+(ert-deftest use-package-test/:catch-2 ()
+ (match-expansion
+ (use-package foo :catch nil)
+ `(require 'foo nil nil)))
+
+(ert-deftest use-package-test/:catch-3 ()
+ (match-expansion
+ (use-package foo :catch (lambda (keyword error)))
+ `(progn
+ (defvar ,_ (lambda (keyword error)))
+ (condition-case-unless-debug err
+ (require 'foo nil nil)
+ (error
+ (funcall ,_ :catch err))))))
+
+(ert-deftest use-package-test/:after-1 ()
+ (match-expansion
+ (use-package foo :after bar)
+ `(eval-after-load 'bar
+ '(require 'foo nil nil))))
+
+(ert-deftest use-package-test/:after-2 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :after bar)
+ `(progn
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (eval-after-load 'bar
+ '(require 'foo nil nil))))))
+
+(ert-deftest use-package-test/:after-3 ()
+ (match-expansion
+ (use-package foo :after (bar quux))
+ `(eval-after-load 'quux
+ '(eval-after-load 'bar
+ '(require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:after-4 ()
+ (match-expansion
+ (use-package foo :after (:all bar quux))
+ `(eval-after-load 'quux
+ '(eval-after-load 'bar
+ '(require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:after-5 ()
+ (match-expansion
+ (use-package foo :after (:any bar quux))
+ `(progn
+ (defvar ,_ nil)
+ (defvar ,_ nil)
+ (defvar ,_
+ #'(lambda nil
+ (if ,_ ,_
+ (setq ,_ t ,_
+ (require 'foo nil nil)))))
+ (eval-after-load 'bar
+ '(funcall ,_))
+ (eval-after-load 'quux
+ '(funcall ,_)))))
+
+(ert-deftest use-package-test/:after-6 ()
+ (match-expansion
+ (use-package foo :after (:all (:any bar quux) bow))
+ `(progn
+ (defvar ,_ nil)
+ (defvar ,_ nil)
+ (defvar ,_
+ #'(lambda nil
+ (if ,_ ,_
+ (setq ,_ t ,_
+ (require 'foo nil nil)))))
+ (eval-after-load 'bow
+ '(progn
+ (eval-after-load 'bar
+ '(funcall ,_))
+ (eval-after-load 'quux
+ '(funcall ,_)))))))
+
+(ert-deftest use-package-test/:after-7 ()
+ (match-expansion
+ (use-package foo :after (:any (:all bar quux) bow))
+ `(progn
+ (defvar ,_ nil)
+ (defvar ,_ nil)
+ (defvar ,_
+ #'(lambda nil
+ (if ,_ ,_
+ (setq ,_ t ,_
+ (require 'foo nil nil)))))
+ (eval-after-load 'quux
+ '(eval-after-load 'bar
+ '(funcall ,_)))
+ (eval-after-load 'bow
+ '(funcall ,_)))))
+
+(ert-deftest use-package-test/:after-8 ()
+ (match-expansion
+ (use-package foo :after (:all (:any bar quux) (:any bow baz)))
+ `(progn
+ (defvar ,_ nil)
+ (defvar ,_ nil)
+ (defvar ,_
+ #'(lambda nil
+ (if ,_ ,_
+ (setq ,_ t ,_
+ (require 'foo nil nil)))))
+ (eval-after-load 'bow
+ '(progn
+ (eval-after-load 'bar
+ '(funcall ,_))
+ (eval-after-load 'quux
+ '(funcall ,_))))
+ (eval-after-load 'baz
+ '(progn
+ (eval-after-load 'bar
+ '(funcall ,_))
+ (eval-after-load 'quux
+ '(funcall ,_)))))))
+
+(ert-deftest use-package-test/:after-9 ()
+ (match-expansion
+ (use-package foo :after (:any (:all bar quux) (:all bow baz)))
+ `(progn
+ (defvar ,_ nil)
+ (defvar ,_ nil)
+ (defvar ,_
+ #'(lambda nil
+ (if ,_ ,_
+ (setq ,_ t ,_
+ (require 'foo nil nil)))))
+ (eval-after-load 'quux
+ '(eval-after-load 'bar
+ '(funcall ,_)))
+ (eval-after-load 'baz
+ '(eval-after-load 'bow
+ '(funcall ,_))))))
+
+(ert-deftest use-package-test/:after-10 ()
+ (match-expansion
+ (use-package foo :after (:any (:all bar quux) (:any bow baz)))
+ `(progn
+ (defvar ,_ nil)
+ (defvar ,_ nil)
+ (defvar ,_
+ #'(lambda nil
+ (if ,_ ,_
+ (setq ,_ t ,_
+ (require 'foo nil nil)))))
+ (eval-after-load 'quux
+ '(eval-after-load 'bar
+ '(funcall ,_)))
+ (eval-after-load 'bow
+ '(funcall ,_))
+ (eval-after-load 'baz
+ '(funcall ,_)))))
+
+(ert-deftest use-package-test/:demand-1 ()
+ (match-expansion
+ (use-package foo :demand t)
+ `(require 'foo nil nil)))
+
+(ert-deftest use-package-test/:demand-2 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :demand t)
+ `(progn
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (require 'foo nil nil)))))
+
+(ert-deftest use-package-test/:demand-3 ()
+ (match-expansion
+ (use-package foo :demand t :config (config))
+ `(progn
+ (require 'foo nil nil)
+ (config)
+ t)))
+
+(ert-deftest use-package-test/:demand-4 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :demand t :config (config))
+ `(progn
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (require 'foo nil nil)
+ (config)
+ t))))
+
+(ert-deftest use-package-test/:demand-5 ()
+ ;; #529 - :demand should not override an explicit use of :after
+ (match-expansion
+ (use-package foo :demand t :after bar)
+ `(eval-after-load 'bar
+ '(require 'foo nil nil))))
+
+(ert-deftest use-package-test/:demand-6 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :demand t :after bar)
+ `(progn
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (eval-after-load 'bar
+ '(require 'foo nil nil))))))
+
+(ert-deftest use-package-test/:demand-7 ()
+ (match-expansion
+ (use-package counsel
+ :load-path "foo"
+ :after ivy
+ :demand t
+ :diminish
+ :bind (("C-*" . counsel-org-agenda-headlines)
+ ("M-x" . counsel-M-x))
+ :commands (counsel-minibuffer-history
+ counsel-find-library
+ counsel-unicode-char)
+ :preface (preface-code)
+ :init
+ ;; This is actually wrong, but it's just part of the example.
+ (define-key minibuffer-local-map (kbd "M-r")
+ 'counsel-minibuffer-history))
+ `(progn
+ (eval-and-compile
+ (add-to-list 'load-path ,(pred stringp)))
+ (eval-and-compile
+ (preface-code))
+ (eval-after-load 'ivy
+ '(progn
+ (define-key minibuffer-local-map (kbd "M-r")
+ 'counsel-minibuffer-history)
+ (require 'counsel nil nil)
+ (if (fboundp 'diminish)
+ (diminish 'counsel-mode))
+ (bind-keys :package counsel
+ ("C-*" . counsel-org-agenda-headlines)
+ ("M-x" . counsel-M-x)))))))
+
+(ert-deftest use-package-test/:config-1 ()
+ (match-expansion
+ (use-package foo :config (config))
+ `(progn
+ (require 'foo nil nil)
+ (config)
+ t)))
+
+(ert-deftest use-package-test/:config-2 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :config (config))
+ `(progn
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (require 'foo nil nil)
+ (config)
+ t))))
+
+(ert-deftest use-package-test/:config-3 ()
+ (match-expansion
+ (use-package foo :defer t :config (config))
+ `(eval-after-load 'foo
+ '(progn
+ (config)
+ t))))
+
+(ert-deftest use-package-test/:config-4 ()
+ (let ((byte-compile-current-file t))
+ (match-expansion
+ (use-package foo :defer t :config (config))
+ `(progn
+ (eval-and-compile
+ (eval-when-compile
+ (with-demoted-errors "Cannot load foo: %S" nil
+ (unless (featurep 'foo)
+ (load "foo" nil t)))))
+ (eval-after-load 'foo
+ '(progn
+ (config)
+ t))))))
+
+(ert-deftest use-package-test-normalize/:diminish ()
+ (should (equal (use-package-normalize-diminish 'foopkg :diminish nil)
+ '(foopkg-mode)))
+ (should (equal (use-package-normalize-diminish 'foopkg :diminish 'bar)
+ '(bar)))
+ (should (equal (use-package-normalize-diminish 'foopkg :diminish "bar")
+ '((foopkg-mode . "bar"))))
+ (should (equal (use-package-normalize-diminish 'foopkg :diminish 'foo-mode)
+ '(foo-mode)))
+ (should (equal (use-package-normalize-diminish 'foopkg :diminish '(foo . "bar"))
+ '((foo . "bar")))))
+
+(ert-deftest use-package-test/:diminish-1 ()
+ (match-expansion
+ (use-package foo :diminish nil)
+ `(progn
+ (require 'foo nil nil)
+ (if (fboundp 'diminish)
+ (diminish 'foo-mode)))))
+
+(ert-deftest use-package-test/:diminish-2 ()
+ (match-expansion
+ (use-package foo :diminish bar)
+ `(progn
+ (require 'foo nil nil)
+ (if (fboundp 'diminish)
+ (diminish 'bar)))))
+
+(ert-deftest use-package-test/:diminish-3 ()
+ (match-expansion
+ (use-package foo :diminish "bar")
+ `(progn
+ (require 'foo nil nil)
+ (if (fboundp 'diminish)
+ (diminish 'foo-mode "bar")))))
+
+(ert-deftest use-package-test/:diminish-4 ()
+ (match-expansion
+ (use-package foo :diminish (foo . "bar"))
+ `(progn
+ (require 'foo nil nil)
+ (if (fboundp 'diminish)
+ (diminish 'foo "bar")))))
+
+(ert-deftest use-package-test-normalize/:delight ()
+ (should (equal `((foo-mode nil foo))
+ (use-package-normalize/:delight 'foo :delight nil)))
+ (should (equal `((foo-mode nil foo-mode))
+ (use-package-normalize/:delight 'foo-mode :delight nil)))
+ (should (equal `((bar-mode nil foo))
+ (use-package-normalize/:delight 'foo :delight '(bar-mode))))
+ (should (equal `((bar-mode nil :major))
+ (use-package-normalize/:delight 'foo :delight '((bar-mode nil :major)))))
+ (should (equal `((foo-mode "abc" foo))
+ (use-package-normalize/:delight 'foo :delight '("abc"))))
+ (should (equal `((foo-mode (:eval 1) foo))
+ (use-package-normalize/:delight 'foo :delight '('(:eval 1)))))
+ (should (equal (use-package-normalize/:delight 'foo :delight '((a-mode) (b-mode " b")))
+ `((a-mode nil foo) (b-mode " b" foo))))
+ (should-error (use-package-normalize/:delight 'foo :delight '((:eval 1)))))
+
+(ert-deftest use-package-test/:delight-1 ()
+ (match-expansion
+ (use-package foo :delight)
+ `(progn
+ (require 'foo nil nil)
+ (if (fboundp 'delight)
+ (delight '((foo-mode nil foo)))))))
+
+(ert-deftest use-package-test/:delight-2 ()
+ (should-error
+ (match-expansion
+ (use-package foo :delight nil)
+ `(progn
+ (require 'foo nil nil)
+ (if (fboundp 'diminish)
+ (diminish 'foo-mode))))))
+
+(ert-deftest use-package-test/:delight-3 ()
+ (match-expansion
+ (use-package foo :delight bar)
+ `(progn
+ (require 'foo nil nil)
+ (if (fboundp 'delight)
+ (delight '((bar nil foo)))))))
+
+(ert-deftest use-package-test/:delight-4 ()
+ (match-expansion
+ (use-package foo :delight "bar")
+ `(progn
+ (require 'foo nil nil)
+ (if (fboundp 'delight)
+ (delight '((foo-mode "bar" foo)))))))
+
+(ert-deftest use-package-test/:delight-5 ()
+ (should-error
+ (match-expansion
+ (use-package foo :delight (foo . "bar"))
+ `(progn
+ (require 'foo nil nil)
+ (if (fboundp 'diminish)
+ (diminish 'foo "bar"))))))
+
+(ert-deftest use-package-test/:delight-6 ()
+ (match-expansion
+ (use-package foo :delight (foo "bar"))
+ `(progn
+ (require 'foo nil nil)
+ (if (fboundp 'delight)
+ (delight '((foo "bar" foo)))))))
+
+(ert-deftest use-package-test/334-1 ()
+ (let (foo1-map foo2-map
+ bar1-func1
+ bar1-func2
+ bar2-func1
+ bar2-func2
+ bar3-func1
+ bar3-func2
+ bar4-func1
+ bar4-func2)
+ (match-expansion
+ (bind-keys :map foo1-map
+ ("Y" . foo1)
+ :prefix "y"
+ :prefix-map bar1-prefix-map
+ ("y" . bar1-func1)
+ ("f" . bar1-func2)
+ :prefix "y"
+ :prefix-map bar2-prefix-map
+ ("y" . bar2-func1)
+ ("f" . bar2-func2)
+ :map foo2-map
+ ("Y" . foo2)
+ :prefix "y"
+ :prefix-map bar3-prefix-map
+ ("y" . bar3-func1)
+ ("f" . bar3-func2)
+ :prefix "y"
+ :prefix-map bar4-prefix-map
+ ("y" . bar4-func1)
+ ("f" . bar4-func2))
+ `(progn
+ (bind-key "Y" #'foo1 foo1-map nil)
+ (defvar bar1-prefix-map)
+ (define-prefix-command 'bar1-prefix-map)
+ (bind-key "y" 'bar1-prefix-map foo1-map nil)
+ (bind-key "y" #'bar1-func1 bar1-prefix-map nil)
+ (bind-key "f" #'bar1-func2 bar1-prefix-map nil)
+ (defvar bar2-prefix-map)
+ (define-prefix-command 'bar2-prefix-map)
+ (bind-key "y" 'bar2-prefix-map foo1-map nil)
+ (bind-key "y" #'bar2-func1 bar2-prefix-map nil)
+ (bind-key "f" #'bar2-func2 bar2-prefix-map nil)
+ (bind-key "Y" #'foo2 foo2-map nil)
+ (defvar bar3-prefix-map)
+ (define-prefix-command 'bar3-prefix-map)
+ (bind-key "y" 'bar3-prefix-map foo2-map nil)
+ (bind-key "y" #'bar3-func1 bar3-prefix-map nil)
+ (bind-key "f" #'bar3-func2 bar3-prefix-map nil)
+ (defvar bar4-prefix-map)
+ (define-prefix-command 'bar4-prefix-map)
+ (bind-key "y" 'bar4-prefix-map foo2-map nil)
+ (bind-key "y" #'bar4-func1 bar4-prefix-map nil)
+ (bind-key "f" #'bar4-func2 bar4-prefix-map nil)))))
+
+(ert-deftest use-package-test/334-2 ()
+ (let (w3m-lnum-mode-map
+ w3m-print-current-url
+ w3m-lnum-print-this-url
+ w3m-print-this-url)
+ (match-expansion
+ (bind-keys :map w3m-lnum-mode-map
+ :prefix "y"
+ :prefix-map w3m-y-prefix-map
+ ("y" . w3m-print-current-url)
+ ("f" . w3m-lnum-print-this-url)
+ ("t" . w3m-print-this-url))
+ `(progn
+ (defvar w3m-y-prefix-map)
+ (define-prefix-command 'w3m-y-prefix-map)
+ (bind-key "y" 'w3m-y-prefix-map w3m-lnum-mode-map nil)
+ (bind-key "y" #'w3m-print-current-url w3m-y-prefix-map nil)
+ (bind-key "f" #'w3m-lnum-print-this-url w3m-y-prefix-map nil)
+ (bind-key "t" #'w3m-print-this-url w3m-y-prefix-map nil)))))
+
+(ert-deftest use-package-test/482-1 ()
+ (match-expansion
+ (use-package simple
+ :bind-keymap ("C-t " . my/transpose-map)
+ :bind (:map my/transpose-map
+ ("w" . transpose-words)))
+ `(progn
+ (unless (fboundp 'transpose-words)
+ (autoload #'transpose-words "simple" nil t))
+ (bind-key "C-t "
+ #'(lambda nil
+ (interactive)
+ (use-package-autoload-keymap 'my/transpose-map 'simple nil)))
+ (bind-keys :package simple :map my/transpose-map
+ ("w" . transpose-words)))))
+
+(ert-deftest use-package-test/482-2 ()
+ (match-expansion
+ (use-package simple
+ :bind (:prefix-map my/transpose-map
+ :prefix "C-t"
+ ("w" . transpose-words)))
+ `(progn
+ (unless (fboundp 'transpose-words)
+ (autoload #'transpose-words "simple" nil t))
+ (bind-keys :package simple
+ :prefix-map my/transpose-map
+ :prefix "C-t"
+ ("w" . transpose-words)))))
+
+(ert-deftest use-package-test/482-3 ()
+ (match-expansion
+ (bind-keys :package simple
+ :prefix-map my/transpose-map
+ :prefix "C-t"
+ ("w" . transpose-words))
+ `(progn
+ (defvar my/transpose-map)
+ (define-prefix-command 'my/transpose-map)
+ (bind-key "C-t" 'my/transpose-map nil nil)
+ (bind-key "w" #'transpose-words my/transpose-map nil))))
+
+(ert-deftest use-package-test/538 ()
+ (match-expansion
+ (use-package mu4e
+ :commands (mu4e)
+ :bind (("<f9>" . mu4e))
+ :init
+ :config
+ (config))
+ `(progn
+ (unless (fboundp 'mu4e)
+ (autoload #'mu4e "mu4e" nil t))
+ (eval-after-load 'mu4e
+ '(progn (config) t))
+ (bind-keys :package mu4e ("<f9>" . mu4e)))))
+
+(ert-deftest use-package-test/543 ()
+ (match-expansion
+ (use-package hydra
+ :ensure)
+ `(progn
+ (use-package-ensure-elpa 'hydra '(t) 'nil)
+ (require 'hydra nil nil))))
+
+(ert-deftest use-package-test/545 ()
+ (match-expansion
+ (use-package spacemacs-theme
+ :ensure t
+ :init ; or :config
+ (load-theme 'spacemacs-dark t)
+ )
+ `(progn
+ (use-package-ensure-elpa 'spacemacs-theme '(t) 'nil)
+ (load-theme 'spacemacs-dark t)
+ (require 'spacemacs-theme nil nil))
+ ))
+
+(ert-deftest use-package-test/550 ()
+ (match-expansion
+ (use-package company-try-hard
+ :ensure t
+ :bind
+ ("C-c M-/" . company-try-hard)
+ (:map company-active-map
+ ("C-c M-/" . company-try-hard)))
+ `(progn
+ (use-package-ensure-elpa 'company-try-hard
+ '(t)
+ 'nil)
+ (unless
+ (fboundp 'company-try-hard)
+ (autoload #'company-try-hard "company-try-hard" nil t))
+ (bind-keys :package company-try-hard
+ ("C-c M-/" . company-try-hard)
+ :map company-active-map
+ ("C-c M-/" . company-try-hard)))))
+
+(ert-deftest use-package-test/558 ()
+ (match-expansion
+ (bind-keys* :package org-ref
+ ("C-c C-r" . org-ref-helm-insert-cite-link))
+ `(bind-key "C-c C-r" #'org-ref-helm-insert-cite-link override-global-map nil)))
+
+(ert-deftest use-package-test/560 ()
+ (cl-letf (((symbol-function #'executable-find) #'ignore))
+ (let (notmuch-command)
+ (match-expansion
+ (use-package notmuch
+ :preface (setq-default notmuch-command (executable-find "notmuch"))
+ :if notmuch-command
+ :requires foo
+ :load-path "foo"
+ :defines var)
+ `(progn
+ (eval-and-compile
+ (add-to-list 'load-path ,(pred stringp)))
+ (when (featurep 'foo)
+ (eval-and-compile
+ (setq-default notmuch-command
+ (executable-find "notmuch")))
+ (when (symbol-value 'notmuch-command)
+ (require 'notmuch nil nil))))))))
+
+(ert-deftest use-package-test/572-1 ()
+ (let ((use-package-always-defer t))
+ (match-expansion
+ (use-package auth-password-store
+ :after auth-source
+ :init
+ (setq auth-sources '(password-store)))
+ `(eval-after-load 'auth-source
+ '(setq auth-sources '(password-store))))))
+
+(ert-deftest use-package-test/572-2 ()
+ (let ((use-package-always-defer t))
+ (match-expansion
+ (use-package ivy-hydra :after ivy)
+ `nil)))
+
+(ert-deftest use-package-test/572-3 ()
+ (let ((use-package-always-defer t)
+ (use-package-defaults
+ (let ((defaults (copy-alist use-package-defaults)))
+ (setcdr (assq :defer defaults)
+ '(use-package-always-defer
+ (lambda (name args)
+ (and use-package-always-defer
+ (not (plist-member args :after))
+ (not (plist-member args :defer))
+ (not (plist-member args :demand))))))
+ defaults)))
+ (match-expansion
+ (use-package ivy-hydra :after ivy)
+ `(eval-after-load 'ivy
+ '(require 'ivy-hydra nil nil)))))
+
+(ert-deftest use-package-test/575-1 ()
+ (match-expansion
+ (use-package helm
+ :defer t
+ :after (:any ido dired)
+ :config
+ (message "test. helm start"))
+ `(progn
+ (defvar ,_ nil)
+ (defvar ,_ nil)
+ (defvar ,_
+ #'(lambda nil
+ (if ,_ ,_
+ (setq ,_ t ,_
+ (eval-after-load 'helm
+ '(progn
+ (message "test. helm start")
+ t))))))
+ (eval-after-load 'ido
+ '(funcall ,_))
+ (eval-after-load 'dired
+ '(funcall ,_)))))
+
+(ert-deftest use-package-test/575-2 ()
+ (match-expansion
+ (use-package helm
+ :defer t
+ :bind ("C-c d" . helm-mini)
+ :config
+ (message "test. helm start"))
+ `(progn
+ (unless (fboundp 'helm-mini)
+ (autoload #'helm-mini "helm" nil t))
+ (eval-after-load 'helm
+ '(progn
+ (message "test. helm start")
+ t))
+ (bind-keys :package helm ("C-c d" . helm-mini)))))
+
+(ert-deftest use-package-test/585 ()
+ (match-expansion
+ (use-package bug
+ :bind (:map bug-map ("C-a" . alpha))
+ :bind (("C-b" . beta)))
+ `(progn
+ (unless (fboundp 'alpha)
+ (autoload #'alpha "bug" nil t))
+ (unless (fboundp 'beta)
+ (autoload #'beta "bug" nil t))
+ (bind-keys :package bug :map bug-map
+ ("C-a" . alpha))
+ (bind-keys :package bug
+ ("C-b" . beta)))))
+
+(ert-deftest use-package-test/589 ()
+ (let ((use-package-verbose t)
+ (use-package-expand-minimally t)
+ debug-on-error
+ warnings)
+ (cl-letf (((symbol-function #'display-warning)
+ (lambda (_ msg _) (push msg warnings))))
+ (progn
+ (macroexpand-1
+ '(use-package ediff :defer t (setq my-var t)))
+ (should (= (and (> (length warnings) 0)
+ (string-match ":defer wants exactly one argument"
+ (car warnings))) 44))))))
+
+(ert-deftest use-package-test/591 ()
+ (let ((use-package-defaults
+ (cons '(:if (lambda (name _) `(locate-library ,name)) t)
+ use-package-defaults)))
+ (match-expansion
+ (use-package nonexistent
+ :hook lisp-mode)
+ `(when (locate-library nonexistent)
+ (unless (fboundp 'nonexistent-mode)
+ (autoload #'nonexistent-mode "nonexistent" nil t))
+ (add-hook 'lisp-mode-hook #'nonexistent-mode)))))
+
+(ert-deftest bind-key/:prefix-map ()
+ (match-expansion
+ (bind-keys :prefix "<f1>"
+ :prefix-map my/map)
+ `(progn
+ (defvar my/map)
+ (define-prefix-command 'my/map)
+ (bind-key "<f1>" 'my/map nil nil))))
+
+
+(ert-deftest bind-key/845 ()
+ (defvar test-map (make-keymap))
+ (bind-key "<f1>" 'ignore 'test-map)
+ (should (eq (lookup-key test-map (kbd "<f1>")) 'ignore))
+ (let ((binding (cl-find "<f1>" personal-keybindings :test 'string= :key 'caar)))
+ (message "test-map %s" test-map)
+ (message "binding %s" binding)
+ (should (eq (cdar binding) 'test-map))
+ (should (eq (nth 1 binding) 'ignore))
+ (should (eq (nth 2 binding) nil))))
+
+;; Local Variables:
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; End:
+
+;;; use-package-tests.el ends here
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..7b76ac87129 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.
@@ -327,6 +327,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 278e65f9bf7..1fef87ea98d 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..c3b4e17dbc0 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.
diff --git a/test/src/regex-emacs-tests.el b/test/src/regex-emacs-tests.el
index b323f592dca..cd4924f9785 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.
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 e9ddf9c0bef..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.
@@ -36,6 +36,7 @@
(declare-function sqlite-select "sqlite.c")
(declare-function sqlite-open "sqlite.c")
(declare-function sqlite-load-extension "sqlite.c")
+(declare-function sqlite-version "sqlite.c")
(ert-deftest sqlite-select ()
(skip-unless (sqlite-available-p))
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 80fde408cd3..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.
@@ -54,6 +54,7 @@
(declare-function treesit-node-descendant-for-range "treesit.c")
(declare-function treesit-node-eq "treesit.c")
+;;; Basic API
(ert-deftest treesit-basic-parsing ()
"Test basic parsing routines."
@@ -143,6 +144,8 @@
(treesit-node-string
(treesit-node-first-child-for-pos
doc-node 3))))
+ (should-error (treesit-node-first-child-for-pos doc-node 100)
+ :type 'args-out-of-range)
;; `treesit-node-descendant-for-range'.
(should (equal "(\"{\")"
(treesit-node-string
@@ -152,10 +155,187 @@
(treesit-node-string
(treesit-node-descendant-for-range
root-node 6 7 t))))
+ (should-error (treesit-node-descendant-for-range
+ root-node 100 101)
+ :type 'args-out-of-range)
;; `treesit-node-eq'.
(should (treesit-node-eq root-node root-node))
(should (not (treesit-node-eq root-node doc-node))))))
+;;; Indirect buffer
+
+(ert-deftest treesit-indirect-buffer ()
+ "Tests for indirect buffers."
+ (skip-unless (treesit-language-available-p 'json))
+ (let ((base (get-buffer-create "*treesit test*"))
+ parser indirect)
+ (unwind-protect
+ (progn
+ (with-current-buffer base
+ (setq indirect (clone-indirect-buffer "*treesit test 1*" nil)))
+ (with-current-buffer indirect
+ (setq parser (treesit-parser-create 'json)))
+ ;; 1. Parser created in the indirect buffer should be
+ ;; actually be created in the base buffer.
+ (with-current-buffer base
+ (should (equal (list parser)
+ (treesit-parser-list)))
+ (insert "[1,2,3]"))
+ ;; Change in the base buffer should be reflected in the
+ ;; indirect buffer.
+ (with-current-buffer indirect
+ (should (eq (treesit-node-end
+ (treesit-buffer-root-node))
+ 8))
+ (erase-buffer))
+ ;; Change in the indirect buffer should be reflected in the
+ ;; base buffer.
+ (with-current-buffer base
+ (should (eq (treesit-node-end
+ (treesit-buffer-root-node))
+ 1))
+ (erase-buffer)))
+ (kill-buffer base)
+ (kill-buffer indirect))))
+
+;;; Tree traversal
+
+(ert-deftest treesit-search-subtree ()
+ "Test `treesit-search-subtree'."
+ (skip-unless (treesit-language-available-p 'json))
+ (with-temp-buffer
+ (let (parser root array)
+ (progn
+ (insert "[[1,2,3], [1,2,3], [1,2,3]]")
+ (setq parser (treesit-parser-create 'json))
+ (setq root (treesit-parser-root-node parser))
+ (setq array (treesit-node-child root 0)))
+ (dolist (subarray (treesit-node-children array t))
+ ;; Find named node forward.
+ (should (equal "1" (treesit-node-text
+ (treesit-search-subtree
+ subarray "number"))))
+ ;; Find named node backward.
+ (should (equal "3" (treesit-node-text
+ (treesit-search-subtree
+ subarray "number" t))))
+ ;; Find anonymous node forward.
+ (should (equal "[" (treesit-node-text
+ (treesit-search-subtree
+ subarray "\\[" nil t))))
+ ;; Find anonymous node backward.
+ (should (equal "]" (treesit-node-text
+ (treesit-search-subtree
+ subarray "\\]" t t))))
+ ;; If ALL=nil, it shouldn't find anonymous node.
+ (should (eq nil (treesit-node-text
+ (treesit-search-subtree
+ subarray "\\["))))
+ ;; If ALL=nil, searching for number should still find the
+ ;; numbers.
+ (should (equal "1" (treesit-node-text
+ (treesit-search-subtree
+ subarray "number" nil t))))
+ ;; Find named node backward.
+ (should (equal "3" (treesit-node-text
+ (treesit-search-subtree
+ subarray "number" t t))))
+ ))))
+
+(defmacro treesit--ert-search-setup (&rest body)
+ "Setup macro used by `treesit-search-forward' and friends.
+BODY is the test body."
+ `(with-temp-buffer
+ (let (parser root array)
+ (progn
+ (insert "[[1,2,3], [4,5,6], [7,8,9]]")
+ (setq parser (treesit-parser-create 'json))
+ (setq root (treesit-parser-root-node
+ parser))
+ (setq array (treesit-node-child root 0)))
+ ,@body)))
+
+(ert-deftest treesit-search-forward ()
+ "Test `treesit-search-forward'."
+ (skip-unless (treesit-language-available-p 'json))
+ (treesit--ert-search-setup
+ (cl-loop for cursor = (treesit-node-child array 0)
+ then (treesit-search-forward cursor "" nil t)
+ for text in '("[" "[" "1" "," "2" "," "3" "]"
+ "[1,2,3]" ","
+ "[" "4" "," "5" "," "6" "]"
+ "[4,5,6]" ","
+ "[" "7" "," "8" "," "9" "]"
+ "[7,8,9]" "]"
+ "[[1,2,3], [4,5,6], [7,8,9]]")
+ while cursor
+ do (should (equal (treesit-node-text cursor)
+ text)))))
+
+(ert-deftest treesit-search-forward-named-only ()
+ "Test `treesit-search-forward'."
+ (skip-unless (treesit-language-available-p 'json))
+ (treesit--ert-search-setup
+ (cl-loop for cursor = (treesit-node-child
+ (treesit-node-child array 1) 1)
+ then (treesit-search-forward cursor "")
+ for text in '("1" "2" "3" "[1,2,3]"
+ "4" "5" "6" "[4,5,6]"
+ "7" "8" "9" "[7,8,9]"
+ "[[1,2,3], [4,5,6], [7,8,9]]")
+ while cursor
+ do (should (equal (treesit-node-text cursor)
+ text)))))
+
+(ert-deftest treesit-search-backward ()
+ "Test `treesit-search-forward'."
+ (skip-unless (treesit-language-available-p 'json))
+ (treesit--ert-search-setup
+ (cl-loop for cursor = (treesit-node-child array -1)
+ then (treesit-search-forward cursor "" t t)
+ for text in (reverse '("[[1,2,3], [4,5,6], [7,8,9]]"
+ "[" "[1,2,3]"
+ "[" "1" "," "2" "," "3" "]"
+ "," "[4,5,6]"
+ "[" "4" "," "5" "," "6" "]"
+ "," "[7,8,9]"
+ "[" "7" "," "8" "," "9" "]"
+ "]"))
+ while cursor
+ do (should (equal (treesit-node-text cursor)
+ text)))))
+
+(ert-deftest treesit-search-backward-named-only ()
+ "Test `treesit-search-forward'."
+ (skip-unless (treesit-language-available-p 'json))
+ (treesit--ert-search-setup
+ (cl-loop for cursor = (treesit-node-child
+ (treesit-node-child array -1 t) -1 t)
+ then (treesit-search-forward cursor "" t)
+ for text in (reverse '("[[1,2,3], [4,5,6], [7,8,9]]"
+ "[1,2,3]" "1" "2" "3"
+ "[4,5,6]" "4" "5" "6"
+ "[7,8,9]" "7" "8" "9"))
+ while cursor
+ do (should (equal (treesit-node-text cursor)
+ text)))))
+
+(ert-deftest treesit-cursor-helper-with-missing-node ()
+ "Test treesit_cursor_helper with a missing node."
+ (skip-unless (treesit-language-available-p 'json))
+ (treesit--ert-search-setup
+ (delete-char -1)
+ (setq root (treesit-buffer-root-node))
+ (setq array (treesit-node-child root 0))
+ ;; If everything works, this should not hang.
+ (let ((missing-bracket (treesit-node-child array -1)))
+ (treesit-search-forward missing-bracket "" t))))
+
+;;; 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))
@@ -167,6 +347,9 @@
(setq root-node (treesit-parser-root-node
parser)))
+ (should-error (treesit-query-capture root-node "" 100 101)
+ :type 'args-out-of-range)
+
;; Test `treesit-query-capture' on string, sexp and compiled
;; queries.
(dolist (query1
@@ -175,13 +358,16 @@
(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)))
@@ -193,7 +379,8 @@
(string . "\"Bob\"")
(bob . "Bob")
(number . "3")
- (n3 . "3"))
+ (n3 . "3")
+ (n3p . "3"))
(mapcar (lambda (entry)
(cons (car entry)
(treesit-node-text
@@ -207,6 +394,8 @@
'((type field: (_) @capture :anchor)
:? :* :+ "return")))))))
+;;; Narrow
+
(ert-deftest treesit-narrow ()
"Tests if narrowing works."
(skip-unless (treesit-language-available-p 'json))
@@ -343,6 +532,8 @@ visible_end.)"
;; that calls that.
)))
+;;; Range
+
(ert-deftest treesit-range ()
"Tests if range works."
(skip-unless (treesit-language-available-p 'json))
@@ -396,6 +587,8 @@ visible_end.)"
;; TODO: More tests.
)))
+;;; Multiple language
+
(ert-deftest treesit-multi-lang ()
"Tests if parsing multiple language works."
(skip-unless (and (treesit-language-available-p 'html)
@@ -432,6 +625,8 @@ visible_end.)"
;; TODO: More tests.
)))
+;;; Supplemental functions
+
(ert-deftest treesit-parser-supplemental ()
"Supplemental node functions."
(skip-unless (treesit-language-available-p 'json))
@@ -552,6 +747,330 @@ visible_end.)"
(insert "]")
(should (treesit-node-check array-node 'outdated))))
+;;; Defun navigation
+;;
+;; I've setup a framework for easier testing of defun navigation.
+;;
+;; To use it for a particular language, first write a test program
+;; similar to `treesit--ert-defun-navigation-python-program', and
+;; insert markers. Markers that marks BOLs are defined as follows:
+;;
+;; 100 Before 1st parent
+;; 101 Beg of 1st parent
+;; 102 End of 1st parent
+;; 103 Beg of 2nd parent
+;; 104 Beg of 1st method
+;; 105 End of 1st method
+;; 106 Beg of 2nd method
+;; 107 End of 2nd method
+;; 108 End of 2nd parent
+;; 109 Beg of 3rd parent
+;; 110 End of 3rd parent
+;; 999 Dummy markers
+;;
+;; Then add marker 0-9 following the definition given in
+;; `treesit--ert-defun-navigation-nested-master'. Then you can use
+;; `treesit--ert-test-defun-navigation', pass the test program you
+;; just wrote, and the appropriate master:
+;;
+;; - `treesit--ert-defun-navigation-nested-master' for nested defun
+;; - `treesit--ert-defun-navigation-top-level-master' for top-level
+
+
+(defun treesit--ert-insert-and-parse-marker (opening closing text)
+ "Insert TEXT and parse the marker positions in it.
+
+TEXT should be a string in which contains position markings
+like (1). OPENING and CLOSING are position marking's delimiters,
+for (1), OPENING and CLOSING should be \"(\" and \")\",
+respectively.
+
+This function inserts TEXT, parses and removes all the markings,
+and returns an alist of (NUMBER . POS), where number is each
+marking's number, and POS is each marking's position."
+ (declare (indent 2))
+ (let (result)
+ (insert text)
+ (goto-char (point-min))
+ (while (re-search-forward
+ (rx-to-string `(seq ,opening (group (+ digit)) ,closing))
+ nil t)
+ (let ((idx (string-to-number (match-string 1))))
+ (push (cons idx (match-beginning 0)) result)
+ (delete-region (match-beginning 0) (match-end 0))))
+ (nreverse result)))
+
+(defun treesit--ert-collect-positions (positions functions)
+ "Collect positions after calling each function in FUNCTIONS.
+
+POSITIONS should be a list of buffer positions, FUNCTIONS should
+be a list of functions. This function collects the return value
+of each function in FUNCTIONS starting at each position in
+POSITIONS.
+
+Return a list of (POS...) where each POS corresponds to a
+function in FUNCTIONS. For example, if buffer content is
+\"123\", POSITIONS is (2 3), FUNCTIONS is (point-min point-max),
+the return value is ((1 3) (1 3))."
+ (cl-loop for pos in positions
+ collect (cl-loop for fn in functions
+ collect (progn
+ (goto-char pos)
+ (funcall fn)))))
+
+(defun treesit--ert-test-defun-navigation
+ (init program master &optional opening closing)
+ "Run defun navigation tests on PROGRAM and MASTER.
+
+INIT is a setup function that runs right after this function
+creates a temporary buffer. It should take no argument.
+
+PROGRAM is a program source in string, MASTER is a list of
+\(START PREV-BEG NEXT-END PREV-END NEXT-BEG), where START is the
+starting marker position, and the rest are marker positions the
+corresponding navigation should stop at (after running
+`treesit-defun-skipper').
+
+OPENING and CLOSING are the same as in
+`treesit--ert-insert-and-parse-marker', by default they are \"[\"
+and \"]\"."
+ (with-temp-buffer
+ (funcall init)
+ (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
+ for poss in positions
+ for name = (format "marker %d" (car orig-record))
+ do (should (equal (cons name (cdr record))
+ (cons name poss)))))))
+
+(defvar treesit--ert-defun-navigation-python-program
+ "[100]
+[101]class Class1():
+[999] prop = 0
+[102]
+[103]class Class2():[0]
+[104] [1]def method1():
+[999] [2]return 0[3]
+[105] [4]
+[106] [5]def method2():
+[999] [6]return 0[7]
+[107] [8]
+[999] prop = 0[9]
+[108]
+[109]class Class3():
+[999] prop = 0[10]
+[110]
+"
+ "Python source for navigation test.")
+
+(defvar treesit--ert-defun-navigation-js-program
+ "[100]
+[101]class Class1 {
+[999]}
+[102]
+[103]class Class2 {[0]
+[104] [1]method1() {
+[999] [2]return 0;
+[999] }[3]
+[105] [4]
+[106] [5]method2() {
+[999] [6]return 0;
+[999] }[7]
+[107][8]
+[999]}[9]
+[108]
+[109]class class3 {
+[999]}[10]
+[110]
+"
+ "Javascript source for navigation test.")
+
+(defvar treesit--ert-defun-navigation-bash-program
+ "[100]
+[101]parent1 () {
+[999]}
+[102]
+[103]parent2 () {[0]
+[104] [1]sibling1 () {
+[999] [2]echo hi
+[999] }[3]
+[105] [4]
+[106] [5]sibling2 () {
+[999] [6]echo hi
+[999] }[7]
+[107][8]
+[999]}[9]
+[108]
+[109]parent3 () {
+[999]}
+[110]
+"
+ "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
+ '((0 103 105 102 106) ; Between Beg of parent & 1st sibling.
+ (1 103 105 102 106) ; Beg of 1st sibling.
+ (2 104 105 102 106) ; Inside 1st sibling.
+ (3 104 107 102 109) ; End of 1st sibling.
+ (4 104 107 102 109) ; Between 1st sibling & 2nd sibling.
+ (5 104 107 102 109) ; Beg of 2nd sibling.
+ (6 106 107 105 109) ; Inside 2nd sibling.
+ (7 106 108 105 109) ; End of 2nd sibling.
+ (8 106 108 105 109) ; Between 2nd sibling & end of parent.
+ (9 103 110 102 nil) ; End of parent.
+
+ (100 nil 102 nil 103) ; Before 1st parent.
+ (101 nil 102 nil 103) ; Beg of 1st parent.
+ (102 101 108 nil 109) ; Between 1st & 2nd parent.
+ (103 101 108 nil 109) ; Beg of 2nd parent.
+ (110 109 nil 108 nil) ; After 3rd parent.
+ )
+ "Master of nested navigation test.
+
+This basically says, e.g., \"start with point on marker 0, go to
+the prev-beg, now point should be at marker 103\", etc.")
+
+(defvar treesit--ert-defun-navigation-top-level-master
+ ;; START PREV-BEG NEXT-END NEXT-BEG PREV-END
+ '((0 103 108 102 109) ; Between Beg of parent & 1st sibling.
+ (1 103 108 102 109) ; Beg of 1st sibling.
+ (2 103 108 102 109) ; Inside 1st sibling.
+ (3 103 108 102 109) ; End of 1st sibling.
+ (4 103 108 102 109) ; Between 1st sibling & 2nd sibling.
+ (5 103 108 102 109) ; Beg of 2nd sibling.
+ (6 103 108 102 109) ; Inside 2nd sibling.
+ (7 103 108 102 109) ; End of 2nd sibling.
+ (8 103 108 102 109) ; Between 2nd sibling & end of parent.
+ (9 103 110 102 nil) ; End of parent.
+
+ ;; Top-level defuns should be identical to the nested test.
+ (100 nil 102 nil 103) ; Before 1st parent.
+ (101 nil 102 nil 103) ; Beg of 1st parent.
+ (102 101 108 nil 109) ; Between 1st & 2nd parent.
+ (103 101 108 nil 109) ; Beg of 2nd parent.
+ (110 109 nil 108 nil) ; After 3rd parent.
+ )
+ "Master of top-level navigation test.")
+
+(ert-deftest treesit-defun-navigation-nested-1 ()
+ "Test defun navigation."
+ (skip-unless (treesit-language-available-p 'python))
+ ;; Nested defun navigation
+ (let ((treesit-defun-tactic 'nested))
+ (require 'python)
+ (treesit--ert-test-defun-navigation
+ 'python-ts-mode
+ treesit--ert-defun-navigation-python-program
+ treesit--ert-defun-navigation-nested-master)))
+
+(ert-deftest treesit-defun-navigation-nested-2 ()
+ "Test defun navigation using `js-ts-mode'."
+ (skip-unless (treesit-language-available-p 'javascript))
+ ;; Nested defun navigation
+ (let ((treesit-defun-tactic 'nested))
+ (require 'js)
+ (treesit--ert-test-defun-navigation
+ 'js-ts-mode
+ treesit--ert-defun-navigation-js-program
+ treesit--ert-defun-navigation-nested-master)))
+
+(ert-deftest treesit-defun-navigation-nested-3 ()
+ "Test defun navigation using `bash-ts-mode'."
+ (skip-unless (treesit-language-available-p 'bash))
+ ;; Nested defun navigation
+ (let ((treesit-defun-tactic 'nested))
+ (treesit--ert-test-defun-navigation
+ (lambda ()
+ (treesit-parser-create 'bash)
+ (setq-local treesit-defun-type-regexp "function_definition"))
+ 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))
+ ;; Nested defun navigation
+ (let ((treesit-defun-tactic 'top-level))
+ (require 'python)
+ (treesit--ert-test-defun-navigation
+ 'python-ts-mode
+ treesit--ert-defun-navigation-python-program
+ treesit--ert-defun-navigation-top-level-master)))
+
;; TODO
;; - Functions in treesit.el
;; - treesit-load-name-override-list
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